12

あなたの助けが必要です。アプリの音量を変更するにはどうすればよいですか。ボリュームスライダーは使いたくない。代わりに、ボリュームノブであるUIImageViewがあり、時計回りに回転して音量を上げ、反時計回りに回して音量を下げます。回転は単なるアニメーションであり、私はすでにその部分を実行しました。

音量を上げたり下げたりする方法について、あなたの助けとアドバイスが必要です。ありがとう

4

3 に答える 3

16

私はこれをAppleのコードのバグと見なし、バグレポートと直接の両方で報告しましたが、彼らはその機能を主張しているので、あなたもそれから恩恵を受けるかもしれません。

次のコードを使用して、アプリケーションのボリュームを変更します。

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];

これは、サウンドを再生するか、次のようにアクティブに設定することにより、オーディオセッションを確立した後にのみ機能します。

[[AVAudioSession sharedInstance] setActive:YES error:NULL];

MediaPlayer.frameworkとAVFoundation.frameworkが必要であり、音量は0.0から1.0の間であることに注意してください。

于 2010-08-11T16:49:21.380 に答える
12

スライダーの外観は更新されるだけで、実際のデバイスの音量レベルは更新されない可能性がsetValueあるため、慎重に呼び出すことにします。代わりに、プライベートAPIを呼び出す必要があり、アプリが拒否される可能性があります。MPVolumeView_commitVolumeChange

ボリュームを制御する方法への簡単な答え:それは本当にあなたがボリュームを制御しようとしているものに依存します。

「アプリ内のすべてのサウンドを制御する」種類の制御が必要な場合は、を使用できますが、MPVolumeViewプログラムで値を変更することはできません。その場合、音量を変更するには、スライダーをタッチで動かすか、デバイスの側面にある音量ボタンを使用する必要があります。最善の方法は、オブジェクトがサウンドを再生する前に読み取ることができる音量レベルを格納するグローバルオブジェクトを作成することです。

オブジェクトの場合AVAudioPlayerは、オブジェクトを作成し、0.0〜1.0の値を使用[theAudioPlayerObject setVolume: someFloat];します。someFloat

オブジェクトの場合SystemSound、音量を調節することはできません。

もしそうなら、AudioQueueあなたはそれを経由して変更するでしょうAudioQueueSetParameter

私が言ったように..それはすべてあなたがサウンドをどのように演奏しているかに依存します。

コメントに基づいて更新

その特定の例では、次のように音量を設定します。

AudioStreamer.hファイルに追加します

- (void)setVolume:(float)Level;

AudioStreamer.mファイルに追加します

- (void)setVolume:(float)Level
{

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

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

}

ボリュームノブを配置するビューコントローラーに追加し(これは.mファイルにあります。これは2つのUIButtonとして非常にすばやく実行しました。独自に実行する必要があります)、IBActionを設定して変更します。特定の値のボリューム(フロートとして0.0から1.0を渡すことができます)

- (IBAction)volumeUp:(id)sender
{

    [streamer setVolume:1.0];

}

- (IBAction)volumeDown:(id)sender
{

    [streamer setVolume:0.0];

}
于 2010-08-11T14:59:30.350 に答える
4

さて、最小回転(R1)と最大回転(R2)を取ります。次にrotation / (R2 - R1)、スライダーのように%を取得します。

編集:
ボリュームの変更をコミットするには、以下を追加します。

MPVolumeView *systemVolumeSlider = [[MPVolumeView alloc] initWithFrame: self.view.bounds];
[systemVolumeSlider setHidden:YES];
[systemVolumeSlider setUserInteractionEnabled:NO];
[self.view addSubview:systemVolumeSlider];

(必ずリリースsystemVolumeSliderしてくださいdealloc

その後、音量を変更する場合は、を使用setValueして値を設定します。また、ユーザーがデバイスの音量+/-ボタンを押したときに何が起こるかを処理する必要があります。

于 2010-08-11T13:50:58.143 に答える