一方色々覚えなあかんの大変やなぁという感じ.
かえって一から組むのも楽しいかもしれない.
取り敢えず,自分のPCの中から見つけた .wav のファイルを分析してみる.
英語の短いフレーズが入ったのがあったので,それを発声毎に区切ってみたい.
手を動かしてみることも目的の一つなので,上手いアルゴリズムを考えるより初回は安直に,
その時刻まわりの少しの間の振幅の二乗平均がある値を下回れば音の切れ目と判断してみる.
どうなるかを見て,うまいやりかたはまた考えよう.
今回のソースコードがこちら.
sound0=wavread("blah.wav");//ステレオなので2×nが出てくるここから copy & paste すると改行とかの加減でうまく行かないかもしれないからその時は適当に.
sound1=sound0(1,:);
sound2=sound0(2,:);//片方ずつ取り出す,以下sound1のみ考える
plot2d(sound1)//最初に波形を表示
a=input("input 1 to continue")
if a==1 then
examine=sound1^2;//二乗とった波
chop=length(examine)/200;//「周り」として判断する幅.本来は.wav から情報を取るべき
judge=zeros(1,length(examine));//有音無音の判定をsound1と対応させて記録
for i=1:length(examine),
if mean(examine(max(i-chop/2,1):min(i+chop/2,length(examine))))>0.001//
then judge(1,i)=0.4;//見やすさのため0.4で
end
end
plot2d(judge);//有音無音示す
end
一応結果は
括弧みたいに括られてるのが有音と判定されたところ. |
chop, 閾値の変更でもっときれいに取れるかもしれない.
少なくともたったこれだけでちょっとしたグラフが描けたりするのはさすが scilab, というところか.
何箇所か,アルゴリズム以前の問題として,正書法,あるいはこんなコマンドもあるよ,
みたいな感じで「ここは better な書き方があるんだろうな」と思われるのはあるけど,
まあまずは手札の範囲から.
ハサミもプロが使うと化けるように,手札とも仲良くなっていきたいし,手札も増やしたいところ.
色々触っていこう.
No comments:
Post a Comment