【问题标题】:MATLAB doesn't play a loaded .wav fileMATLAB 不播放加载的 .wav 文件
【发布时间】:2018-11-08 15:04:53
【问题描述】:

我使用 audioread 功能从文件夹中加载几个音频文件,如下所示:

for audio_numm = 1:24

    [sound{audio_numm},freq{audio_numm} ] = audioread(strcat('./M_S',int2str(audio_numm),'.wav'));
end

它加载没有任何问题,但是当我尝试使用以下功能播放它们时:

for i=1:24
     sound(sound{i})
end

我收到以下错误:

下标索引必须是正整数或逻辑数。

.wav 文件保存在一个 1x24 数组中,其中每个元素都是另一个一维数组。我该如何解决这个问题?

【问题讨论】:

  • 例如 sound{1} 是 100070x1 double 并且 sound{1,1} = 9.15527343750000e-05
  • sound 是在 matlab 函数中构建的名称,但它似乎也是代码中变量的名称......不确定是否可能。
  • 重命名了声音变量并且它起作用了。谢谢!!

标签: matlab audio


【解决方案1】:

错误来自一个变量以内置函数名称sound命名的事实。

Matlab 说的是:

避免创建与函数同名的变量(如 i、j、mode、char、size 和 path)。 一般来说,变量名优先于函数名。如果创建使用函数名的变量,有时会得到意想不到的结果。

所以在for循环中,你期望的函数实际上是变量sound。所以它是用非整数值索引的。

您可以使用命令exists检查名称是否已被占用,如果名称未被占用,它将返回零:

exist toto

ans =

     0 

感谢@Brice 纠正我。

【讨论】:

  • 反过来:sound 函数已被变量重载,因此 Matlab 将 sound(...) 解释为访问变量。错误的代码行尝试在sound{i} 给出的索引处访问sound 单元数组,该索引恰好是非整数值的向量。因此出现错误消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多