如何将 WAV 文件映射为整数并在 Matlab 中播放它们的声音?

How do I map WAV files to integers and play their sounds in Matlab?

我一直在尝试找到一种方法来映射存储在变量 y1y2 中的 wavread 读入的 WAV 声音向量与整数 1 , 2,.. 我目前设置了使用 if/else 语句的代码,其中根据用户输入的整数,听到与该整数键相关的声音。但是,我想删除对 if/else 语句的过度使用。在 MATLAB 中有这样的方法吗?

目前我写的代码如下:

y1=wavread('E:\sound\one.wav');
y2=wavread('E:\sound\two.wav');
y3=wavread('E:\sound\three.wav');
y4=wavread('E:\sound\four.wav');

t=input('prompt:');
if t==1
    sound(y1,40000);
elseif t==2
    sound(y2,40000);   
elseif t==3
    sound(y3,40000);
elseif t==4
    sound(y4,40000);
else
    disp('wrong input');
end

如果您希望提供给定整数到声音信号的映射,最容易使用的是元胞数组——尤其是当每个声音文件的长度不同时。你可以这样做:

y1=wavread('E:\sound\one.wav');
y2=wavread('E:\sound\two.wav');
y3=wavread('E:\sound\three.wav');
y4=wavread('E:\sound\four.wav');

sounds = {y1, y2, y3, y4};

然后您可以通过对应的整数索引访问每个声音。例如,如果您想要第一个声音,只需执行:

s = sounds{1};

您可以将索引更改为您想要的任何声音。


现在,如果您想根据当前代码调整它以摆脱 if/else 语句,只需在给定元胞数组的情况下播放正确的声音即可完成。

像这样:

y1=wavread('E:\sound\one.wav');
y2=wavread('E:\sound\two.wav');
y3=wavread('E:\sound\three.wav');
y4=wavread('E:\sound\four.wav');

sounds = {y1, y2, y3, y4};

t = input('Prompt: ');
if t < 1 || t > numel(t)
    disp('Wrong Input');
else
    sound(sounds{t}, 40000);
end

最后一条语句允许您删除多个 if/else 语句并将其合并为一个 if/else 语句。