8月は花火大会、夏祭り、私のバースデーと目白押しな一ヶ月
そんな熱中症予備軍・大量光合成中のUTOです。
今回はAVAudioPlayerを使ったサウンド再生において
ちょいと特殊な手法をまとめてみました。
ケース1
カメラのシャッター音のようにマナーモード時でも音を鳴らす(日本仕様なだけなんですけどね…シャッター音)
アプリ内でサウンド再生において、音量設定の影響をうけてしまうのですが
まずマナーモードにされていても音を鳴らす方法です。
AVAudioPlayer* audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: nil];
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
[audioPlayer play];
AVAudioSessionのカテゴリにてAVAudioSessionCategoryPlaybackを指定して再生すると
マナーモードを無視して再生されます。
ケース2
カメラのシャッター音のように音量を0にされても強制的にボリュームを最大にして音を鳴らしたい
いや、これって使い方がかなり限定的な気がしますが、
AVAudioPlayerのvolumeプロパティは、現在のマスター音量に対して0.0〜1.0にて0%〜100%の音量で再生することになり、そのマスター音量を調整できないのです。
マスター音量を調整するには2つやり方があって、
1.音楽プレイヤークラスを使ってメディアボリュームを調整する
2.ボリューム調整ビューを作成してスライダーで調整する
となります。(調べた限り…)
強制的にマスター音量を調整するには以下の方法にて可能です
MPMusicPlayerController* musicPlayerController = [MPMusicPlayerController applicationMusicPlayer];
// MAX VOLUME
[musicPlayerController setVolume: 1.0f];
実行するとあることに気づかれると思います。
そう、音量調整の小さな画面が表示されてしまいます。

そこでチカラワザでこいつを非表示にしてあげます。
2であげたボリューム調整ビューを画面に追加します。
MPVolumeView* volumeView = [[MPVolumeView alloc] initWithFrame: CGRectZero];
[volumeView setShowsVolumeSlider: YES];
[self.view addSubview: volumeView];
[volumeView release];
画面に追加されたタイミングで、
音量調整時の画面が表示されません。
ただし、本体のボリューム調整のボタンを押下しても表示されなくなりますので
必要ない画面での乱用は避けたほうがいいかもしれません
今回ボリューム調整ビューをCGRectZeroで作成しているので画面上には表示されないですが、
きちんとビューを作成すれば、スライダーが表示され、音量調整の値がフックされて反映されます。
設定画面や音楽プレイヤーアプリのボリューム設定のような感じですね。
まぁ強制的に音を鳴らすなんて対応は基本的にはしないでしょう
自前でカメラのシャッター音対応するくらいでしょうかね
- 関連記事
-
trackbackURL:http://appteam.blog114.fc2.com/tb.php/239-b9b5abbb