2015-12-20 71 views
5

私はこのようなサウンドを再生しよう:iOSのコントロールサウンド音量

#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); 

それはリンゲルからボリュームだ、しかし、私は物理ボリュームボタンを使用する場合、それは「ボリューム」をコントロールする(だから取るように見えます音量をミュートすることができますが、まだ音が聞こえます)。

私は正しい音量をコントロールしたいが、ミュートされているときにはその音を再生したくない(BTW - ミュートトグルを使用すると音が聞こえない)。

どうすれば修正できますか?

答えて

2

AudioServicesCreateSystemSoundは、呼び出し音量にのみ適用されます。

これにはAVAudioPlayerを使用できます。

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

コード内の音量を制御する方法はありません。ユーザーがボリュームを変更できるようにUIコントロールを提供することができます。

オーディオはカテゴリ別に管理され、動作はハードウェア設定を基準にして異なります。

Ambientカテゴリはミュートスイッチを尊重します。他の人はそうしないでしょう。

カテゴリなしで、ミュートスイッチの位置を特定できます。おそらく、コードの下に使用して音量ボタンのコールバックのためにあなたを

+0

私は、彼らが「ボリューム」をコントロールするが、私のゲームの音はいつも同じで、物理的なコントローラーにより音を制御したい:ここに は、いくつかのサンプルコードです。言い換えれば、私は '音量'がAudioServicesPlaySystemSound()関数を制御し、 'リンガー'は制御しないようにします。 @Avi – Dizzy

+0

あなたが欲しいものと得るものは異なるものです。何らかの愚かなアプリが、私が把握しなければならない可能性のある異なるコントロールを使って、それが望むようにボリュームを設定できるなら、それはひどいユーザーエクスペリエンスだろう – gnasher729

0

を登録する必要があり、

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

は、それが役立ちますことを願っています。 ハッピーコーディング:)

関連する問題