2013-01-19 14 views
10

Uczę się podstawowego dźwięku. Z jakiegoś powodu dźwięk przetwarzanego wykresu odtwarzany jest tylko przez słabe "głośniki" (gdy trzymasz urządzenie przy uchu), ale nie przez zwykłe głośniki iPhone'a.Jak odtwarzać dźwięk przez głośniki, a nie przez słabsze głośniki?

Jest to kod, który konfiguruje sesji audio, ale nie widzę, gdzie konfiguruje trasę audio:

- (void) setupAudioSession { 

    AVAudioSession *mySession = [AVAudioSession sharedInstance]; 

    // Specify that this object is the delegate of the audio session, so that 
    // this object's endInterruption method will be invoked when needed. 
    [mySession setDelegate: self]; 

    // Assign the Playback category to the audio session. 
    NSError *audioSessionError = nil; 
    [mySession setCategory: AVAudioSessionCategoryPlayAndRecord//AVAudioSessionCategoryPlayback 
        error: &audioSessionError]; 

    if (audioSessionError != nil) { 

     NSLog (@"Error setting audio session category."); 
     return; 
    } 

    // Request the desired hardware sample rate. 
    self.graphSampleRate = 44100.0; // Hertz 

    [mySession setPreferredHardwareSampleRate: graphSampleRate 
             error: &audioSessionError]; 

    if (audioSessionError != nil) { 

     NSLog (@"Error setting preferred hardware sample rate."); 
     return; 
    } 

    // Activate the audio session 
    [mySession setActive: YES 
        error: &audioSessionError]; 

    if (audioSessionError != nil) { 

     NSLog (@"Error activating audio session during initial setup."); 
     return; 
    } 

    // Obtain the actual hardware sample rate and store it for later use in the audio processing graph. 
    self.graphSampleRate = [mySession currentHardwareSampleRate]; 

    // Register the audio route change listener callback function with the audio session. 
    AudioSessionAddPropertyListener (
     kAudioSessionProperty_AudioRouteChange, 
     audioRouteChangeListenerCallback, 
     self 
    ); 
} 

W tym momencie w Core Audio powiesz „gry przez głośniki” podczas odtwarzania dźwięki z jednostkami audio?

Odpowiedz

4

Miałem ten sam problem. Okazuje się, że ma to coś wspólnego z kategorią "graj i nagrywaj". Wystarczy przekierować wyjście audio.

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 

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

Źródło:

+0

próbowałem, ale to nie działa, user523234 rozwiązaniem jest co pracował dla mnie. – blackmoon

6

Można użyć setCategorywithOption:

[mySession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&audioSessionError]; 
+0

Dziękuję, działa idealnie. – blackmoon