生後2か月の赤ちゃんの泣き声をPythonライブラリのlibrosaで解析してみた
あけましておめでとうございます。
本年も趣味と技術を組み合わせたネタをつらつらと書いてまいりますのでよろしくお願いします。
去年の11月に第二子が生まれまして、色々忙しくしておりました。
現在育休中ですが、一人目より二人目が鬼門と呼ばれる所以を痛感する毎日です。
妻も私もやや育児ノイローゼ気味で、最近落ち着いてきたところです。
そんなわけで、我が子の泣き声をPythonのライブラリであるlibrosaを使って解析してみました。
泣き声がノイローゼを引き起こす不快な特徴を解析することで、育児ノイローゼを少しでも軽減するヒントが見つかるのではないかと思いついたわけです。
育児の現場って本当に過酷で、他人が介入しにくいので虐待も起こりえるんです。
悲惨なニュースとかみるといたたまれないですよね。
将来的にそんな育児の現場を改善する製品・サービス開発に携わるのも面白いなぁと新年早々妄想していたのです。
では早速ソースコードを貼っていきます。
まず我が子の泣いている動画を撮影します。
撮影後、動画データから音声データだけを取り出したいのでmp4ファイルからwavファイルを抽出します。
取り出しにはffmpegを使用しました。
使い方は簡単で、ffmpegをインストール後、コマンドプロンプトでffmpeg -i **.mp4 **.wavで抽出できます。
抽出したものを読み込んで、波形データとして可視化します。
横軸は時間軸、縦軸は振幅(おそらく1を最大とした音量の比率)を表しているようです。
では実際に短時間フーリエ変換(STFT)にかけてみましょう。
私はSTFTについては詳しくないのですが、これで周波数Hzと音の大きさdBが視覚的にわかるようです。
おそらくですが、音が全く出ていない(10dB以下)であれば、このヒートマップは真っ白になるのだと思います。
結構黒い部分が見えるところから、80dB程度のものが出ていることがわかります。
これは一体どの程度の騒音なのか。
騒音の参考に、以下のサイトを参照しました。
www.madocon.jp
こちらのサイトによると、80dBがかなりの騒音レベルであることがわかりました。
また面白いのが赤ちゃんの声の周波数というのは激しく変化するという特徴もわかりました。
上は8000Hz、下は64Hzとなっており、赤ちゃんの泣き声は高い音だけではないというのは不思議ですね。どういう仕組みをしているのか気になるところです。
もう少し深い考察や解析はまた進捗があれば展開します。