2015-12-20 21 views
5

gram dźwięki tak:iOS Sound Control Volume

#import <AudioToolbox/AudioToolbox.h> 
#import <AVFoundation/AVFoundation.h> 
.. 
.. 
SystemSoundID soundID; 
NSString *path = [[NSBundle mainBundle] 
    pathForResource:@"ClickSound" ofType:@"wav"];  

AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID); 
AudioServicesPlaySystemSound (soundID); 

Wydaje się, że to wielkość od „Ringer”, ale kiedy używam fizycznego przycisku głośności to kontrolować „Volume” (tak ja może "wyciszyć" głośność - ale wciąż słyszę dźwięk).

Chcę kontrolować odpowiednią głośność i nie chcę, aby gra była odtwarzana, gdy jest wyciszona (BTW - kiedy używam wyciszenia, to działa i nie słyszę dźwięku).

Jak mogę to naprawić?

Odpowiedz

2

AudioServicesCreateSystemSound dotyczy tylko głośności dzwonka.

Możesz użyć AVAudioPlayer do tego. Oto przykładowy kod:

AVAudioPlayer *buttonClick=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:[[NSString alloc] initWithFormat:@"buttonClick"] ofType:@"mp3"]] error:NULL]; 
[buttonClick prepareToPlay]; 
[buttonClick play]; 
0

Nie ma sposobu, aby kontrolować głośność w kodzie. Możesz podać kontrolkę interfejsu użytkownika, aby umożliwić użytkownikowi zmianę głośności.

Dźwięk jest zarządzany według kategorii, a jego zachowanie różni się w zależności od ustawień sprzętowych.

Kategoria Ambient uzna wyłącznik wyciszania; inni nie.

Brak kategorii umożliwia określenie położenia wyłącznika wyciszania.

+0

chcę kontrolować dźwięk przez kontrolerów fizycznych, kontrolują one „Volume”, ale dźwięk z mojej gry jest zawsze taki sam. Innymi słowy - chcę, aby "Volume" kontrolował funkcję AudioServicesPlaySystemSound(), a nie "Ringera". @Avi – Dizzy

+0

Co chcesz, a co otrzymasz, to różne rzeczy. Byłoby okropnym doświadczeniem dla użytkownika, gdyby jakaś głupia aplikacja mogła ustawić głośność w dowolny sposób, z możliwymi różnymi kontrolami, które muszę wymyślić – gnasher729

0

Prawdopodobnie należy zarejestrować się na plecach przycisk głośności połączeń Korzystanie poniżej kod,

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(volumeChanged:) 
    name:@"AVSystemController_SystemVolumeDidChangeNotification" 
    object:nil]; 
} 

- (void)volumeChanged:(NSNotification *)notification 
{ 
    float volume = 
    [[[notification userInfo] 
     objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] 
    floatValue]; 
} 

Mam nadzieję, że będzie pomaga. Szczęśliwe kodowanie :)