Matlab每秒发出声音

时间:2015-05-12 21:17:43

标签: matlab

我已经完成了一个函数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

我对最后一段代码的期望是获得一系列不同频率的正弦波,每个正弦波持续一秒钟,一个接一个。但是我注意到这是完全不可靠的,而且我没有得到一个罪的正好一秒钟,而是另一个罪。

是否有更精确的方法告诉M​​atlab逐个播放我的声音,每个声音在一定时间内(不多也不少)并且没有中断(或中间的任何其他内容)?

2 个答案:

答案 0 :(得分:1)

优雅地播放声音需要一些低级访问和缓冲,什么不是。 Matlab的sound()函数不提供此类访问权限,遗憾的是,它不会执行您想要的操作。但是,如果你最近有一个Matlab,你会发现audioplayer确实做了你想做的事,这正是它所设计的角色。由于需要与您的声音硬件“玩得很好”,您将不得不投入更多时间来使其表现出色。

从“doc audioplayer”开始。

答案 1 :(得分:1)

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

  

抽动;暂停(1); TOC

     

经过的时间是1.006905秒。

     

抽动;暂停(0.001); TOC

     

经过的时间是0.018834秒。

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