在iphone上没有音量滑块的情况下更改音量

awl*_*lcs 12 iphone avfoundation ipad

我需要你的帮助.我该如何继续更改应用中的音量.我不想使用音量滑块.相反,我有一个UIImageView,它是一个音量旋钮,我顺时针旋转增加,逆时针旋转减小音量.旋转只是一个动画,我已经完成了那部分.

我需要你的帮助和建议,如何增加/减少音量.谢谢

小智 16

我认为这是Apple代码中的一个错误,并且已经通过Bug Reports和他们亲自向他们报告过,但是由于他们坚持使用它,所以你也可以从中受益.

使用以下代码更改应用程序的卷:

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];
Run Code Online (Sandbox Code Playgroud)

只有通过播放声音或将其设置为活动状态后,才能在建立音频会话后执行此操作:

[[AVAudioSession sharedInstance] setActive:YES error:NULL];
Run Code Online (Sandbox Code Playgroud)

请注意,您需要MediaPlayer.framework和AVFoundation.framework,并且音量介于0.0和1.0之间.


iwa*_*bed 12

我会小心地调用setValue一个,MPVolumeView因为它可能不会做任何事情,除了更新滑块的外观,而不是实际的设备音量级别.您将不得不调用_commitVolumeChange哪个是私有API,并可能会拒绝您的应用.

如何控制音量的简短答案:这实际上取决于你试图控制的音量.

如果你想要"控制应用程序中的每个声音"这种控制,那么你可以使用一个,MPVolumeView但你不能以编程方式改变它的价值.然后,您只能通过触摸移动滑块或使用设备侧面的音量按钮来更改音量.最好的办法是创建一个全局对象,用于存储任何对象在播放声音之前可以读取的音量级别.

如果它是一个AVAudioPlayer对象,您将创建该对象并使用[theAudioPlayerObject setVolume: someFloat];其中someFloat的值介于0.0和1.0之间.

如果它是一个SystemSound对象,则无法控制音量.

如果它是一个AudioQueue你通过改变它AudioQueueSetParameter

就像我说的......这一切都取决于你是如何播放声音的.

根据评论更新

对于该特定示例,您可以像这样设置音量:

添加到AudioStreamer.h文件

- (void)setVolume:(float)Level;
Run Code Online (Sandbox Code Playgroud)

添加到AudioStreamer.m文件

- (void)setVolume:(float)Level
{

    OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level);

    if (errorMsg) {
        NSLog(@"AudioQueueSetParameter returned %d when setting the volume.", errorMsg);
    }

}
Run Code Online (Sandbox Code Playgroud)

添加到视图控制器中的音量旋钮将在哪里(这是在.m文件中..我只是做了几个UIButton快速,你必须自己做)并设置一个IBAction来改变给定值的体积(您可以传递0.0到1.0作为浮点数)

- (IBAction)volumeUp:(id)sender
{

    [streamer setVolume:1.0];

}

- (IBAction)volumeDown:(id)sender
{

    [streamer setVolume:0.0];

}
Run Code Online (Sandbox Code Playgroud)