Playsystemawound с немой включен
-
27-09-2019 - |
Вопрос
Я знаю, я должен установить AudioSession
К категории «Воспроизведение», которая позволяет аудио даже при включении отключения звука. Это то, что я делаю, но звук все еще отключен, когда включен переключатель.
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory), &sessionCategory);
SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle] pathForResource:soundString ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
AudioServicesPlaySystemSound (soundID);
РЕДАКТИРОВАТЬ: Кстати, приложение является SoundPad. Воспроизведение звука - единственная цель приложения. Вот что Apple Doc говорит об этом:
Используйте эту категорию для приложения, воспроизведение звука которых имеет первостепенное значение. Ваши звуковые воспроизведения даже с заблокированным экраном и с помощью кольцевого / бесшумного коммутатора, установленного на молчание.
Редактировать 2.: С включением отключения звука звук не будет даже играть через наушники. Я знаю, что пользователь король. Отказ Я знаю, что выключатель отключения звука имеет свое назначение. Дело не в этом. Я пытаюсь получить ответ на тот факт, что установив AudioSession
категория kAudioSessionCategory_MediaPlayback
не имеет ожидаемого результата.
Редактировать 3: Следуя внушение Джонатана Ватмау, я установил AudioServices
kAudioServicesPropertyIsUISound
Собственность, но все равно не повезло. Я что-то пропустил?
// set the session property
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory), &sessionCategory);
// creates soundID
SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle] pathForResource:soundString ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
// Jonathan Watmough suggestion
UInt32 flag = 0;
AudioServicesSetProperty(kAudioServicesPropertyIsUISound, sizeof(UInt32), &soundID, sizeof(UInt32), &flag);
AudioServicesPlaySystemSound (soundID);
Решение
Что ж, чтобы добавить на ответ Джонатана Ватмаума, действительно, не может позволить аудиосистемСерВедисистемСундам перезаписать отключение звука. То, что я закончил делать, это использует OpenAL для воспроизведения звуков, которые будут играть только хорошо, следуя в категории «Категория аудиосистера». Вот как я настроил аудиосессию:
AudioSessionInitialize(NULL, NULL, NULL, NULL);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory), &sessionCategory);
AudioSessionSetActive(YES);
Играть в звуки, я использовал Финч, Простой звуковой эффект на основе открытого материала для iPhone.
Другие советы
Я еще не пробовал, но вы можете изменить свойство на ваш загруженный звук:
kaudioservicesPropertyisuisuisousousuisousoundЗначение uint32, где 1 означает, что для аудиофайла, указанного в системном звуке, прошедшемся в параметре Inspecier, System Server уважает настройку пользователя в предпочтениях звуковых эффектов и молчит, когда пользователь выключает звуковые эффектыОтказ Это свойство установлено на 1 по умолчанию. Установите его на 0 для звука системы, чтобы всегда воспроизводиться при прохождении в аудиосистемыPlaysSeMSound, независимо от настройки пользователя в звуковых предпочтениях.Отказ Доступно в iPhone OS 2.0 и позже. Объявлено в audioservices.h.
Я ожидаю, что сделав все остальное правильно, настроить свойство 0, скажут систему, что ваш звук - это звук приложения, а не звук «ui» и, следовательно, подлежит отключению.
Редактировать: Похоже, это не может быть сделано с помощью системных звуков. Если вы пройдете через Openal, вы, очевидно, сможете играть с набором кнопки MUTE.
Я построил образец SYSSOUND и добавил следующий код, чтобы установить флаг, который вы сделали выше, и он вообще не играет на немой.
// Set the sound to always play
int setTo0 = 0;
AudioServicesSetProperty( kAudioServicesPropertyIsUISound,0,nil,
4,&setTo0 );
Вы звоните Снижение: ошибка: Для Avaudiosion где-то верно? Вот код, который я использую для инициализации. Но я не использую системные звуки, я использую AvaudioPlayer для воспроизведения звуков.
avSession = [AVAudioSession sharedInstance]; // init session, important
// allow other audio to mix, such as iPod
const UInt32 categoryProp = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(categoryProp), &categoryProp);
UInt32 category = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
// Allow our audio to mix with any iPod audio that is playing
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(setProperty_YES), &setProperty_YES);
[avSession setActive:YES error:nil];
Я не могу найти его явно упомянутым в документах, но я ожидаю, что аудиосистемыPlaySeSwound () игнорирует конфигурацию вашей аудиосистемы.
Если вы хотите контролировать смешивание сеанса и другие свойства, вам нужно использовать AvaudioPlayer вместо этого:
NSError *err;
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:&err];
[session setActive:YES error:&err];
NSString *path = [[NSBundle mainBundle] pathForResource:@"Basso" ofType:@"aiff"];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&err];
[player prepareToPlay];
[player play];
Я использую код ниже, чтобы решить мою проблему
AudioSessionInitialize(NULL, NULL, NULL, NULL); UInt32
sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory),
&sessionCategory); AudioSessionSetActive(YES);