У меня проблема, когда я хотел бы, чтобы iPod играл музыку в фоновом режиме, и в моем приложении я бы хотел, чтобы AVSpeechUtterance
уменьшил громкость iPod, воспроизвел строку текста, а затем я бы чтобы возобновить воспроизведение iPod. Я пробовал несколько вещей, но никогда не имел AVAudioSession и AVSpeechUtterance
хорошо работал вместе. Я могу заставить iPod остановиться, немного приостановиться, а затем снова начать играть. Я вижу, что моя строка передается в AVSpeechUtterance
, но не играет особой роли над динамиком. Вот мой код:AVAudioSession смешивание с 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];
}
Вот моя речь функция:
-(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;
}
}
Я рассмотрел документы Apple по адресу AVAudioSession
here, и похоже, что все выполнено правильно. Кто-нибудь знает, где я ошибся?
Дело в том, что вы не обрабатываете другие приложения, такие как подкасты, например, поскольку вы явно приостанавливаете и возобновляете PodMusicPlayer. –
Разве это не останавливает музыку, пока речь идет? Я думал, ты хочешь, чтобы речь шла о музыке? – Fraggle
Вы также можете использовать AVAudioSessionCategoryOptionDuckOthers для смягчения музыки во время синтезатора. Не нужно останавливаться. –