Как включить фоновую музыку?

Я хочу разрешить игроку использовать свою музыку в моей игре, поэтому я хочу знать, как определить, воспроизводит ли игрок музыку из своей музыкальной библиотеки, чтобы я мог позволить его музыке продолжать играть, а если нет, пусть моя музыка играет в фоновом режиме. .

Я использую этот код для воспроизведения музыки в моем GameViewController:

let bgMusicURL: NSURL = NSBundle.mainBundle().URLForResource("Squart-GameMusic", withExtension: "wav")!

do {
    Data.GameMusic = try AVAudioPlayer(contentsOfURL: bgMusicURL, fileTypeHint: nil)
} catch {
    return print("no music file")
}

Data.GameMusic.numberOfLoops = 1
Data.GameMusic.prepareToPlay()
Data.GameMusic.play()

Проблема в том, что когда я пытаюсь воспроизвести музыку из музыкальной библиотеки, звук останавливается, и это позволяет моему приложению воспроизводить музыку вместо музыкальной библиотеки.


person Michel Kansou    schedule 25.08.2015    source источник


Ответы (1)


Проверьте, играет ли музыка в фоновом режиме, как это

if MPMusicPlayerController.systemMusicPlayer().playbackState == .Playing {
    print("Music is playing")
} else {
    print("Play your music")
}

Не забудьте импортировать:

import MediaPlayer

И если вы хотите воспроизвести звук одновременно, используйте этот код для воспроизведения звукового файла.

func playSound {
    var soundID: SystemSoundID = 0
    let soundURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), "myFileName", "mp3", nil)
    AudioServicesCreateSystemSoundID(soundURL, &soundID)
    AudioServicesPlaySystemSound(soundID)
} 
person Rajat    schedule 25.08.2015
comment
Спасибо, это работает для музыки в фоновом режиме, но когда я использую звуковой эффект в своей игре, фоновая музыка обрезается. Я использую тот же код для воспроизведения звукового эффекта в моей игре. Есть ли другой способ воспроизвести звуковой эффект во время воспроизведения фоновой музыки? - person Michel Kansou; 25.08.2015
comment
я не понимаю тебя должным образом - person Rajat; 25.08.2015
comment
Вы хотите воспроизводить музыку, пока приложение находится в фоновом режиме. - person Rajat; 25.08.2015
comment
извините за плохое объяснение, я имею в виду, что моя игра о том, чтобы разбить квадрат, когда пользователь касается квадрата, он взрывается, и воспроизводится звуковой эффект в течение 1 секунды, когда этот звук воспроизводится, фоновая музыка выключается. - person Michel Kansou; 25.08.2015
comment
Зарегистрируйте уведомление на «AVAudioPlayer», которое сработает, когда ваш звук прекратится. В цели этого уведомления поместите «MPMusicPlayerController.systemMusicPlayer().play()», который возобновит фоновую музыку. - person Rajat; 25.08.2015
comment
означает ли это, что он будет воспроизводить звуковой эффект, а затем возобновлять фоновую музыку? - person Michel Kansou; 25.08.2015
comment
но есть ли способ играть в них одновременно? - person Michel Kansou; 25.08.2015
comment
я пытаюсь это сделать, но он воспроизводит звуковой эффект 1 раз, а затем я больше не играю, все, что я хочу, это воспроизводить музыку systemMusicPlayer и звуковой эффект одновременно, как в любой игре, например, в шутере fps, у вас есть саундтрек и звуковой эффект пуль,огонь... - person Michel Kansou; 25.08.2015
comment
Я получаю сообщение об ошибке «CFRelease» недоступен: объекты Core Foundation автоматически управляются памятью - person Michel Kansou; 25.08.2015
comment
Просто удалите CFRelease(soundURL) - person Rajat; 25.08.2015
comment
я получил еще одну ошибку. Отсутствует возврат в функции, которая, как ожидается, вернет «SystemSoundID». - person Michel Kansou; 25.08.2015