Но ведь при прослушивании через сторонние проигрыватели, такие, как USB audio player PRO это не распространяется? Верно? Кстати, я уже привык к нему, даже кнопки на руле понимает, правда звук пока не очень всё таки, никак сабра не доедет...
Вид для печати
Пусть даже AudioHAL даунсэмплит до 44100 и двумя каналами ограничено, все равно все записи в родном CD-Audio слушаем... с этим пока можно смириться. Главное отрубить остальные "плюшечные" зло-эффекты (soundfx и т.д.).
А вот заменить (а вернее, не покупать) звуковой процессор засчет реализации софтового роутинга и обработки средствами LADSPA - это я понимаю! Трюк из разряда "смотри как я могу" :)
Я очень внимательно читал Ваши сообщения на форуме по альса с ладспа, и очень проникся идеей где-то с месяца 3 назад. Но тогда я уже успел приобрести то, что есть сейчас. С этим и борюсь :)
А для RK3066 есть ли возможность?
USB Audio Pro обращается к звуковым адаптерам в обход ALSA, напрямую через USB Driver ядра. У этого приложения независимая от Андроид реализация звуковоспроизведения, и настройки на этом уровне доступны только через данное приложение (либо его разработчиков).
Звук в основном зависит от качества исходного материала. Сомнительно стремление к 24bit, если подавляющее большинство записей в 16 -битном формате? Задержки и фильтры в LADSPA, кстати, переводят все в FLOAT (с плавающей точкой) формат перед преобразованиями, а потом сворачивают в исходный. На качестве это никак не сказывается, если сравнить оригинал и обработаный сигнал, хотя потери казалось бы неизбежны(32 bit => 16 bit). Разрешающая способность кодека при этом не играет никакого рояля, это всего лишь еще одно преобразование 16bit=>24bit, если исходный материал был 16 bit.
Это как раз не вопрос. Перевод добавлением нулевых младших разрядов в 24 бит перед регулировкой громкости просто необходим. Но у меня пока конфигурирированием asound.conf этого сделать не получилось. Может быть как раз из-за ограничения в библиотеках альса на рк3066? Как бы проверить?
Этот перевод можно организовать на уровне внешнего ЦАП, т.к. этот код, видимо, не предполагает работу с длинными целыми:
По распознаваемым форматам тоже всё очень брутально:Код:#ifdef ALSA_VOLGAIN
void volumeGain(const void * buffer, size_t len, int db)
{
short * buffer_end = (short*)buffer + (len/2);
short * pcmData = (short *)buffer;
int tmp;
while(pcmData<buffer_end){
tmp = (int)(*pcmData)<<db;
*pcmData = tmp > 32767 ? 32767 : (tmp < -32768 ? -32768 : tmp);
++pcmData;
}
}
#endif
Эту часть надо либо переписывать, а потом проверять, либо использовать режим PassThrough, причем для этого, возможно, снимать сигнал с HDMI:Код:snd_pcm_format_t iformat = mHandle->format;
if (format) {
switch(*format) {
case AudioSystem::FORMAT_DEFAULT:
break;
case AudioSystem::PCM_16_BIT:
iformat = SND_PCM_FORMAT_S16_LE;
break;
case AudioSystem::PCM_8_BIT:
iformat = SND_PCM_FORMAT_S8;
break;
default:
LOGE("Unknown PCM format %i. Forcing default", *format);
break;
}
if (mHandle->format != iformat)
return BAD_VALUE;
switch(iformat) {
default:
case SND_PCM_FORMAT_S16_LE:
*format = AudioSystem::PCM_16_BIT;
break;
case SND_PCM_FORMAT_S8:
*format = AudioSystem::PCM_8_BIT;
break;
}
}
return NO_ERROR;
, либо имплементировать для USB-устройств самостоятельно.Цитата:
/*
* 1, FIXED: multi usb audio problem.
* 2, FIXED: adjust spdif volume.
* 3, FIXED: FM34 audio codec drain crash problem.
* 4, SUPPORT: Spdif Passthrough, current version support Dolby Digital AC3 5.1, AC3 2
* next version will support DTS 5.1 spdif passthrough.
* 5, SUPPORT: Hdmi 5point1 Multichannel audio output.
* 6, FIXED: SoundRecorder Pointer swing abnormally.
* 7, FIXED: The Recorder file duration is longer than the actual recording time(SoundRecorder.apk).
* 8, FIXED: no sound in the end of recording video by using camera.
* 9, SUPPORT: AGC, NS SUPPORT.
* 10,SUPPORT: HDMI I2S PASSTHROUGH SUPPORT.
*/
Это как? На уровне snd-usb-audio? А в нем разве есть ресэмплер? Я пытался разобраться с параметром device_setup, а также возможностью установки AltSetting при инициализации своей сабры U2..... но безрезультатно....
Для Sabre U2 по умолчанию AltSetting 1 (16 бит и до 48 кГц), а существует AltSetting 2 (24 бит, до 96кГц). Может быть можно все-таки прописать параметры инициализации USB по vid pid и насильно установить AltSetting 2 ?
Я пока не отказался от мысли реализовать аудиокарту со встроенным DSP(USB-FPGA-8xAUDIO_OUT) специально для андроид девайсов(чётко по стандарту Audio class 1, стерео), кое какие успехи уже есть, но к сожалению опять в командировку на месяц отправляют, постораюсь там допилить.
Если кто нибудь хорошо пишет под андроид и хочет ускорить процесс - пишите в личку.
Вот выдержка с документации на андроид 5
Впринцепе на том железе что выбрал можно и второй класс сделать, но хочется чтоб девайс работал без доп драйверов, тем более я их писать не умею. Так что пока только по спецификации андроида буду делать.Цитата:
Development mode
USB audio is not supported in development mode.
Host mode
Android 5.0 (API level 21) and above supports a subset of USB audio class 1 (UAC1) features:
The Android device must act as host
The audio format must be PCM (interface type I)
The bit depth must be 16-bits, 24-bits, or 32-bits where 24 bits of useful audio data are left-justified within the most significant bits of the 32-bit word
The sample rate must be either 48, 44.1, 32, 24, 22.05, 16, 12, 11.025, or 8 kHz
The channel count must be 1 (mono) or 2 (stereo)
Perusal of the Android framework source code may show additional code beyond the minimum needed to support these features. But this code has not been validated, so more advanced features are not yet claimed.