GMT ver5でマイク入力を描画

マイク入力を録音するには arecord コマンドを使用します。音質にこだわる訳ではありませんので、サンプリングレートは2000Hzとしました( -r 2オプション)。分解能は16bitでもよかったのですが、なぜか符号なし8bitとなってしまいました。5秒間分をraw形式で出力します。

arecord -t raw -r 2 -d 5

出力されたバイナリファイルをodコマンドでテキスト形式に変換します。 -w1 オプションは1行に1バイト(8bit)分書き出すことを示します。 -t u1 オプションで符号なし8bitとして取扱います。-An はオフセットアドレスの非表示を、 -v オプションは繰り返し省略の無効を示します。

od -w1 -t u1 -v -An

awk コマンドで整形します。行数をサンプリングレートで割って秒に変換しています。またodコマンドの出力から128を引いて静音時がゼロとなるようにしています。この結果を一旦一時ファイルに書き出します。

awk '{print NR/2000,$1-128}' > $temp

横軸25センチ縦軸10センチで線形投影します(-JX25c/10c)。

横軸は0秒から5秒まで、縦軸は-50から+50までとします(-R0/5/-50/50)。

横軸は1秒ごとに目盛を示し”sec”というラベルを付けます(-Bxa1+l"sec")。

縦軸は10ごとに目盛を付けます。ラベルは表示しません(-Bya10 )。

グラフの線幅は0.5ポイントとします(-W0.5p)。

gmt psxy $temp -JX25c/10c -R0/5/-50/50 -Bxa1+l"sec" -Bya10 -V -W0.5p > ${img}.ps

 約1秒間隔で「イチ、ニ、サン、シ、ゴ」と話した結果の例です。

f:id:S_E_Hyphen:20171101170950j:plain

 


#!/bin/bash
temp=`mktemp ./XXXX`
img="音声"
arecord -t raw -r 2 -d 5 |\
od -w1 -t u1 -v -An |\
awk '{print NR/2000,$1-128}' > $temp
gmt psxy $temp -JX25c/10c -R0/5/-50/50 -Bxa1+l"sec" -Bya10 -V -W0.5p > ${img}.ps
rm $temp
convert -density 300 ${img}.ps ${img}.jpg