Воспроизведение звуковых эффектов в фоновом режиме - PullRequest
2 голосов
/ 16 июля 2010

Мне нужно воспроизвести некоторые спорадические звуковые эффекты на фоне приложения для iPhone. Из всего, что я прочитал и испытал на iOS 4, я могу поддерживать приложение в фоновом режиме, пока я использую GPS, указав «местоположение» в качестве фонового режима. Это на самом деле работает. Но иногда я хочу воспроизвести звуковой эффект ... другими словами, это не «непрерывный» звук, на который я ссылаюсь.

Но приложение работает, так почему я не могу просто использовать AVAudioPlayer для воспроизведения некоторых звуковых эффектов? Будет ли работать другой звуковой API?

GAHHH!

    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"BEEP" ofType:@"aiff"];
NSURL *fileURL = [[[NSURL alloc] initFileURLWithPath: soundFilePath] autorelease];

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];

player.volume = 1.0;
[player prepareToPlay];

// play
[player play];

Ответы [ 3 ]

0 голосов
/ 23 января 2011

Ответ в том, что он не будет работать с AVAudioPlayer.Вместо этого используйте API AudioServicesPlaySystemSound.

0 голосов
/ 20 марта 2011

[РЕДАКТИРОВАТЬ] У вас есть хороший пример фонового воспроизведения при мониторинге положения GPS здесь:

http://www.informit.com/articles/article.aspx?p=1646438&seqNum=5

И он использует AudioToolbox вместо AVAudioPlayer

Мне удалось сделать это с помощью AVAudioPlayer .

Вы также добавили значение audio в info.plist для ключа UIBackgroundModes?

0 голосов
/ 16 июля 2010

Я думаю, важно уточнить, что ваше приложение не работает в фоновом режиме.Скорее ваше приложение «усыплено».Указанное вами значение фонового процесса info.plist сообщает ОС, что оно должно пробудить ваше приложение и позволить ему реагировать на определенные типы событий.Из Apple Documentation

Каждое из предыдущих значений [audio, location, voip] позволяет системе знать, что ваше приложение должно быть активировано в подходящее время для ответа на соответствующие события.

В вашем случае ваше приложение заморожено и может отвечать только на указанный вами тип события (местоположение или GPS).

Вы не даете понять, в каком контексте находится этот код, поэтому на данный момент трудно сказать вам, почему звук не воспроизводится.Кроме того, вам нужно убедиться, что ваше приложение работает в фоновом режиме для указанной цели.Если вы используете механизм location и не используете GPS в своем приложении, вы можете получить отказ при подаче заявки.

Вы также можете обратиться к Контрольному списку поддержки многозадачности , чтобы убедиться, что структура вашего приложения соответствует их требованиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...