2012-07-12 26 views
14

Tôi có một ứng dụng tập thể dục cần phát âm thanh. Tôi sử dụng AVAudioPlayer để phát âm thanh. Nhưng khi âm thanh bắt đầu phát, nhạc nền từ ứng dụng khác (ứng dụng phát trực tuyến) đang tắt.iOS AVAudioPlayer khiến nhạc nền của ứng dụng khác dừng lại

Làm cách nào để tôi không làm gián đoạn nhạc nền? Bởi vì tôi muốn người dùng nghe nhạc trong khi tập thể dục.

Cảm ơn bạn.

+1

thể trùng lặp của [iPhone AVAudioPlayer dừng nhạc nền] (http://stackoverflow.com/questions/1672602/iphone-avaudioplayer-stop-background-music) – benzado

+0

bạn cần sử dụng một loại phiên âm thanh khác nhau – bkbeachlabs

Trả lời

26

Bạn có thể sử dụng đoạn mã sau nơi bạn sử dụng AVAudioPlayer:

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

Nếu bạn muốn thiết lập một đại biểu, bạn có thể thêm dòng mã này:

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

Bạn có thực sự cần phải đặt đại biểu hay không. Nó sẽ là đủ để thiết lập các thể loại. –

+0

Tôi đã thử nghiệm mã và chỉ cần gọi đến setCategory. Thay đổi mã mẫu cho phù hợp. –

+0

Khi âm thanh từ các ứng dụng khác phát trong nền, ứng dụng của tôi sẽ gặp sự cố: 'điều kiện bắt buộc là sai: _engine-> IsRunning()'. Điều này giải quyết vấn đề đó. – vikzilla

5

Dựa trên lời SujithPt ở đây là điều tương tự trong swift:

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

Trong trường hợp của tôi, tôi muốn phát âm thanh nền âm lượng thấp hơn vì âm thanh do ứng dụng của tôi phát ra giống như một cảnh báo. Tôi sử dụng này:

- (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

Đối Swift 2.2, thêm này bất cứ nơi nào trước khi bạn chơi hay preparetoplay:

_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) 
Các vấn đề liên quan