- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想用 alsa 同时播放两个 wav 文件。请注意,wav 文件具有不同的采样率。这是可能的,音频流被混合并发送到音频芯片。 (我正在嵌入式 linux 设备上开发。)但是一个流的播放速度比正常播放快几倍。所以我猜重采样有问题。
我有一个默认设备,在/etc/asound.conf 中启用了 dmix 插件,并将采样率设置为 44100Hz。但据我所知,ALSA 在内部将所有流重新采样到 48khz,并在将它们再次下采样到我想要的输出速率之前混合它们,在我的例子中是 44.1khz。
这是正确的吗?
当使用 alsa-lib 播放音频文件时,我是否需要为特定的 wav 文件设置所有参数?
例如:8000hz 单声道 16 位
这会更改设备的硬件设置还是仅更改此特定音频流的硬件设置?
如有任何澄清,我们将不胜感激。
编辑:
我可能误解了以下内容:[ALSA]
启用软件混合后,ALSA 会强制将所有内容重新采样到相同的频率(支持时默认为 48000)。 dmix 使用较差的重采样算法,会产生明显的音质损失。
明确一点,如果我将 dmix 设备的 asound.conf 中的速率更改为 44100,所有内容都应该自动重新采样为 44100 并混合?
因此,我的两个混合音频文件之一的速度不正确的原因可能是使用 alsa-lib 的流设置不正确造成的?
因为如果我一次播放一个 wav 文件,两个流似乎都是正确的。只有当第一个正在播放并且同时我在流中混合另一个时,第一个 wav 文件的速度才会改变。请注意,此时硬件设置相同。为什么设置 stream2 的硬件参数(和播放)会改变 stream1 中的某些内容?
最佳答案
ALSA 没有固定的 48 kHz 重采样。
dmix
设备使用固定的采样率和格式,但所有使用它的设备通常都使用 plug
插件来启用自动转换。
使用 alsa-lib 时,您必须设置所有对您重要的参数;对于任何未明确设置的参数,alsa-lib 选择一个有点随机的值。
不同的流可以使用不同的参数。
关于c++ - 在 C++ 中使用 alsa 的 dmix 插件进行音频混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18131224/
我在一个嵌入式项目上使用 ALSA dmix 插件,并通过使用 mpg321-alsa 播放它们来混合 mp3 文件。在我的 asound.conf 中,我将我的 dmix 采样率设置为 44100H
我想用 alsa 同时播放两个 wav 文件。请注意,wav 文件具有不同的采样率。这是可能的,音频流被混合并发送到音频芯片。 (我正在嵌入式 linux 设备上开发。)但是一个流的播放速度比正常播放
我在嵌入式系统中有一个应用程序,该系统有一个基于 OSS 的应用程序。不幸的是,这个应用程序采用固定采样率 (8K),但我需要它为 48K。此外,我无法更改应用程序。 我正在研究采样率转换插件,例如
我是一名优秀的程序员,十分优秀!