Audio 使用Cocos2D检测iPhone话筒中的敲击声
我正在使用Cocos2D和系统粒子,我希望我用英语写的是正确的。 我无法以某种方式识别iPhone麦克风的声音 我的应用程序中有不同的部分,其中一部分我使用麦克风来检测是否有人在向麦克风“吹气”。这一部分在开始时可以正常工作,但如果你转到应用程序中播放声音的其他部分,然后你回到这个区域并尝试吹气,它将不起作用 我调试了代码,levelTimeCallback始终有效,即使我不在这个场景中。我真的不知道发生了什么。我已经停止使用所有声音Audio 使用Cocos2D检测iPhone话筒中的敲击声,audio,cocos2d-iphone,recorder,Audio,Cocos2d Iphone,Recorder,我正在使用Cocos2D和系统粒子,我希望我用英语写的是正确的。 我无法以某种方式识别iPhone麦克风的声音 我的应用程序中有不同的部分,其中一部分我使用麦克风来检测是否有人在向麦克风“吹气”。这一部分在开始时可以正常工作,但如果你转到应用程序中播放声音的其他部分,然后你回到这个区域并尝试吹气,它将不起作用 我调试了代码,levelTimeCallback始终有效,即使我不在这个场景中。我真的不知道发生了什么。我已经停止使用所有声音 [[SimpleAudioEngine sharedEngi
[[SimpleAudioEngine sharedEngine]stopBackgroundMusic]代码>
有人知道我做错了什么吗?顺便说一句,它在模拟器中工作得很好,但在iPhone中却不行
记录器设置为onEnter方法
-(void) onEnter {
[super onEnter];
NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44100.0], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,
nil];
NSError *error;
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];
if (recorder) {
[recorder prepareToRecord];
recorder.meteringEnabled = YES;
[recorder record];
levelTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03 target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES];
NSLog(@"I'm in the recorder");
} else
NSLog(@"recorder error");
}
这是“检查”声音时的levelTimerCallback方法
同样的问题。
有两种方法可以解决这个问题
1:使用AVAudioPlayer播放音乐或音效
2:添加#将“CDAudioManager.h”导入AppDelegate.m并添加
到
最后,在阅读了音频会话食谱和各种相关帖子后,我找到了解决方案。JU将此代码块放入init方法:
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);
AudioSessionSetActive(true);
嗨@huyleit!谢谢你的回答!我找到的解决方案是:为了在init方法中添加一些代码,我用该解决方案修改了我的原始帖子。非常感谢您的回答,我将尝试您的解决方案。
[CDAudioManager initAsynchronously:kAMM_PlayAndRecord];
- (void) applicationDidFinishLaunching:(UIApplication*)application`
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);
AudioSessionSetActive(true);