iPhoneのシャッター音をノイズキャンセリング技術の原理で消す方法
By David Goehring
iOS端末でどうしてもシャッター音を静かにしたい・消したいという人はシャッター音のもとであるファイルをリネームしたり、無音の同名ファイルで上書きするなどいろいろな方法を用いていると思いますが、プログラマー向けQ&AサイトのStack Overflowでは「もっとクールな方法がある」ということで、シャッター音に対して位相を反転させた逆相のファイルを掛け合わせて無音状態にするという手法が紹介されています。
iphone - AVFoundation, how to turn off the shutter sound when captureStillImageAsynchronouslyFromConnection? - Stack Overflow
http://stackoverflow.com/questions/4401232/avfoundation-how-to-turn-off-the-shutter-sound-when-capturestillimageasynchrono
これは、iOS向けにカメラアプリを制作しているohhoというユーザーが、どうしてもシャッター音が鳴ってしまうのはどうにかならないだろうかとStack Overflowに質問を投稿したところ、寄せられたもの。
そもそも、iOS向けにカメラアプリを作るにあたっては「UIImagePickerController」を使う方法と「AVFoundation.framework」を使う方法の2つがあります。カンタンなのは「UIImagePickerController」を使うことですが、自由度が高いのは「AVFoundation.framework」を使う方法で、ohhoさんはAVFoundationを使って、カメラのライブビュー画面から画像を取得することでシャッター音をなくすことを思いついたのですが、うまくいかなかったそうです。
質問に対する回答によると、手順はまずiPhoneに内蔵されているシャッター音のファイル「photoShutter.caf」を取得。そのファイルを波形編集ソフトで開き、波形を反転させることで逆相ファイルを作ります。上段が元のファイルを拡大した波形で、下段が位相を反転された状態のデータを示しています。
補助線を引くと、波形の山の部分が上下でちょうど逆さまになっていることが確認できます。
次に、逆相にしたファイルを[photoShutter2.caf]のファイル名で保存し、下記のコードを使って「captureStillImageAsynchronouslyFromConnection」でシャッターを切る(画像を取得する)直前に音を再生するようにします。これにより、カメラアプリでシャッターを切ろうとすると通常のシャッター音(photoShutter.caf)とシャッター音の逆相(photoShutter2.caf)が同時に鳴るので、2つの音が打ち消しあってシャッター音がなくなる、という仕組みになっています。
実際にこの手法で数回にわたってテストしてみたところ、まったくシャッター音は確認できなかったとのこと。原理的には外部のノイズをマイクで拾って打ち消す音を再生して騒音を軽減するノイズキャンセリングヘッドホンと同じ動作ですが、こちらは元のデータレベルで同じ波形を用いているのでより高い効果が得られるようです。逆相成分を合成して波形をキャンセルするためにはサンプル単位でピッタリと位置を一致させないと効果が激減するはずなので、その制御をどのように行っているのかが気になるところです。
・関連記事
Appleが写真撮影後にピント合わせ可能な特許を取得、iPhoneへの搭載も可能 - GIGAZINE
映画用カメラレンズの技術を駆使した高性能スマホ用レンズ「Moment」 - GIGAZINE
スマホやタブレットなどのカメラに付けて変わった写真を撮るクリップ型レンズ「Mobi-Lens」 - GIGAZINE
iPhoneに装着してハイアングル&ローアングルの撮影を劇的にラクにする「HiLO Lens」を使ってみました - GIGAZINE
iPhoneにマクロ/魚眼/広角レンズ・カッター・ねじ回し・栓抜きなどをプラスするケース「ReadyCase」 - GIGAZINE
Appleが着脱式レンズの新たな特許を取得、今度はバヨネット式マウント - GIGAZINE
Googleの3Dスキャンがリアルタイムにできるスマホ「Tango」がNASAと宇宙へ - GIGAZINE
・関連コンテンツ