主要内容

生成多路音频

这个例子展示了如何使用多个音频通道设置连续音频生成。这个信号是韩德尔的“哈利路亚副歌”的一个样本,它被分成连续的片段,并分成两部分回放。这个例子的第一部分在单个扬声器和低音炮上播放每个片段。第二部分用不同的扬声器(声音唱诗班)播放每个片段。

加载音频数据

负载韩德尔的“哈利路亚”。

负载变量:

  • y代表哈利路亚波形

  • Fs表示采样频率

负载汉德尔

创建数据采集

使用声音处理软件作为供应商ID。

dq =采集(“声音处理软件”

增加通道并调整生成扫描速率以匹配音频采样频率

增加6个音频输出通道,将生成扫描速率设置为音频采样速率。

addoutput (dq,“Audio7”1:6,“音频”);dq。率= f;

情节音频数据

视觉识别音频片段,对应每个“哈利路亚”在合唱和选择样本数字,在这些片段开始和停止。情节中的每一种颜色都对应着合唱队的不同部分。

确定每个片段的结尾

视觉识别段边界并标记它们。

segmentEnd = [20000, 36000, 45000, 55000, length(y)];

扬声器参数定义

在命名的单元格数组中设置扬声器的选择speakerselection在六个不同的扬声器上演奏五段“哈利路亚”。

nspeakers = 6;nspeakergroups = 5;nspeakerselection = cell(1, nspeakergroups);

将发言者分配到组

每个扬声器选择指定5.1声道扬声器系统中的哪个扬声器播放每个音频片段(这些分配可能因您的扬声器系统而异)。对于示例的第一部分,使用单个扬声器与低音炮(4)配对。

  • 演讲者1:左前

  • 发言人2:右前

  • 发言人3:中心

  • 演讲者4:“

  • 演讲者5:左后

  • 发言人6:右后

Speakerselection {1} = [4,6];%段1;演讲者4和6Speakerselection {2} = [4,5];% 2段;发言人4和5Speakerselection {3} = [1,4];% 3段;演讲者1和4Speakerselection {4} = [2,4];% 4段;演讲者2和4Speakerselection {5} = [3,4];% 5段;演讲者3和4[singleChannelOutputs] =...surroundSoundVoices(y, segmentEnd, nspeakers, nspeakergroups, speakerselection);

写入单通道输出

写一个单通道输出序列,然后暂停在继续下一节之前。

写(dq singleChannelOutputs);暂停(3);

将发言者分配到组

每个扬声器选择指定5.1声道扬声器系统中的哪个扬声器播放每个音频片段(这些分配可能因您的扬声器系统而异)。在例子的第二部分,使用几组说话者。请注意,低音炮(4)包含在所有扬声器选择中

  • 演讲者1:左前

  • 发言人2:右前

  • 发言人3:中心

  • 演讲者4:“

  • 演讲者5:左后

  • 发言人6:右后

Speakerselection {1} = [4,5,6];%段1;4、5、6号发言者Speakerselection {2} = [1,2,4];% 2段;1号,2号,4号喇叭Speakerselection {3} = [3,4];% 3段;演讲者3、4Speakerselection {4} = [1,2,3,4];% 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段:output = [s1 s2 s3]%扬声器组1输出:s1 0 0%扬声器组2输出:0 s2 0% Speaker group 3输出:0 0 s3multiChannelOutput = repmat(0.01, length(audioOut), numSpeakers);startOfSegment = [1 (segmentEnds(1:end-1)+1)];i = 1:numSpeakerGroups speakergroup = speakerGroups{i};n =元素个数(speakergroup);j = 1:n range = startOfSegment(i):segmentEnds(i);multiChannelOutput(range, speakergroup(j)) = audioOut(range);结束结束结束