我有一个问题,我想让iPod在后台播放音乐,在我的应用程序中,我想让AVSpeechUtterance降低iPod的音量,播放一串文本,然后我想让iPod继续播放。我尝试过几种方法,但从未让AVAudioSession和AVSpeechUtterance很好地协同工作。我可以让iPod停止,暂停片刻,然后重新开始播放。我可以看到我的字符串被传递给AVSpeechUtterance,但它没有优先于扬声器播放。下面是我的代码:
视图did加载:
- (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];
}下面是我的语音函数:
-(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 here上的苹果文档,看起来我已经正确地实现了所有的东西。有人知道我哪里出错了吗?
发布于 2013-12-08 06:26:08
我只是想让每个人知道,经过一些故障排除后,这就是我能够解决问题的方法。我不确定我是否喜欢这个解决方案,并正在努力改进它。
视图Did加载
- (void)viewDidLoad
{
syn = [[AVSpeechSynthesizer alloc] init];
syn.delegate = self;
iPodMusicPlayer = [[MPMusicPlayerController alloc] init];
}语音功能
-(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;
}
}https://stackoverflow.com/questions/20403331
复制相似问题