首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >吹入麦克风以播放1种声音,而不是多个定时器触发器

吹入麦克风以播放1种声音,而不是多个定时器触发器
EN

Stack Overflow用户
提问于 2013-02-06 05:07:45
回答 2查看 162关注 0票数 0

我正在使用这个伟大的教程这里来检测什么时候有人吹到麦克风。

我的最终目标是,当有人向电话中吹气时,播放一个声音,在没有吹入的时候停止它;但是,由于这个示例是基于计时器的,所以它每秒钟触发这个if语句30次(参见教程中的示例代码中的定时器)。

代码语言:javascript
复制
if (lowPassResults > 0.95) {
    NSLog(@"Mic blow detected");

    self.audioSource = [[OALSimpleAudio sharedInstance] playEffect:audioSound volume:1.0 pitch:1.0 pan:0 loop:NO];

}   

if (lowPassResults  < 0){
    NSLog(@"PLEASE STOP?");
    [self.keyCSource stop];

}

有人有什么想法来听“吹奏”,如果它被吹进了,然后播放ObjectAL声音一旦,然后停止它,当它没有被吹入?

EN

回答 2

Stack Overflow用户

发布于 2013-02-06 05:11:21

据我所知,你能察觉到的打击和你的问题是,你只想播放声音一次。否则无视我的答案..。

创建一个属性@property BOOL blowDetected,在检测到打击时将其设置为YES,在停止声音时设置为NO (或当您准备检测到另一个打击时)。然后只播放声音if (!self.blowDetected)

更多细节:

代码语言:javascript
复制
if (meterResults > 0.95) {
    NSLog(@"isPlaying");
    _isPlaying = YES;
}

到目前为止还不错,但在这里您也想开始播放您的声音,而且只有在_isPlaying == NO的情况下

代码语言:javascript
复制
if (!_isPlaying && meterResults > 0.95) {
    self.keyCSource = [[ ... and so on
    _isPlaying = YES;
}

然后,当meterResult掉落

代码语言:javascript
复制
if (lowPassResults  < 0){
    _isPlaying = NO;
    [self.keyCSource stop];
}
票数 0
EN

Stack Overflow用户

发布于 2013-02-06 05:24:59

它不适用于您,因为您重新启动声音每秒30次,只要您的低通结果超过阈值。这是你怎么解决这个问题的。

确保您有某种持久性标记BOOL is_playing,并将其设置为NO。超过阈值时,对is_playing进行测试。只有当这是NOloop:YES调用playEffect,并将is_playing设置为YES时。

如果低通结果低于阈值stopAllEffects,并将is_playing设置为NO。你也应该重新考虑你的下限是否应该是零。可能会更高一些,高达0.95。

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

https://stackoverflow.com/questions/14722003

复制
相关文章

相似问题

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