私はビープ音を3回再生してから音声を検出するiPadアプリを開発しています。しかし、問題は、初めて読書画面で読書を開始したとき、ビープ音は問題ありませんが、マイクが音声を検出しないことです。別の画面に移動して再び読み取り画面に来ると、ビープ音は完璧で、マイクも正常に機能しています。ビープ音を鳴らすコードは次のとおりです。
- (void)playAudio
{
[self setupAudioSession];
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"beep" ofType:@"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath];
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
[fileURL release];
self.click = newPlayer;
[newPlayer release];
[self.click setDelegate:self];
[self.click prepareToPlay];
[self.click play];
}
- (void)setupAudioSession {
static BOOL audioSessionSetup = NO;
if (audioSessionSetup) {
return;
}
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
[[AVAudioSession sharedInstance] setActive: YES error: nil];
audioSessionSetup = YES;
}
ビープ音を鳴らした後、マイクを検出するためにこの関数を呼び出しました
-(void)startrecordingAfterCountdown{
NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];
[self.view setUserInteractionEnabled:true];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44100.0], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,
nil];
NSError *error;
//
// // static BOOL audioSessionSetup2 = NO;
// // if (audioSessionSetup2) {
// // //return;
// // }
// [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryRecord error: nil];
// UInt32 doSetProperty = 1;
//
// AudioSessionSetProperty kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
//
// [[AVAudioSession sharedInstance] setActive: YES error: nil];
//
// // audioSessionSetup2 = YES;
// AVAudioSession *audioSession = [AVAudioSession sharedInstance];
// [audioSession setActive:YES error:nil];
// [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil];
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];
} else{
NSLog(@"error%@",[error description]);
}
- (void)levelTimerCallback:(NSTimer *)timer {
[recorder updateMeters];
const double ALPHA = 0.05;
double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0]));
lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;
if (lowPassResults > 0.20){
NSLog(@"%2f",lowPassResults);
}
}
これを修正する方法を教えてください..そのマイクは初めて音声を検出します