2015-12-20 19 views
5

sto giocando suona così:iOS suono Controllo del 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); 

Sembra prendere è il volume da 'Ringer', ma quando uso il pulsante del volume fisico controllare il 'Volume' (così ho può 'silenziare' il volume - ma sento ancora il suono).

Voglio controllare il volume corretto e non voglio che suoni quando è silenziato (BTW - quando uso l'interruttore di silenziamento funziona e non sento il suono).

Come posso risolvere il problema?

risposta

2

AudioServicesCreateSystemSound si applica solo al volume della suoneria.

È possibile utilizzare AVAudioPlayer per questo. Ecco alcuni esempi di codice:

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

Non è possibile controllare il volume nel codice. È possibile fornire un controllo dell'interfaccia utente per consentire all'utente di modificare il volume.

L'audio è gestito da categorie e il comportamento differisce rispetto al rispetto delle impostazioni hardware.

La categoria Ambient rispetta l'interruttore di silenziamento; gli altri no.

Nessuna categoria consente di determinare la posizione dell'interruttore mute.

+0

Voglio controllare il suono dai controllori fisici, essi controllano il 'Volume', ma il suono del mio gioco è sempre lo stesso. In altre parole, voglio che il "Volume" controlli la funzione AudioServicesPlaySystemSound() e non la "Ringer". @Avi – Dizzy

+0

Quello che vuoi e quello che ottieni sono cose diverse. Sarebbe un'esperienza utente terribile se qualche app stupida potesse impostare il volume come preferisce, con controlli forse diversi che devo capire – gnasher729

0

Probabilmente è necessario registrarsi per le parti posteriori di chiamata del tasto del volume utilizzando sottostante Codice,

- (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]; 
} 

spero che aiuta. Happy coding :)

Problemi correlati