首页 文章

音频混合 alsa 的 dmix 插件 c

提问于
浏览
1

我尝试使用 alsa 同时播放两个 wav 文件。请注意,wav 文件具有不同的采样率。这是可能的,并且音频流被混合并发送到音频芯片。 (我正在开发一个嵌入式 Linux device.)但是一个流的播放速度比普通的快几倍。所以我猜重新采样存在问题。

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

它是否正确?

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

例如:8000hz mono 16-bits

  • 将 snd_pcm_hw_params_set_rate()设置为 8000hz

  • snd_pcm_hw_params_set_format 到 16 位 LE/BE/signed/unsigned

  • 单声道 snd_pcm_hw_params_set_channels

这是更改设备的硬件设置还是仅更改此特定音频流?

任何澄清将不胜感激。

编辑:

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

启用软件混合后,ALSA 将被强制重新采样所有频率(默认情况下,支持时为 48000)。 dmix 使用差的重采样算法,会产生明显的音质损失。

所以要明确的是,如果我将 dmix 设备的 asound.conf 中的速率更改为 44100,那么应该将所有内容自动重新采样到 44100 并混合使用?

因此,我的两个混合音频文件之一的速度不正确的原因可能是由使用 alsa-lib 的错误流设置引起的?

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

1 回答

  • 1

    ALSA 没有固定的 48 kHz 重采样。

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

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

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

相关问题