1

我是声音处理的新手,我正在尝试向用户呈现 0.2ms、0.3ms 和 0.4ms 的音调。

我做的代码如下:(MATLAB)

Fs = 16000;
duration = 0.2;
level = 0;
freq1 = 500;
t = 0: 1/Fs : duration*(Fs-1)/Fs;
fa1 = 10^(level/20);
y1 = fa1*sin(2*pi*freq1*t)';
ap = audioplayer(y1,Fs);
tic
playblocking(ap)
toc

我从 tic,toc 函数获得的时间为 0.56,持续时间为我指定的 0.2 秒。

有没有办法让它出现0.2秒?

4

3 回答 3

3

我的猜测是声音会持续特定的时间。您从 tic 和 toc 得到的差异是调用函数等所需的开销。

你可以通过尝试不同长度的声音来检验这个假设。我怀疑开销时间相对于您播放声音的时间应该或多或少保持不变。如果您始终获得比预期声音播放时间长 0.3 秒的 tic-toc 时间,那么您可能会将差异归咎于开销。

于 2013-08-22T18:37:27.353 回答
2

您可以使用wavwrite 函数编写一个声音文件,该y1函数将Fs变量作为输入。然后.wav使用声音编辑器(例如audacity)打开并检查确切的时间。

于 2013-08-22T18:55:43.940 回答
1

戈登的假设在这里是正确的。启动音频流和停止音频流需要时间。您可以通过在 audioplayer/playblocking、resume 和 stop 方法中放置单独的 tic/toc 调用来验证这一点。

然后,您可以从 playblocking 调用中减去暂停和恢复 tic/toc 的时间。

音频播放器应该只将您提供给声卡的样本。

或者,您可以将音频输出插入声卡上的音频输入,并使用录音机将音频录制回 MATLAB,然后测量信号中的样本数。

于 2013-08-22T22:34:26.830 回答