Вопрос

Я знаю, я должен установить 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top