AVAudioSession与AVSpeechUtterance混合使用
我有一个问题,我想让iPod在后台播放音乐,在我的应用程序中,我想让AVSpeechUtterance
降低iPod的音量,播放一串文字,然后我想让iPod恢复播放。 我尝试了几件事,但AVAudioSession和AVSpeechUtterance从未合作过。 我可以让iPod停下来,暂停一下,然后重新开始播放。 我可以看到我的字符串被传递给AVSpeechUtterance
,但它不是优先于在扬声器上播放。 这是我的代码:
视图确实加载:
- (void)viewDidLoad { //set the audio session for my app to play from the TTS library NSError *error; audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryAmbient withOptions:1 error:&error]; [audioSession setActive:YES error:&error]; if(error){ NSLog(@"Audio Error %@", error); } syn = [[AVSpeechSynthesizer alloc] init]; syn.delegate = self; iPodMusicPlayer = [[MPMusicPlayerController alloc] init]; }
这是我的演讲function:
-(void)speech:(NSString *)string { if(audioSession.isOtherAudioPlaying){ wasPlaying = YES; NSLog(@"Other audio is playing"); [iPodMusicPlayer pause]; } AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:string]; utterance.rate = 0.3f; utterance.volume = 1.0; [syn speakUtterance:utterance]; }
AVSpeechSynthesizer
在语音结束后调用的委托方法
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance { if(wasPlaying){ NSLog(@"Start Playing"); [iPodMusicPlayer play]; wasPlaying = NO; } }
我在这里回顾了AVAudioSession
上的Apple文档,看起来我已经正确实现了所有内容。 有谁知道我哪里出错了?
我只是想让大家知道经过一些故障排除后,这就是我能够解决问题的方法。 我不确定我是否喜欢这个解决方案,并正在努力改进它。
查看已加载
- (void)viewDidLoad { syn = [[AVSpeechSynthesizer alloc] init]; syn.delegate = self; iPodMusicPlayer = [[MPMusicPlayerController alloc] init]; }
语音function
-(void)speak:(NSString *)string { audioSession = [AVAudioSession sharedInstance]; NSError *setCategoryError = nil; NSError *activationError = nil; BOOL success = [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&setCategoryError]; [audioSession setActive:YES error:&activationError]; if(audioSession.isOtherAudioPlaying){ wasPlaying = YES; NSLog(@"Other audio is playing"); [iPodMusicPlayer pause]; } NSLog(@"Success %hhd", success); AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:string]; utterance.rate = 0.3f; utterance.volume = 1.0; [syn speakUtterance:utterance]; }
AVSpeechSynthesizer在语音结束后调用的委托方法
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance { if(wasPlaying){ NSLog(@"Start Playing"); [iPodMusicPlayer play]; wasPlaying = NO; } }