2016-07-27 1 views
3

J'aime jouer de l'audio à travers le haut-parleur du récepteur d'appel, actuellement je l'utilise pour lire du texte comme un son.Comment jouer à AVSpeechSynthesizer via le haut-parleur du récepteur d'appel?

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

j'ai eu, mais ce n'est pas pour AVSpeechSynthesizer:

[AVAudioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; 

correctement son travail sur un haut-parleur normal, mais je veux faire jouer par haut-parleur du récepteur d'appel, est-il possible de le faire?

Répondre

3

Le comportement par défaut est de lire le récepteur d'appel. Donc, si vous enlevez la dérogation - ou ne définissez pas en premier lieu - vous devriez obtenir le comportement que vous êtes après:

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

Voici un exemple complet. Vous devez également définir la catégorie audioSession.

- (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

mais son fonctionnement sur haut-parleur bro http://paste.ofcode.org/uEi8M5FjcGhB97NurcEEsM –

+0

par haut-parleur du récepteur ne fonctionne pas son –

+0

@KishoreKumar - voir ma mise à jour - vous devez vérifier votre catégorie audioSession est correcte – foundry

0

Cela a fonctionné pour moi:

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