2016-07-27 5 views
3

Ich mag es, Audio über den Lautsprecher des Anrufempfängers abzuspielen, momentan benutze ich dies, um etwas Text als Audio abzuspielen.Wie AVSpeechSynthesizer über Lautsprecher des Anrufempfängers zu spielen?

AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:_strTextCheck]; 
    AVSpeechSynthesizer *syn = [[AVSpeechSynthesizer alloc] init]; 
    [syn speakUtterance:utterance]; 

Ich habe aber das ist nicht für AVSpeechSynthesizer:

[AVAudioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; 

korrekt seine Arbeit an einem normalen Lautsprecher, aber ich möchte spielen durch Rufempfänger Lautsprecher machen, ist es möglich, das zu tun?

Antwort

3

Das Standardverhalten ist die Wiedergabe über den Rufempfänger. Also, wenn Sie die Überschreibung unset - oder stellen Sie es nicht in erster Linie - Sie sollten das Verhalten erhalten Sie nach:

[[AVAudioSession sharedInstance] 
    overrideOutputAudioPort:AVAudioSessionPortOverrideNone 
         error:nil]; 

Hier ist ein vollständiges Beispiel ist. Sie müssen auch die audioSession-Kategorie festlegen.

- (void)playVoice { 
    [[AVAudioSession sharedInstance] 
      setCategory:AVAudioSessionCategoryPlayAndRecord 
        error:nil]; 

    //try one or the other but not both... 

    //[self playVoiceOnSpeaker:@"test test test"]; 

    [self playVoiceOnReceiver:@"test test test"]; 

} 

-(void)playVoiceOnSpeaker:(NSString*)str 
{ 
    [[AVAudioSession sharedInstance] 
     overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker 
          error:nil]; 
    [self playVoiceByComputer:str]; 
} 

-(void)playVoiceOnReceiver:(NSString*)str 
{ 
    [[AVAudioSession sharedInstance] 
     overrideOutputAudioPort:AVAudioSessionPortOverrideNone 
          error:nil]; 
    [self playVoiceByComputer:str]; 
} 

-(void)playVoiceByComputer:(NSString*)str 
{ 
    AVSpeechUtterance *utterance = 
      [AVSpeechUtterance speechUtteranceWithString:str]; 
    AVSpeechSynthesizer *syn = [[AVSpeechSynthesizer alloc] init]; 
    [syn speakUtterance:utterance]; 
} 
+0

aber immer noch seinen Lauf auf Lautsprecher bro http://paste.ofcode.org/uEi8M5FjcGhB97NurcEEsM –

+0

durch Empfänger Lautsprecher seine nicht –

+0

@KishoreKumar läuft - siehe mein Update - du musst überprüfen, ob deine audioSession-Kategorie korrekt ist – foundry

0

Das ist für mich gearbeitet:

try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.defaultToSpeaker]) 
Verwandte Themen