В разделе Audio Session Cookbook есть раздел «Checking if Other Audio is Playing During App Launch».Как справиться с другим воспроизведением звука в свете многозадачности в iOS?
Я использую MonoTouch (но не стесняйтесь дать Objective-C ответ, API одно и то же), так что код из этого документа выглядит следующим образом:
bool otherAudioPlaying = AudioSession.OtherAudioIsPlaying;
if(otherAudioPlaying)
AudioSession.Category = AudioSessionCategory.AmbientSound;
else
AudioSession.Category = AudioSessionCategory.SoloAmbientSound;
Получается, что , если мое приложение начнется с воспроизведения музыки iPod, эта музыка iPod продолжит играть и не позволит мне использовать аппаратный аудиодекодер (который мне не нужен в любом случае). Если во время запуска приложения нет музыки iPod, я могу использовать аппаратный декодер.
Затем я могу использовать значение otherAudioPlaying
, чтобы определить, начинать ли играть свою музыку.
Теперь это отлично работает в старых операционных системах, которые не поддерживают многозадачность. Но при многозадачности пользователь может оставить мое приложение (связанное с ним), начать воспроизведение музыки на iPod и снова ввести свое приложение. Затем их музыка iPod будет отключена, и моя музыка снова начнет воспроизводиться.
Что бы я хотел, чтобы музыка продолжалась, когда мое приложение возвращается на передний план - даже если моя собственная музыка воспроизводилась (и использовала аппаратный декодер), когда мое приложение было основано.
(И наоборот - если в моем приложении не было музыки, я хотел бы узнать, могу ли я начать играть музыку, когда она вернется).
Как я могу это сделать? (И, желательно, без резкого отключения звука, сохраняя при этом приятное затухание, которое обычно случается.)
EDIT: Я должен также указать, что я делаю все свои звуковые работы с основного потока.
Что случилось с установкой AudioSession.category = AVAudioSessionCategoryAmbient, независимо от того, играет ли другой звук или нет? –
@William Если я установил категорию в Ambient, то я не могу использовать аппаратуру декодирования самостоятельно для своей собственной музыки (а ее выполнение на CPU использует слишком много процессорного времени). –