生成多声道音频
这个例子展示了如何使用多个音频通道来设置连续的音频生成。这个信号是韩德尔的“哈利路亚合唱”的一个样本,它被分成连续的片段,并分两部分播放。示例的第一部分在单个扬声器和低音炮上播放每个片段。第二部分在不同的扬声器上播放每个片段(唱诗班的声音)。
加载音频数据
加载韩德尔的《哈利路亚》。
负载变量:
y
代表哈利路亚波形Fs
表示采样频率
负载汉德尔;
创建数据采集
使用创建DataAcquisition对象声音处理软件
作为供应商ID。
Dq = daq(“声音处理软件”)
增加通道并调整生成扫描速率以匹配音频采样频率
增加6个音频输出通道,生成扫描速率设置为音频采样速率。
addoutput (dq,“Audio7”1:6,“音频”);dq。速率= Fs;
音频数据
从视觉上识别出与合唱中每个“哈利路亚”对应的音频片段,并选择这些片段开始和结束的样本数字。情节中的每种颜色对应副歌的不同部分。
识别每段的结尾
视觉上识别段边界并标记它们。
segmentEnd = [20000, 36000, 45000, 55000, length(y)];
定义扬声器参数
在名为的单元格数组中设置扬声器选择speakerselection
在六个不同的扬声器上播放五段“哈利路亚”
Nspeakers = 6;Nspeakergroups = 5;Speakerselection = cell(1, nspeakergroups);
将演讲者分配到小组
每个扬声器选择指定5.1声道扬声器系统中的哪个扬声器播放每个音频段(这些分配可能因扬声器系统而异)。对于示例的第一部分,使用单扬声器与低音炮(4)配对。
提问者1:左前方
2号提问者:右前方
主讲人3:中心
低音炮
5号提问者:左后方
6号提问者:右后方
Speakerselection {1} = [4,6];%段1;4号和6号发言人Speakerselection {2} = [4,5];%第二段;4号和5号发言人Speakerselection {3} = [1,4];%第三段;1号和4号发言人Speakerselection {4} = [2,4];%第四段;2号和4号发言人Speakerselection {5} = [3,4];% 5段;3号和4号发言人[singleChannelOutputs] =...surroundSoundVoices(y, segmentEnd, nspeakers, nspeakergroups, speakerselection);
写单通道输出
写一个序列的单通道输出,然后暂停
在继续下一节之前。
写(dq singleChannelOutputs);暂停(3);
将演讲者分配到小组
每个扬声器选择指定5.1声道扬声器系统中的哪个扬声器播放每个音频段(这些分配可能因扬声器系统而异)。对于这个例子的第二部分,使用几组说话者。请注意,低音炮(4)包括在所有扬声器的选择
提问者1:左前方
2号提问者:右前方
主讲人3:中心
低音炮
5号提问者:左后方
6号提问者:右后方
Speakerselection {1} = [4,5,6];%段1;演讲者4,5,6Speakerselection {2} = [1,2,4];%第二段;演讲者1 2 4Speakerselection {3} = [3,4];%第三段;演讲者3,4Speakerselection {4} = [1,2,3,4];%第四段;一号,二号,三号,四号Speakerselection {5} = [1,2,3,4,5,6];% 5段;所有的演讲者[multiChannelOutput] =...surroundSoundVoices(y, segmentEnd, nspeakers, nspeakergroups, speakerselection);
写入多通道输出
写(dq multiChannelOutput);
函数[multiChannelOutput] = surroundSoundVoices(audioOut, segmentEnds, numSpeakers, numSpeakerGroups, speakerGroups)将输出波形的连续段分配到多个组%的演讲者在一对一的关系。输入波形被分解了%分成连续的段。每个段输出一个且只有一个%组演讲者,每个组依次访问。将输入波形分成不同组播放的片段%的演讲者。在这个演示中,我们想慢慢地添加“声音”%通过增加更多的扬声器产生输出波形。特别地,我们将输出波形视为连续的%片段序列(每组演讲者一个片段)。例如,如果我们有3组演讲者,我们可以考虑将输出分开。%波形分成3段:输出= [s1 s2 s3]%扬声器组1输出:s1 0 0%扬声器组2输出:0 s2 0%演讲者组3输出:0 0 s3multiChannelOutput = repmat(0.01, length(audioOut), numSpeakers);startOfSegment = [1 (segmentEnds(1:end-1)+1)];为i = 1:numSpeakerGroups speakergroup = speakerGroups{i};N = number (speakergroup);为j = 1:n range = startOfSegment(i):segmentEnds(i);multiChannelOutput(range, speakergroup(j)) = audioOut(range);结束结束结束