我正在使用这个伟大的教程这里来检测什么时候有人吹到麦克风。
我的最终目标是,当有人向电话中吹气时,播放一个声音,在没有吹入的时候停止它;但是,由于这个示例是基于计时器的,所以它每秒钟触发这个if语句30次(参见教程中的示例代码中的定时器)。
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声音一旦,然后停止它,当它没有被吹入?
发布于 2013-02-06 05:11:21
据我所知,你能察觉到的打击和你的问题是,你只想播放声音一次。否则无视我的答案..。
创建一个属性@property BOOL blowDetected,在检测到打击时将其设置为YES,在停止声音时设置为NO (或当您准备检测到另一个打击时)。然后只播放声音if (!self.blowDetected)
更多细节:
if (meterResults > 0.95) {
NSLog(@"isPlaying");
_isPlaying = YES;
}到目前为止还不错,但在这里您也想开始播放您的声音,而且只有在_isPlaying == NO的情况下
if (!_isPlaying && meterResults > 0.95) {
self.keyCSource = [[ ... and so on
_isPlaying = YES;
}然后,当meterResult掉落
if (lowPassResults < 0){
_isPlaying = NO;
[self.keyCSource stop];
}发布于 2013-02-06 05:24:59
它不适用于您,因为您重新启动声音每秒30次,只要您的低通结果超过阈值。这是你怎么解决这个问题的。
确保您有某种持久性标记BOOL is_playing,并将其设置为NO。超过阈值时,对is_playing进行测试。只有当这是NO用loop:YES调用playEffect,并将is_playing设置为YES时。
如果低通结果低于阈值stopAllEffects,并将is_playing设置为NO。你也应该重新考虑你的下限是否应该是零。可能会更高一些,高达0.95。
https://stackoverflow.com/questions/14722003
复制相似问题