首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matlab/matlab中创建快速连续的蜂鸣声

在matlab/matlab中创建快速连续的蜂鸣声
EN

Stack Overflow用户
提问于 2013-07-26 23:48:12
回答 1查看 2.4K关注 0票数 1

我必须创建不同数字的蜂鸣声数组。我确定将播放多少蜂鸣音、每个单独蜂鸣音的持续时间以及在线的蜂鸣音之间的持续时间。然而,这些都必须非常快地播放,间隔和持续时间都将在0.01秒到0.2秒之间。matlab的声音功能不允许你在两个声音功能之间进行非常小的中断,因为即使你一个接一个地播放两个声音功能,而不通过计时器进行小中断,所需的时间也会比我需要的时间更长。有什么想法吗?我真的很感谢任何人的帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-07-27 04:15:26

为了保证给定的间距,我认为你需要组装波形。我怀疑启动sound函数所需的时间有很多变化。

作为一个例子,下面的函数应该会给你一个好的开始:

代码语言:javascript
复制
function beep_series(specs)
%BEEP_SERIES  Create a series of beeps
%    BEEP_SERIES([FREQ_HZ, VOL, DUR_SEC, PAUSE_SEC]) creates a series of
%    beeps from an N-by-4 spec matrix, where the colums represent:
%        frequency
%        volumne (0-1)
%        beep duration
%        pause duration,

freq = specs(:,1);
volume = specs(:,2);
duration = specs(:,3);
trailingGap = specs(:,4);

SAMPLE_FREQ = 8192;
totalTime = sum(duration) + sum(trailingGap);
x = zeros(ceil(totalTime*SAMPLE_FREQ),1);

curBeepStartTime = 0;
for ix = 1:length(freq)
    numSamples = round(duration(ix)*SAMPLE_FREQ);
    x( round(curBeepStartTime*SAMPLE_FREQ + (1:numSamples))  ) = ...
        volume(ix) * sin(    (1:numSamples)  *  (2*pi*freq(ix)/SAMPLE_FREQ)   );
    curBeepStartTime = curBeepStartTime + duration(ix) + trailingGap(ix);
end

sound(x, SAMPLE_FREQ)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17885730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档