1 个文件中的 5 个独立音频通道

Posted

技术标签:

【中文标题】1 个文件中的 5 个独立音频通道【英文标题】:5 individual audio channels in 1 file 【发布时间】:2016-08-12 16:25:33 【问题描述】:

不知道在哪里提出这个问题,所以我提前道歉。

我有一个测试设置,在一个房间里有 5 个扬声器,围绕着一对麦克风。我正在从扬声器的不同角度测试麦克风的灵敏度。我有一个放大器/混音器连接到它们,并且可以控制各个通道。

我想将 5 个音频通道放在一个文件中。通过适当的延迟,我希望一次只播放一个扬声器。所以通道 1 连接到扬声器 1,通道 2 连接到扬声器 2,依此类推。

我一直在使用 Audacity 创建文件。然而,通道 4 和 5 在两个扬声器中播放,而不是一个。并且通道 3 听起来很弱。我想这是因为 5.1 标准,其中通道 4/5 必须处理“左后/右后”,而通道 3 用于潜艇。

是否有一种文件格式可以让我将纯单个频道输入扬声器?我不限于文件格式,但到目前为止我已经尝试过 wav、ogg 和 flac。

【问题讨论】:

【参考方案1】:

在 Audacity 中,您必须选中 Import/Export section of the preferences 中的“使用自定义组合”单选按钮。这将允许您导出多通道文件,并手动将轨道分配给通道。

除此之外,普通的旧 .wav 可以正常工作。

但您也可以使用SoX 以更自动化的方式创建文件。

您可以手动将五个不同的文件合并(或文档中提到的“合并”)成一个五通道文件,如下所示:

sox -M chan1.wav chan2.wav chan3.wav chan4.wav chan5.wav multi.wav

为了自动化这个过程,我整理了一个简短的 Bash 例程,用于生成具有交错测试音调的多通道文件:

NUM=5    # Number of channels
LEN=2    # Length of each test tone, in seconds
OVL=0.5  # Overlap between test tones, in seconds

# A one-channel base file containing simple white noise.
# faded at both end with a quarter wave envelope to ensure 
# smooth equal power transitions
sox -n -b 24 -c 1 out.wav synth $LEN whitenoise fade q $OVL -0 $OVL

# Instead of white noise you can for example make a 1kHz tone
# like this:
# sox -n -b 24 -c 1 out.wav synth $LEN sine 1k fade q $OVL -0 $OVL

# Or a sweep from 10Hz to 10kHz like this:
# sox -n -b 24 -c 1 out.wav synth $LEN sine 10-10k fade q $OVL -0 $OVL

# Produces a sequence of the number of seconds each channel
# shall be padded with
SEQ=$(for ((i=1; i<=NUM; i++))
do 
  echo "$i 1 - [$LEN $OVL -]x * p" | dc  # reverse-Polish arithmetic
done)

echo $SEQ

# Padding the base file to various degrees and saving them separately
for j in $SEQ
do 
  sox -c 1 out.wav outpad$j.wav pad $j
done

# Finding the just-produced individual files
FIL=$(ls | grep ^outpad)

# Merging the individual files into a single multi-channel file
sox -M $FIL multi.wav

rm $FIL  # removing the individual files

# Producing a multi-channel waveform plot
ffmpeg -i multi.wav -y -filter_complex "showwavespic=s=2400x900:split_channels=1" -frames:v 1 waveform.png

# displaying the waveform plot
open waveform.png

正如波形图清楚地显示的那样,结果由一个包含五个通道的文件组成,每个通道具有相同的内容,只是在时间上移动了一些:

更多关于使用dc的反向波兰算法:http://wiki.bash-hackers.org/howto/calculate-dc

更多关于使用ffmpeg显示波形的信息:https://trac.ffmpeg.org/wiki/Waveform

【讨论】:

谢谢!我已经尝试过了,并且确实在 wav 文件中获得了 5 个频道。但是,当我播放它们时,通道 4 和 5 不是独立的,扬声器 4 和 5 似乎都在播放。使用通道 4,扬声器 4 强,扬声器 5 有一点环绕效果;使用通道 5,扬声器 5 强,扬声器 4 有一点环绕效果。 @tsf144 那么问题不在于文件,而在于您的播放系统。

以上是关于1 个文件中的 5 个独立音频通道的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg 检查音频通道是不是静音

AVAudioEngine 独立通道

音频采样频率依赖于通道?

选择音频 API

.Net 中的多个音频输出

在不同通道上播放多个音频文件