Ушел в ЛАС
Технический директорArray
Репутация: лучше не знать
Регистрация
11.01.2004
Город/село
Столиця
Сообщений
13,050
Спасибо (Раздал)
11289
Спасибо (Получил)
14942
Android 24 bit/96 kHz
С подачи Rover'а, озадачились вопросами качества воспроизведения с Android-устройствах в роли источников звука. В частности, насколько жестко ограничение Google по 16 bit/44.1 kHz/ 2 channels, о котором утверждают разработчики.
А также насколько критично данное ограничение для мобильных устройств, возможности процессоров которых также далеко не безграничны.
Пресловутое ограничение, если такое и имеется в последних версиях Андроида, в большей степени связано с отсутствием необходимости закладывать в музыкальные приложения протоколы воспроизведения аудиофайлов с параметрами, превосходящими мультимедийные возможности SoC. Тем не менее, так как ядро Linux разрабатывалось для более широкого спектра устройств, базовая часть аппаратной поддержки звуковых карт, поддерживаемых ALSA, обеспечивается по умолчанию уже на этом уровне, но эти возможности попросту не используются оболочкой.
Это можно продемонстрировать на следующем примере. Скачаем тестовые сэмплы в формате .wav для 16 и 24-битовых стандартов соответственно. Например, из следующей подборки: http://www.nordicaudiolabs.com/dart/ . Алгоритм "даунсэмплинга" в данный момент нам неинтересен, достаточно быть уверенными в параметрах тестируемого материала.
Возможности встроенного звукового адаптера, как и ожидалось, ограничены 16 битами. Чего не скажешь про частоту дискретизации, все-таки целых 48 кГц, а не 44,1 кГц, имеют полное право на жизнь:
1|root@android:/mnt/extsd/test-samles # alsa_aplay -vv -Dhw:0,0 24.wav
Playing WAVE '24.wav' : Signed 24 bit Little Endian in 3bytes, Rate 48000 Hz, Stereo
aplay: set_params:1054: Sample format non available
Available formats:
- S16_LE
Теперь подключим карту, заведомо аппаратно поддерживающую 16/24 бит и 48/96 кГц:
И, как можно убедиться, список поддерживаемых форматов довольно длинный:
Код:
root@android:/ # cat /proc/asound/card1/stream0
Creative Technology Ltd SB Audigy 2 NX at usb-sw_hcd_host0-1, high speed : USB Audio
Playback:
Status: Stop
Interface 1
Altset 3
Format: S16_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 48000
Data packet interval: 1000 us
Interface 1
Altset 4
Format: S24_3LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 48000
Data packet interval: 1000 us
Interface 1
Altset 5
Format: S16_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 96000
Data packet interval: 1000 us
Interface 1
Altset 6
Format: S24_3LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 96000
Data packet interval: 1000 us
Interface 1
Altset 7
Format: S16_LE
Channels: 4
Endpoint: 1 OUT (ASYNC)
Rates: 48000
Data packet interval: 1000 us
Interface 1
Altset 8
Format: S24_3LE
Channels: 4
Endpoint: 1 OUT (ASYNC)
Rates: 48000
Data packet interval: 1000 us
Interface 1
Altset 9
Format: S16_LE
Channels: 4
Endpoint: 1 OUT (ASYNC)
Rates: 96000
Data packet interval: 1000 us
Interface 1
Altset 10
Format: S24_3LE
Channels: 4
Endpoint: 1 OUT (ASYNC)
Rates: 96000
Data packet interval: 125 us
Interface 1
Altset 11
Format: S16_LE
Channels: 6
Endpoint: 1 OUT (ASYNC)
Rates: 48000
Data packet interval: 1000 us
Interface 1
Altset 12
Format: S24_3LE
Channels: 6
Endpoint: 1 OUT (ASYNC)
Rates: 48000
Data packet interval: 1000 us
Interface 1
Altset 13
Format: S16_LE
Channels: 6
Endpoint: 1 OUT (ASYNC)
Rates: 96000
Data packet interval: 125 us
Interface 1
Altset 14
Format: S24_3LE
Channels: 6
Endpoint: 1 OUT (ASYNC)
Rates: 96000
Data packet interval: 125 us
Interface 1
Altset 15
Format: S16_LE
Channels: 8
Endpoint: 1 OUT (ASYNC)
Rates: 48000
Data packet interval: 1000 us
Interface 1
Altset 16
Format: S24_3LE
Channels: 8
Endpoint: 1 OUT (ASYNC)
Rates: 48000
Data packet interval: 125 us
Interface 1
Altset 17
Format: S16_LE
Channels: 8
Endpoint: 1 OUT (ASYNC)
Rates: 96000
Data packet interval: 125 us
Interface 1
Altset 18
Format: S24_3LE
Channels: 8
Endpoint: 1 OUT (ASYNC)
Rates: 96000
Data packet interval: 125 us
Capture:
Status: Stop
Interface 2
Altset 5
Format: S16_LE
Channels: 2
Endpoint: 2 IN (NONE)
Rates: 48000
Data packet interval: 1000 us
Interface 2
Altset 6
Format: S24_3LE
Channels: 2
Endpoint: 2 IN (NONE)
Rates: 48000
Data packet interval: 1000 us
Interface 2
Altset 7
Format: S16_LE
Channels: 2
Endpoint: 2 IN (NONE)
Rates: 96000
Data packet interval: 1000 us
Interface 2
Altset 8
Format: S24_3LE
Channels: 2
Endpoint: 2 IN (NONE)
Rates: 96000
Data packet interval: 1000 us
При этом стандартное приложение "Музыка" при воспроизведении 24.wav, вероятно, действительно пытается "на лету" преобразовать в другой формат, о чем свидетельствуют жуткий скрежет каждые несколько тактов. Иные же приложения, jetAUDIO к примеру, воспроизводят 24.wav, на первый взгляд, точно так же, как и команда alsa_aplay из консоли.
---------- Сообщение добавлено 19.01.2014 в 02:57 ----------
Также стоит внимательно рассмотреть функции и структуры данных библиотеки, отвечающие непосредственно за создание аудиопотока:
Код:
/* Configuration for a stream */
struct pcm_config {
unsigned int channels_min;
unsigned int channels_max;
unsigned int rate_max;
unsigned int rate_min;
unsigned int channels;
unsigned int rate;
unsigned int period_size;
unsigned int period_count;
enum pcm_format format;
/* Values to use for the ALSA start, stop and silence thresholds. Setting
* any one of these values to 0 will cause the default tinyalsa values to be
* used instead. Tinyalsa defaults are as follows.
*
* start_threshold : period_count * period_size
* stop_threshold : period_count * period_size
* silence_threshold : 0
*/
unsigned int start_threshold;
unsigned int stop_threshold;
unsigned int silence_threshold;
int avail_min;
unsigned int in_init_channels;//keep the record init channels
};
struct pcm *pcm_open_req(unsigned int card, unsigned int device,
unsigned int flags, struct pcm_config *config, int requested_rate);
При этом предпочтительные параметры конфигурации могут быть назначены при вызове из audio.primary.exDroid.so, как это реализовано в нашем решении для a13 Андроид зеркало на Allwinner A13 в части частоты дискретизации, что дает возможность корректировать обращения к аудиосистеме со стороны стандартных приложений Android, если они содержат в себе излишние ограничения.
---------- Сообщение добавлено 19.01.2014 в 15:02 ----------
Предопределив желаемую частоту дискретизации для библиотеки audio.primary.exDroid.so через параметры конфигурации системы audio.usb.out.freq, и перенаправив все вызовы на собственную функцию pcm_open_req вместо pmp_open, мы получили возможность передавать эту настройку через переменную requested_rate
struct pcm *pcm_open_req(unsigned int card, unsigned int device,
unsigned int flags, struct pcm_config *config, int requested_rate);
int in_ajust_rate = in->requested_rate;
// out/in stream should be both 44.1K serial
if (!(in->requested_rate % SAMPLING_RATE_11K))
{
// OK
in_ajust_rate = in->requested_rate;
}
else
{
in_ajust_rate = SAMPLING_RATE_11K * in->requested_rate / SAMPLING_RATE_8K;
if (in_ajust_rate > SAMPLING_RATE_44K)
{
in_ajust_rate = SAMPLING_RATE_44K;
}
LOGV("out/in stream should be both 44.1K serial, force capture rate: %d", in_ajust_rate);
}
in->pcm = pcm_open_req(0, PORT_CODEC, PCM_IN, &in->config, in_ajust_rate);
для последующей обработки и корректировки для совместимости и выбранным в данный момент оборудованием (встроенный SoC или внешний USB DAC), если потребуется, на уровне библиотеки libtinyalsa.so:
вообще надо рассматривать до 20, дальше это теоретически для самоуспокоения. Шумы усилителя громче. При такой частоте можно услышать как идут электронные часы
Немного хочу тоже въехать в эту тему : если я правильно понимаю, то использую спидиф мы обходим обработку звука самим процессором со встроенным кодеком ? Так ? И тогда имея усилитель со входом спидиф получаем отличный звук ? А насчет фильтров и тембров ? Где они будут или должны быть?
маХЕРовый
Начальник сменыArray
Репутация: лучше не знать
Регистрация
05.06.2006
Город/село
г. Жуковский
Сообщений
1,851
Спасибо (Раздал)
848
Спасибо (Получил)
4412
Re: Android 24 bit/96 kHz
Продолжим совместное исследование ограничений.
При запуске воспроизведение 16-hpt.wav из андроид-приложений ограничение накладывается, невзирая на переопределение частоты дискретизации
root@android:/ # cat /proc/asound/card1/stream0
cat /proc/asound/card1/stream0
C-Media Electronics Inc. USB Audio Device at usb-sw-ohci-1.5, full speed : USB A
udio
root@android:/ # cat /proc/asound/card1/stream0
cat /proc/asound/card1/stream0
C-Media Electronics Inc. USB Audio Device at usb-sw-ohci-1.5, full speed : USB A
udio
Playback:
Status: Running
Interface = 1
Altset = 1
URBs = 3 [ 8 8 8 ]
Packet Size = 200
Momentary freq = 48000 Hz (0x30.0000)
Interface 1
Altset 1
Format: S16_LE
Channels: 2
Endpoint: 1 OUT (ADAPTIVE)
Rates: 44100, 48000
---------- Сообщение добавлено 19.01.2014 в 20:10 ----------
Сообщение от MSMaster
А,с помощью Нейтрона,не пробовали выводить хай-резы ?
Попробовали, и не только его. Андроид настроен на выхлоп 16/48, но любой плеер, проигрывая файл с частотой дескритизации 48 кГц ПРОГРАМНО даунсемплит его в 44.1 кГц, и такую частоту мы получаем на выходе, хотя в плеере видим частоту 48 кГц.
Бум думать, как победить.
Сообщение от хоттабыч
Немного хочу тоже въехать в эту тему : если я правильно понимаю, то использую спидиф мы обходим обработку звука самим процессором со встроенным кодеком ? Так ? И тогда имея усилитель со входом спидиф получаем отличный звук ? А насчет фильтров и тембров ? Где они будут или должны быть?
Выводя цифру из Андроида, мы в первую очередь исключаем работу встроенного поганого ЦАПа, а обработку поручаем внешнему устройству. Подключили вот это : http://shop.rznprb.com/index.php?rou...&path=20_26_66 получили практически готовую систему.
маХЕРовый
Начальник сменыArray
Репутация: лучше не знать
Регистрация
05.06.2006
Город/село
г. Жуковский
Сообщений
1,851
Спасибо (Раздал)
848
Спасибо (Получил)
4412
Re: Android 24 bit/96 kHz
Формат 24/96 это здорово. А вот следующая ступень - асинхронная передача (XMOS, cm6631) её возможно к Андрюше прикрутить?
Вот реальный пример - вот это девайс http://www.aliexpress.com/snapshot/6142025743.html ,Нексус 7 с андроид 4.2 его в упор не видит, а возможно сделать так, шоб увидел, а, Сань?
Ушел в ЛАС
Технический директорArray
Репутация: лучше не знать
Регистрация
11.01.2004
Город/село
Столиця
Сообщений
13,050
Спасибо (Раздал)
11289
Спасибо (Получил)
14942
Re: Android 24 bit/96 kHz
Сообщение от Rover
Формат 24/96 это здорово. А вот следующая ступень - асинхронная передача (XMOS, cm6631) её возможно к Андрюше прикрутить?
Вот реальный пример - вот это девайс http://www.aliexpress.com/snapshot/6142025743.html ,Нексус 7 с андроид 4.2 его в упор не видит, а возможно сделать так, шоб увидел, а, Сань?
Так же, как и в случаях с любым нестандартным оборудованием - искать или кодить драйвера под текущее ядро. И настраивать существующие до уровня совместимости.
На Minix'ах мы столкнулись с тем, что плата с асинхронной передачей заработала только при подключении к OTG-порту, в драйвер которого был внедрен по всей видимости "костыль" от Raspberry Pi. Но это спасает только на 116A, на 116i вса равно начинаются лаги через некоторое время. И вообще USB для audio - это зло. Но так как до I2C/I2S у разработчиков "высоких концов" руки могут так и не добраться, при доступе к прошивке аналогичных устройств нужно допиливать USB-драйвера ядра. Либо удачно встраивать чужие наработки на этом поле.
Ушел в ЛАС
Технический директорArray
Репутация: лучше не знать
Регистрация
11.01.2004
Город/село
Столиця
Сообщений
13,050
Спасибо (Раздал)
11289
Спасибо (Получил)
14942
Re: Android 24 bit/96 kHz
Сопряжение неподдерживаемых устройств с Android лучше всего начинать с проверки их работоспособности под Ubuntu с последней версией ядра (сейчас 3.13.х). Если заустилось под ней, то после танцев с бубном и ядром, Андроид хотя бы его начнет распознавать.
маХЕРовый
Начальник сменыArray
Репутация: лучше не знать
Регистрация
05.06.2006
Город/село
г. Жуковский
Сообщений
1,851
Спасибо (Раздал)
848
Спасибо (Получил)
4412
Re: Android 24 bit/96 kHz
Поженил я Nexus 7 с этим девайсом:
http://ru.aliexpress.com/item/1505305058.html (как? сИкрет ).
Если Фсё успею допилить (в основном управление на руле) в Серпухове 09.08.14 буду выступать на планшете.
Программа "прощай CD ROM" в действии !!!
Социальные закладки