【问题标题】:Matlab emit sound every secondMatlab每秒发出声音
【发布时间】:2015-05-12 21:17:42
【问题描述】:

我已经完成了一个函数playSound(f),它看起来像这样:

function playSound(f)

    fs = 44100;
    t = 0:1/fs:1;

    y = sin(2.*pi.*f.*t);

    sound(y,fs,16);

end

我在另一个函数中使用这个函数,代码如下:

while i <= y
    b = bin2dec(bits(i:i+k-1));
    freq = 2000-frequencyInterval+b*deltaFreq;
    playSound(freq);
    pause(1);
    i = i + k;
end

我对最后一段代码的期望是得到一连串具有不同频率的正弦曲线,每个正弦曲线持续一秒又一秒。但我注意到这是完全不可靠的,而且我并没有准确地得到一个罪的一秒钟,然后是另一个罪。

有没有更精确的方法来告诉 Matlab 一个接一个地播放我的声音,每个都在特定的时间(不多不少)并且没有中断(或中间的任何其他内容)?

【问题讨论】:

  • 我会通过将所有单独的正弦曲线拼接在一起来构建一个大信号,然后播放它
  • 哦,或者那个,如果你提前知道你想玩什么就容易多了:)。

标签: matlab


【解决方案1】:

Matlab 暂停不提供毫秒精度,即使通过其内部 tic-toc 计时器测量也是如此。例如:

tic;pause(1);toc

经过的时间是 1.006905 秒。

tic;pause(0.001);toc

经过的时间是 0.018834 秒。

如果您无法按照 cmets 中的建议“预渲染”整个声音序列,我会使用 Psychophysics toolbox 之类的工具来处理时间和音频播放。

【讨论】:

  • 是的,而且还比这更糟。尝试s = sin(linspace(0, 1, 10000)*400*pi); tic; for i=1:N; sound(s, 10000); end; toc 获取较小的 N 值 :(.
【解决方案2】:

优雅地播放声音需要一些低级别的访问和缓冲等等。 Matlab 的sound() 函数不提供这样的访问,并且不会做你想做的事,不幸的是。然而,如果你有一个最近的 Matlab,你会发现 audioplayer 可以做你想做的事,这正是它的设计目的。由于需要让您的声音硬件“玩得很好”,因此您将不得不投入更多时间来使其正常运行。

从“doc audioplayer”开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多