Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
@pao_papa_2000
Revisions
Report this question
Subscribe question
Help us understand the problem. What is going on with this question?
Q&A

無音化

解決したいこと

私は無音化サービスではなく、カメラアプリを趣味で開発しています。
カメラアプリの無音化に取り組み、こちらのサイトを参考にさせていただき、
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辺りから権限がありません。

よろしくお願いいたします。

0
2
Answer

下記のページに書いてるように、プレビュー画像を保存する方法はどうでしょうか?
https://www.usefullcode.net/2011/01/android_kill_shutter_sound_memo.html

0
ありがとうございます。

実はこれもやってみたのですが、要は、CallBackで鳴らす音とシャッター音とが2重で鳴るだけなんですよね。

なので、無音のmp3を使っても結局シャッター音は消えないという現象になります。

調べていただいてありがとうございます。

対応しているアプリがあるので、方法はあるはずです。
ただ、HWのスピーカを止めるなど、コアなことをやっているとすると、
権限的にGrayな可能性があるので将来的に保障されているか?は、別ですが、
恒久的な処置であれば良いのですが、
結局、「鳴らす方針のメーカー」があるのであれば、そこと追いかけっこをしているような気もしています。

よろしくお願いいたします。

カメラアプリを作ったことはないので憶測ですが、APIではなくてカメラへの入力画像を何らかの形で取得して保存しているのではないでしょうか?
表示用にOpenGLのテクスチャとして来るのであれば中身を取得する方法はあるのでその可能性はありますね

0
そういう方法があるのですね。
そうなると作りからして大幅な変更になるので、
もう少し、Camera API を使用した方法を模索してみます。
余談ですが、現在、Camera API から Camera2 API へ推進されているようですが、
Camera2は、現段階では、私には使い物になりませんでした。
相当機能落ちしていると感じています。
例えば、保存できる画像のサイズなども極端に減ります。

戻りますが、Camera API でどんなデバイスでもシャッター音を鳴らさないことを実現されている方がいらっしゃいましたら、方式を教えていただければ幸甚です。

よろしくお願いいたします。
Help us understand the problem. What is going on with this answer?
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login