Sunny Shah
Sunny Shah

Reputation: 13020

Switch audio output to speaker and mic?

I am facing problem while switch audio with speaker and mic. First when app app launch audio play to the default speaker. then on button event I change to the mic its playing in mic.

But when I try to switch back to the speaker its not working for me its play in mic.

Code

 - (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];
}

Please let me know when i m doing wrong

Upvotes: 1

Views: 840

Answers (1)

Sunny Shah
Sunny Shah

Reputation: 13020

I have done witht the following code

    - (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];
}

Upvotes: 0

Related Questions