2014-09-06 209 views
1

我在用扬声器和麦克风切换音频时面临问题。首先,应用程序应用程序启动音频播放到默认扬声器。然后在按钮事件我改变麦克风它在麦克风播放。将音频输出切换到扬声器和麦克风?

但是,当我试图切换回扬声器它不适合我在麦克风播放。

代码

- (IBAction)setSpeakerPhoneEnabled:(UIButton *)sender 
{ 

    AVAudioSession* session = [AVAudioSession sharedInstance]; 
    BOOL success; 
    NSError* error; 
    if (isHeadPhone) { 

     [session setCategory:AVAudioSessionCategoryPlayAndRecord 
           error:&error]; 

     UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 

     AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 


    } 
    else{ 
     success = [session setCategory:AVAudioSessionCategoryPlayback 
           error:&error]; 
     UInt32 audioRouteOverride = kAudioSessionOutputRoute_Headphones; 
     AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride); 

    } 


    isHeadPhone = !isHeadPhone; 
    [self setTheSpekerImage]; 
} 

请让我知道,当我在做错误的

回答

0

我已经witht下面的代码

- (IBAction)setSpeakerPhoneEnabled:(UIButton *)sender 
{ 
    AudioSessionInitialize (NULL, NULL, NULL, NULL); 




    if (isHeadPhone) { 


     UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 

     AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,sizeof (audioRouteOverride),&audioRouteOverride); 

     [[AVAudioSession sharedInstance] setActive:YES error:nil]; 



    } 
    else{ 

     UInt32 dataSize = sizeof(CFStringRef); 
     CFStringRef currentRoute = NULL; 
     OSStatus result = noErr; 

     AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &dataSize, &currentRoute); 

     // Set the category to use the speakers and microphone. 
     UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord; 
     result = AudioSessionSetProperty (
              kAudioSessionProperty_AudioCategory, 
              sizeof (sessionCategory), 
              &sessionCategory 
             ); 
     assert(result == kAudioSessionNoError); 

     Float64 sampleRate = 44100.0; 
     dataSize = sizeof(sampleRate); 
     result = AudioSessionSetProperty (
              kAudioSessionProperty_PreferredHardwareSampleRate, 
              dataSize, 
              &sampleRate 
             ); 
     assert(result == kAudioSessionNoError); 

     // Default to speakerphone if a headset isn't plugged in. 
     // Overriding the output audio route 

     UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None; 
     dataSize = sizeof(audioRouteOverride); 
     AudioSessionSetProperty(
           kAudioSessionProperty_OverrideAudioRoute, 
           dataSize, 
           &audioRouteOverride); 

     assert(result == kAudioSessionNoError); 

     AudioSessionSetActive(YES); 

// 
    } 


    isHeadPhone = !isHeadPhone; 
    [self setTheSpekerImage]; 
} 
完成
相关问题