2012-07-12 7 views
14

Mam aplikację do ćwiczeń, która musi odtwarzać dźwięk. Używam AVAudioPlayer do odtwarzania dźwięku. Ale gdy dźwięk zaczyna się odtwarzać, muzyka w tle z innej aplikacji (aplikacja do strumieniowego przesyłania strumieniowego) jest wyłączona.Funkcja iOS AVAudioPlayer wyłącza podkład muzyczny drugiej aplikacji

Jak mogę sprawić, aby nie zakłócało to muzyki w tle? Ponieważ chciałbym, aby użytkownik słyszał muzykę podczas ćwiczeń.

Dziękuję.

+1

możliwe duplikat [iPhone AVAudioPlayer zatrzymywanie muzyki w tle] (http://stackoverflow.com/questions/1672602/iphone-avaudioplayer-stopping-background-music) – benzado

+0

musisz użyć innego rodzaju sesji audio – bkbeachlabs

Odpowiedz

26

Można użyć następującego kodu gdzie użyć AVAudioPlayer:

// Set AudioSession 
    NSError *sessionError = nil; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&sessionError]; 
    [[AVAudioSession sharedInstance] setActive:YES error:&sessionError]; 

Jeśli chcesz ustawić delegata można dodać ten wiersz kodu:

[[AVAudioSession sharedInstance] setDelegate:self]; 
+0

Czy naprawdę potrzebujesz ustawić delegata. Powinno wystarczyć ustawienie kategorii. –

+0

Przetestowałem kod i potrzebne jest tylko połączenie z setCategory. Zmieniono odpowiednio przykładowy kod. –

+0

Gdy dźwięk z innych aplikacji odtwarzanych w tle, moja aplikacja ulegał awarii z powodu: "warunek wymagany to false: _engine-> IsRunning()". To rozwiązało ten problem. – vikzilla

5

podstawie Odpowiedź SujithPt tutaj to samo w SWIFT:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil) 
5

w moim przypadku chciałem tła dźwięk ma być odtwarzany w niższy poziom głośności, ponieważ dźwięk odtwarzany przez moją aplikację przypomina alarm. Używam tego:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // prevents our app from stopping other audio, 
    // e.g. music, podcats, etc. that may be playing when launched 
    // our audio will be played at a higher volume 
    // and the background audio will "duck" until done 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryMultiRoute 
            withOptions:AVAudioSessionCategoryOptionDuckOthers 
              error:nil]; 
} 
1

Dla Swift 2.2, dodać to ty nigdzie wcześniej grać lub preparetoplay:

_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) 
Powiązane problemy