当前位置: 首页 > 知识库问答 >
问题:

在c中使用alsa的dMix插件进行音频混音

陈增
2023-03-14

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

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

这是正确的吗?

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

例如:8000Hz单声道16位

  • 将snd\u pcm\u hw\u params\u set\u rate()设置为8000hz

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

如能作出任何澄清,将不胜感激。

编辑:

我可能误解了以下内容:[阿尔萨]

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

所以要明确的是,如果我改变基金的利率。dmix设备的配置为44100,所有内容都应自动重新采样为44100并混合?

因此,我的两个混合音频文件之一的速度不正确的原因可能是使用alsa-lib进行不正确的流设置造成的?

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

共有1个答案

柴衡
2023-03-14

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

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

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

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

 类似资料:
  • 问题内容: 我使用以下代码将sdcard中存在的多个wav文件附加到单个文件。audFullPath是一个数组列表,其中包含音频文件的路径。这是正确的吗。完成此操作后,当我播放recordedaudio1时。它只播放第一个文件。我想播放所有文件。任何建议.. 问题答案: 您无法以这种方式附加文件。那是因为每个都有特殊的格式: 最简单的文件如下所示: 您需要做的是: 确保所有WAV文件兼容:相同的音

  • 本文向大家介绍arm linux利用alsa驱动并使用usb音频设备,包括了arm linux利用alsa驱动并使用usb音频设备的使用技巧和注意事项,需要的朋友参考一下 一.背景: arm linux的内核版本是3.13.0 二.准备工作 添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项: 接下来就重新编译内核即可 三.交叉编译alsa-lib和alsa-utils (alsa-ut

  • 但是我将ffmpeg更新到了最新版本(ffmpeg version git-2012-06-16-809d71d),现在在这个版本中参数不起作用。 请告诉我如何使用将新音频添加到视频(不是混合)中。

  • 我正在尝试使用MediaCodec和MediaMuxer对来自相机的视频和来自麦克风的音频进行编码。我在录制时使用OpenGL在图像上覆盖文本。 我以这些课程为例: http://bigflake.com/mediacodec/CameraToMpegTest.java.txt https://github.com/OnlyInAmerica/HWEncoderExperiments/blob/m

  • 问题内容: 我一直在寻找一个简单的C代码示例来设置ALSA混音器的主音量,但对于此所谓的常见操作找不到任何简单的东西。 我完全不熟悉ALSA,因此,我自己做一个最小的例子将需要一些时间。如果有人可以提供,我将很高兴。 问题答案: 以下对我有用。参数量应在[0,100]范围内。当心,没有错误处理!

  • 当我使用ffmpeg从wmv转换到mp4时,我的音频质量很差。我的ffmpeg命令如下: 有人能建议我如何在不降低任何质量的情况下转换视频吗?