gpt4 book ai didi

ios - AVAudioSession 与 AVSpeechUtterance 混合

转载 作者:行者123 更新时间:2023-12-01 19:04:45 26 4
gpt4 key购买 nike

我有一个问题,我想让 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];

}

这是我的语音功能:
   -(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演讲结束后调用的委托(delegate)方法
   - (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance
{
if(wasPlaying){
NSLog(@"Start Playing");
[iPodMusicPlayer play];
wasPlaying = NO;
}
}

我在 AVAudioSession 上查看了 Apple 文档 here看起来我已经正确实现了一切。有谁知道我哪里出错了?

最佳答案

我只是想让大家知道,经过一些故障排除后,这就是我能够解决我的问题的方法。我不确定我是否喜欢这个解决方案,并且正在努力改进它。

查看已加载

    - (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 委托(delegate)方法
     - (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance
{
if(wasPlaying){
NSLog(@"Start Playing");
[iPodMusicPlayer play];
wasPlaying = NO;
}
}

关于ios - AVAudioSession 与 AVSpeechUtterance 混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com