2016-10-28 49 views
0

Linux Mint 17.1およびALSAを使用しています。私は同じサウンドを生成するwavファイルを2つ持っています:1つはpcm_s16leを使用し、もう1つはpcm_s24leを使用します。それぞれはTotem/videosによって正しく再生されます。ハードウェアパラメータを設定し、pcm_s16leを使って再生する私のコードは正常に動作します。私は次のようにpcm_s24leに対応するために、これらのパラメータを調整しようとしたときただし、:ALSA using pcm_s24le

snd_pcm_hw_params_set_format(audioHandle, audioParams, SND_PCM_FORMAT_S24_LE); 

を[私は単に「SND_PCM_FORMAT_S16_LE」の「SND_PCM_FORMAT_S24LE」を置換しています]。 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ビットのサンプルを格納する3つの方法があります。

 
      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 

ほとんどのハードウェアはS24_3LEを使用してUSBを除き、S32_LEを使用しています。 S24_LEを使用するハードウェアはありません。

ALSAはサンプルフォーマットを自動的に変換できますが、独自のサンプルフォーマットを正しく記述する必要があります。