iPhoneのボリュームスライダーなしでボリュームを変更する
-
27-09-2019 - |
質問
あなたの助けが必要です。アプリのサウンドボリュームを変更するにはどうすればよいですか。ボリュームスライダーを使用したくありません。代わりに、ボリュームノブであるUIImageViewがあり、時計回りに回転して増加し、音量を減らすために時計回りになります。回転は単なるアニメーションであり、私はすでにその部分をやっています。
ボリュームを増やす/減らす方法について、あなたの助けとアドバイスが必要です。ありがとう
解決
私は注意してください setValue
で MPVolumeView
おそらく更新以外は何もしないので 外観 スライダーのものは、実際のデバイスボリュームレベルではありません。代わりに電話する必要があります _commitVolumeChange
プライベートAPIであり、おそらくアプリを拒否される可能性があります。
ボリュームを制御する方法に対する短い答え:それは本当にあなたが何を制御しようとしているかに依存します。
「アプリ内のすべてのサウンドをコントロールする」種類のコントロールが必要な場合は、 MPVolumeView
しかし、あなた できません プログラムで価値を変更します。その後、スライダーをタッチで移動するか、デバイスの側面にあるボリュームボタンを使用することによってのみ、ボリュームを変更できます。最善のことは、サウンドを再生する前に、オブジェクトのいずれかが読み取ることができるボリュームレベルを保存するグローバルオブジェクトを作成することです。
それが AVAudioPlayer
オブジェクト、オブジェクトを作成して使用します [theAudioPlayerObject setVolume: someFloat];
どこ someFloat
0.0〜1.0の値です。
それがaの場合 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ファイルになります。これをカップルのuibutonsとして本当にすばやく実行しました。独自に行う必要があります)。特定の値のボリューム(フロートとして0.0から1.0を通過できます)
- (IBAction)volumeUp:(id)sender
{
[streamer setVolume:1.0];
}
- (IBAction)volumeDown:(id)sender
{
[streamer setVolume:0.0];
}
他のヒント
私はこれをAppleのコードのバグと見なし、バグレポートと直接の両方で彼らにそれを報告しましたが、彼らはその機能を主張しているので、あなたもそれから利益を得るかもしれません。
次のコードを使用して、アプリケーションのボリュームを変更します。
[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];
これは、サウンドを再生するか、そのようにアクティブに設定することによって、オーディオセッションを確立した後にのみ機能します。
[[AVAudioSession sharedInstance] setActive:YES error:NULL];
mediaplayer.frameworkとavfoundation.frameworkが必要であり、ボリュームは0.0〜1.0の間であることに注意してください。
さて、最小回転(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
その価値を設定します。また、ユーザーがデバイスのボリューム+/-ボタンを押すと何が起こるかを処理する必要があります。