我已经完成了一个函数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逐个播放我的声音,每个声音在一定时间内(不多也不少)并且没有中断(或中间的任何其他内容)?
答案 0 :(得分:1)
优雅地播放声音需要一些低级访问和缓冲,什么不是。 Matlab的sound()
函数不提供此类访问权限,遗憾的是,它不会执行您想要的操作。但是,如果你最近有一个Matlab,你会发现audioplayer
确实做了你想做的事,这正是它所设计的角色。由于需要与您的声音硬件“玩得很好”,您将不得不投入更多时间来使其表现出色。
从“doc audioplayer”开始。
答案 1 :(得分:1)
Matlab暂停不提供毫秒精度,即使通过其内部tic-toc定时器进行测量也是如此。例如:
抽动;暂停(1); TOC
经过的时间是1.006905秒。
抽动;暂停(0.001); TOC
经过的时间是0.018834秒。
如果您无法按照评论中的建议“预渲染”整个声音序列,我会使用Psychophysics toolbox之类的工具来处理时间和音频播放。