AVSpeechSynthesizer(文本到语音)播放的音量自身增加,仅适用于iPhone7

时间:2017-03-25 20:15:14

标签: ios objective-c avaudiosession avspeechsynthesizer avspeechutterance

我的iOS10应用程序可以进行文本到语音和语音识别。它会在发生这种情况时暂停来自其他应用程序的音频,并在ASR / TTS结束时通知对方,以便他们可以恢复音频。 在iPhone5和6上,一切都很完美。

问题在于iPhone7s:口头短语的音量一开始很低,而且在短语结尾处响亮。为什么呢?

我将提供一些代码以防万一,因为这似乎是一个iOS错误。

音频会话代码:

-(AVAudioSessionCategoryOptions)indigoAudioBehaviorOptions:(AVAudioSession *)s{
    AVAudioSessionCategoryOptions audioIOoptions = [s categoryOptions];
    audioIOoptions |= AVAudioSessionCategoryOptionDefaultToSpeaker;
    audioIOoptions |= AVAudioSessionCategoryOptionAllowBluetooth;
    audioIOoptions |= AVAudioSessionCategoryOptionAllowBluetoothA2DP;
    return audioIOoptions;
}
-(void)notifyIOSthatOtherAppsCanResumeAudioPlayback{
    NSError *err;
    [myAudioSession setActive: NO
                  withOptions: AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation
                        error: &err];
    if(err!=nil){
        NSLog(@"audioIsFreeNotificationForIOS ERROR: %@",err.description);
    }
}


myAudioSession = [AVAudioSession sharedInstance];
NSError *err;
[myAudioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions: [self indigoAudioBehaviorOptions:indigoAudioSession] error:&err];

文字转语音代码:

nativeVocalizer = [[AVSpeechSynthesizer alloc] init];
nativeVocalizer.delegate = self;
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:stringToSpeak];
[utterance setVoice:[AVSpeechSynthesisVoice voiceWithLanguage:lang]];
[nativeVocalizer speakUtterance:utterance];

1 个答案:

答案 0 :(得分:0)

由于有效的音频会话AVAudioSession模式,可能会发生这种情况。

我没有遇到此行为的唯一模式是使用模式AVAudioSessionModeMeasurement