Цитата Сообщение от aluver Посмотреть сообщение
Это как раз не вопрос. Перевод добавлением нулевых младших разрядов в 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
По распознаваемым форматам тоже всё очень брутально:
Код:
    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;
Эту часть надо либо переписывать, а потом проверять, либо использовать режим PassThrough, причем для этого, возможно, снимать сигнал с HDMI:
/*
* 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.
*/
, либо имплементировать для USB-устройств самостоятельно.