2015-12-20 139 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); 

似乎把它從「振鈴的音量,但是當我使用物理音量鍵控制它「音量」(所以我可以「靜音」音量 - 但我仍然聽到聲音)。

我想控制正確的音量,並且我不想讓它在靜音時播放(順便說一句 - 當我使用靜音切換時它工作,而我沒有聽到聲音)。

我該如何解決?

回答

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()函數而不是'Ringer'。 @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]; 
} 

希望這將有助於。 快樂編碼:)