2014-10-01 15 views
5

Tôi có đầu phát âm thanh có tùy chọn chuyển Đầu ra Âm thanh từ Loa sang Bộ thu/Tai nghe (bất kể tai nghe được kết nối) khi cảm biến tiệm cận thông báo 1. Sau đây là mã của tôi để làm như vậy.Chuyển đổi đầu ra âm thanh giữa Bộ thu và Loa trong iOS7 trở lên?

- (void) switchAudioOutput:(NSString*)output{ 
    AVAudioSession* audioSession = [AVAudioSession sharedInstance]; 
    BOOL success; 
    NSError* error; 

    if([output isEqualToString:keAudioOutputReciever]){ 
     //Force current audio out through reciever 
     //set the audioSession override 
     success = [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone 
              error:&error]; 
     if (!success) 
      NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error); 

     //activate the audio session 
     success = [audioSession setActive:YES error:&error]; 
     if (!success) 
      NSLog(@"AVAudioSession error activating: %@",error); 
     else 
      NSLog(@"AVAudioSession active with override: AVAudioSessionPortOverrideNone"); 

    }else if([output isEqualToString:keAudioOutputSpeaker]){ 
     //set the audioSession override 
     success = [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker 
                error:&error]; 
     if (!success) 
      NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error); 

     //activate the audio session 
     success = [audioSession setActive:YES error:&error]; 
     if (!success) 
      NSLog(@"AVAudioSession error activating: %@",error); 
     else 
      NSLog(@"AVAudioSession active with override: AVAudioSessionPortOverrideSpeaker"); 

    } 
} 

Điều này được dựa trên câu trả lời Toggle Button route audio to speaker and receiverenter link description here. Tôi nhận thấy rằng điều này chỉ buộc các âm thanh để loa một mình nhưng không đảm bảo rằng các tuyến đường đi đến người nhận một mình. Hơn nữa khi chuyển sang loa tôi nhận được lỗi sau:

AVAudioSession error overrideOutputAudioPort:Error Domain=NSOSStatusErrorDomain Code=-50 "The operation couldn’t be completed. (OSStatus error -50.)"

+1

Tôi cũng đang geting lỗi chính xác tương tự. Có ai đó giải quyết vấn đề này không? –

Trả lời

7

tôi đã tìm ra câu trả lời bằng cách tránh ghi đè cho Receiver

- (void) setAudioSession:(NSString*)audioOutput{ 

     NSError* error; 
     if([audioOutput isEqualToString:audioOutputSpeaker.lowercaseString]){ 

      //set the audioSession override 
      if(![self setCategory:AVAudioSessionCategoryPlayAndRecord 
           withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth 
            error:&error]) 
       NSLog(@"AVAudioSession error AVAudioSessionCategoryPlayAndRecord:%@",error); 

      //activate the audio session 
      if (![self setActive:YES error:&error]) 
       NSLog(@"AVAudioSession error activating: %@",error); 
      else 
       NSLog(@"AVAudioSession active with override: AVAudioSessionPortOverrideNone"); 
     }else if ([audioOutput isEqualToString:audioOutputReciever.lowercaseString]){ 
      //Force current audio out through reciever 
      //set the audioSession override 
      if(![self setCategory:AVAudioSessionCategoryPlayAndRecord 
           withOptions:AVAudioSessionCategoryOptionAllowBluetooth 
            error:&error]) 
       NSLog(@"AVAudioSession error AVAudioSessionCategoryPlayAndRecord:%@",error); 

      if (![self overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error]) 
       NSLog(@"AVAudioSession error overrideOutputAudioPort to Reciever:%@",error); 

      //activate the audio session 
      if (![self setActive:YES error:&error]) 
       NSLog(@"AVAudioSession error activating: %@",error); 
      else 
       NSLog(@"AVAudioSession active with override: AVAudioSessionPortOverrideNone"); 
     } 
    } 
Các vấn đề liên quan