下記のページに書いてるように、プレビュー画像を保存する方法はどうでしょうか?
https://www.usefullcode.net/2011/01/android_kill_shutter_sound_memo.html
無音化
解決したいこと
私は無音化サービスではなく、カメラアプリを趣味で開発しています。
カメラアプリの無音化に取り組み、こちらのサイトを参考にさせていただき、
https://qiita.com/anolivetree/items/31cf92d3a0ac7342d672
setMasterMute をリフレクションで使わせてもらいました。
Android 10以前のテスト機では、問題なく動作しました。
takePicture 前に無音にして、画像保存後、無音解除。という具合です。
ところが、Pixel3a Android 11(R) でカメラアプリでは、無音化できませんでした。
発生している問題・エラー
こちらのサイトの通り、権限がなくなっていました。
https://banatech.net/blog/view/25
「シャッター音消し」をインストールして試させていただきましたが、
やはり、Pixel3a Android 11(R) では、シャッター音が鳴りました。
ところが、Pixel3a Android 11(R) でも動作するカメラアプリを発見しました。
無音カメラ [最高画質] というアプリです。
https://play.google.com/store/apps/details?id=com.peace.SilentCamera&hl=ja&gl=US
どうやって無音化しているのか?今何とかこれを解析しています。
ログを追っておりますが、今のところ発見できておりません。
もし、情報があれば、お伝えいただけないか?というのが、今回のお願いでございます。
私も5日間ほど調査しておりますので、分かり次第、お伝えさせていただきます。
不躾なお願いで申し訳ございません。
サービスではなく、カメラプリ自体なら簡単じゃないか?とお思いかもしれませんが、
私には今のところ、そうでもないです。
自分で試したこと
私がカメラアプリを無音にするためのトライは次の通り。
(1) camera.takePicture(null, null, this);
ほぼ効きます。
Android 4.2から前と、Android 11以降は効きません。
それ以外にも時々、LGの端末など効かない機種もあります。
(2) camera.enableShutterSound(false);
これが推進のようですが、ほとんどのテスト機で
if (cameraInfo.canDisableShutterSound)
の時点で、対象になりません。当然、効きません。
(3) audioManager.setSpeakerphoneOn(false);
ダメでした。
(4) android.media.AudioSystem.setDeviceConnectionState()
リフレクション。スピーカ機能をOFFにするものです。
これも相当惜しいのですが、Android Q辺りから権限がありません。
よろしくお願いいたします。
2Answer
Comments
@pao_papa_2000
Questionerありがとうございます。
実はこれもやってみたのですが、要は、CallBackで鳴らす音とシャッター音とが2重で鳴るだけなんですよね。
なので、無音のmp3を使っても結局シャッター音は消えないという現象になります。
調べていただいてありがとうございます。
対応しているアプリがあるので、方法はあるはずです。
ただ、HWのスピーカを止めるなど、コアなことをやっているとすると、
権限的にGrayな可能性があるので将来的に保障されているか?は、別ですが、
恒久的な処置であれば良いのですが、
結局、「鳴らす方針のメーカー」があるのであれば、そこと追いかけっこをしているような気もしています。
よろしくお願いいたします。
カメラアプリを作ったことはないので憶測ですが、APIではなくてカメラへの入力画像を何らかの形で取得して保存しているのではないでしょうか?
表示用にOpenGLのテクスチャとして来るのであれば中身を取得する方法はあるのでその可能性はありますね
Comments
@pao_papa_2000
Questionerそういう方法があるのですね。
そうなると作りからして大幅な変更になるので、
もう少し、Camera API を使用した方法を模索してみます。
余談ですが、現在、Camera API から Camera2 API へ推進されているようですが、
Camera2は、現段階では、私には使い物になりませんでした。
相当機能落ちしていると感じています。
例えば、保存できる画像のサイズなども極端に減ります。
戻りますが、Camera API でどんなデバイスでもシャッター音を鳴らさないことを実現されている方がいらっしゃいましたら、方式を教えていただければ幸甚です。
よろしくお願いいたします。@pao_papa_2000
Questioner結局、S.Percentage@Pctg-x8 さんの手法で実現させていただきました。
Camera1 では、無理でした。
結論から書くと・・・
■Android 10 以前
Camera1で「setMasterMuteをリフレクション」の手法で無音化
■Android 11 以降:camera.takePicture()でのシャッター音の制御は不可能でしたので、代わりにプレビュー画面に表示された画像を保存できる仕組み(Camera2)
趣味でやっておりましたが、現時点でのシャッター音の完全無音化を実現することができたため、商品としての開発に取り組み、おかげさまで、Angle Camera という製品としてリリースさせていただきました。
ここで、リリース内容を告知してもらっています。
https://www.atpress.ne.jp/news/266567
製品は、Google Play Store で公開しています。
Angle Camera (600円)
https://play.google.com/store/apps/details?id=ac.pao.anglecamera
Angle Camera Try (体験版)
https://play.google.com/store/apps/details?id=ac.pao.AngleCameraTry
Facebookページは、こちらです。
https://www.facebook.com/AngleCameraTry
更に、緯度・経度に加えて方位角度をJpeg画像のジオタグに埋め込み、
Windowsアプリの地図上に撮影方向を出力することを思いつき、
Angle Camera とセットで使用できるWindowsアプリ「pic2map」という製品も同時にリリースしました。
スマホで撮影した写真をパソコンに持って行って
Googleマップ上に撮影位置と矢印で撮影方向をプロットするものです。
Google Earthとの連携もしております。WordやExcelへの出力も可。
@Pressで告知してもらいました。
https://www.atpress.ne.jp/news/266262
製品は、自社のサイトで公開・販売しています。
http://www.pao.ac/pic2map/
Facebookページは、ここです。
https://www.facebook.com/pic2map
私にとっては、Windowsアプリは、Androidアプリに比べて遥かに楽ですわ。
Androidアプリは初めてやらせてもらいましたが、大変でした。
デバイスだらけの塊ですもんね。そことのやりとり。新しい推進APIも出てくるし、
後は、Googleとのやり取り、これもAPIとかややこしくて、ともかくよくみんなこんな大変なAndroidのアプリ作っているなぁと、感心しています。
色々お世話になりました。ありがとうございました。