C++ 使用alsa和x27进行音频混音;在c++;

C++ 使用alsa和x27进行音频混音;在c++;,c++,linux,audio,alsa,C++,Linux,Audio,Alsa,我尝试使用alsa同时播放两个wav文件。请注意,wav文件具有不同的采样率。这是可能的,音频流被混合并发送到音频芯片。(我正在嵌入式linux设备上开发。)但其中一个流的播放速度比正常情况快了几倍。所以我想重采样有问题 我有一个默认设备,在/etc/asound.conf中启用了dmix插件,并将采样率设置为44100Hz。但据我所知,ALSA将所有流在内部重新采样至48khz,并将其混合,然后再次将其下采样至我所需的输出速率,在我的情况下为44.1khz 这是正确的吗 当使用alsa lib

我尝试使用alsa同时播放两个wav文件。请注意,wav文件具有不同的采样率。这是可能的,音频流被混合并发送到音频芯片。(我正在嵌入式linux设备上开发。)但其中一个流的播放速度比正常情况快了几倍。所以我想重采样有问题

我有一个默认设备,在/etc/asound.conf中启用了dmix插件,并将采样率设置为44100Hz。但据我所知,ALSA将所有流在内部重新采样至48khz,并将其混合,然后再次将其下采样至我所需的输出速率,在我的情况下为44.1khz

这是正确的吗

当使用alsa lib播放音频文件时,是否需要设置该特定wav文件的所有参数

例如:8000hz单声道16位

  • 将snd_pcm_hw_参数_set_rate()设置为8000hz
  • snd_pcm_hw_参数设置_格式为16位LE/BE/有符号/无符号
  • 单声道的snd_pcm_硬件_参数_设置_通道
这是更改设备的硬件设置还是仅更改此特定音频流的硬件设置

如有任何澄清,将不胜感激

编辑:

我可能误解了以下内容:[ALSA]

启用软件混合后,ALSA将被迫以相同频率重新采样所有内容(支持时默认为48000)。dmix使用的重采样算法很差,会产生明显的音质损失

所以说得很清楚,如果我将dmix设备的asound.conf中的速率更改为44100,那么所有内容都应该自动重新采样为44100并混合

因此,我的两个混合音频文件中有一个速度不正确的原因可能是由于使用alsa lib的流设置不正确所致

因为如果我一次播放一个wav文件,两个流看起来都是正确的。
只有当第一个正在播放,同时我在流中混合另一个时,第一个wav文件的速度才会改变。请注意,此时硬件设置是相同的。为什么设置stream2的硬件参数(和播放)会改变stream1中的某些内容?

ALSA没有固定的48 kHz重采样

dmix
设备使用固定的采样率和格式,但所有使用它的设备通常使用
plug
插件来启用自动转换

使用alsa lib时,必须设置所有对您重要的参数;对于未显式设置的任何参数,alsa lib选择一个稍微随机的值


不同的流可以使用不同的参数。

ALSA没有固定的48 kHz重采样

dmix
设备使用固定的采样率和格式,但所有使用它的设备通常使用
plug
插件来启用自动转换

使用alsa lib时,必须设置所有对您重要的参数;对于未显式设置的任何参数,alsa lib选择一个稍微随机的值

不同的流可以使用不同的参数