こんにちは、KID.Aです。
今回もCamera2はAPIで気をつけなければいけないことを記載します。
Android LからCameraがdeparicatedされて、Camera2を使わなければいけないことになりました。
Camera2はCameraのAPIのよりできることもだいぶ増えました。しかしいいことばかりではなく、CameraのAPIなら意識しなくてもいいことがCamera2のAPIでは意識しなければいけない点もでてきています。その1つとして、写真を撮影した際の撮影音になります。
Camera2では基本的には撮影時(CaptureSession#capture)に撮影音が鳴りません。そのため、MediaAcionSoundのAPIを使って撮影音を鳴らさなければなりません。
・開発サイトのMediaAcionSoundのAPI
http://developer.android.com/intl/ja/reference/android/media/MediaActionSound.html
APIの説明に以下のような記載があります。
APIのクラス説明抜粋
==================
This class is recommended for use with the android.hardware.camera2 API,
since the camera2 API does not play any sounds on its own
for any capture or video recording actions.
==================
簡単に翻訳すると、Camera2ではサウンドを再生しないため、キャプチャやビデオレコード時に使用するのをおすすめするとのことが記載されています。
それでは、実際にMediaActionSoundを実装してみましょう。
※今回はMediaActionSoundの処理だけに絞ります。
実装は以下の通りで、撮影音を鳴らすだけであれば、とても簡単ですね。
MediaActionSound mediaActionSound = new MediaActionSound(); mediaActionSound .load(MediaActionSound.SHUTTER_CLICK); mediaActionSound .play(MediaActionSound.SHUTTER_CLICK); // 撮影実施 // ここで撮影のCaptureSession#captureを行います。 if (mediaActionSound != null) { mediaActionSound .release(); }
ソースの説明をすると、CaptureSession#captureの前に撮影音を鳴らして、撮影実施中にメディアをリリースすればよいです。
ただし、1点、通常のカメラと違うのはMediaActionSoundで鳴らす音は通常のカメラみたいに「カシャ」という音ではなく、「プルン」みないな音になります。
(「プルン」みないな音は機種によって違います。ちなみにF-04G(5.0)は「カシャ」でした。MediaActionSound.SHUTTER_CLICK に紐付くサウンドリソースの実体は/system/media/audio/ui/camera_click.ogg のようみたいです。)
実装はこんな感じでよいと思うのですが、実は機種依存がいます。
F-04G(5.0)、DM-01G(5.0.2)、SH-04G(5.0.2)でCaptureSession#captureの撮影時に「カシャ」という撮影音が鳴ります。
そのため、MediaAcionSoundをおこなうと「プルン」「カシャ」(機種によっては「カシャ」「カシャ」)と2重で撮影音が聞こえてしまいます。
ちなみにNexus 5(6.0)では「カシャ」と撮影音が鳴らないことは確認できて、MediaActionSoundのAPIの説明通り実装すれば撮影時に「プルン」だけ鳴ります。
この2重に撮影音が鳴ってしまう現象の根本的な回避策は…今のところ思いつきません。
Cameraのプレビューサイズとピクチャーサイズの機種依存問題の記事みたいに機種特定の処理を入れれば、処理をいれた機種に対してはなんとかなるのですが、全機種確認が必要のため非現実だと思います。
あとはやりたくはないのですが、depricatedされているCameraを使うと撮影音は通常通り鳴ります。
どれもいい案ではありませんね。。。
何かいい案があればコメントいただければと思います。
そもそも実際に「プルン」「カシャ」と2重に聞いたらそこまで不自然じゃないというのもあったので、対応自体必要ないというのもアリなのかとも思っています。ただ、「カシャ」「カシャ」という機種は少し不自然かもしれないです。。
以上、Camera2の撮影音の機種依存の説明でした。