2016-10-28 3 views
0

Использование Linux Mint 17.1 и ALSA. У меня есть два wav-файла, которые воспроизводят одинаковый звук: один использует pcm_s16le, а другой - pcm_s24le. Каждый из них воспроизводится тотем/видео. Мой код для установки аппаратных параметров и воспроизведения с помощью pcm_s16le отлично работает. Однако, когда я пытаюсь настроить эти параметры, чтобы приспособить pcm_s24le следующим образом:ALSA с использованием pcm_s24le

snd_pcm_hw_params_set_format(audioHandle, audioParams, SND_PCM_FORMAT_S24_LE); 

[Я просто сменил «SND_PCM_FORMAT_S24LE» для «SND_PCM_FORMAT_S16_LE»]. Вызов snd_pcm_writei является

snd_pcm_writei(m_audioHandle, *m_pAudioFrameData, *m_pAudioFrameSize/(m_nChannels * m_bitsPerSample/8); 

я получаю в основном мусор звук (шипение, волнение) с намеком правильного звука.

По сути мой вопрос в том, как мне преобразовать код, который работает для SND_PCM_FORMAT_S16_LE, для работы в SND_PCM_FORMAT_S24_LE?

ответ

0

Есть три возможных способа хранения 24-разрядных выборок в памяти:

 
      LSB       MSB 
      1st byte 2nd byte 3rd byte 4th byte alignment 
S32_LE: 00000000 xxxxxxxx xxxxxxxx xxxxxxxx 32 bits 
S24_LE: xxxxxxxx xxxxxxxx xxxxxxxx 00000000 32 bits 
S24_3LE: xxxxxxxx xxxxxxxx xxxxxxxx    24 bits 

Большинство аппаратных средств использует S32_LE, для USB, который использует S24_3LE исключением. Нет оборудования, использующего S24_LE.

ALSA может автоматически преобразовывать формат выборки, но вы должны правильно описать свой собственный образец.

Смежные вопросы