このエントリーをはてなブックマークに追加

ここで紹介したスクリプトは

PythonスクリプトをWindows実行形式(Exe)にするでExeファイルにして

オープンソースソフト akJ Audiotoolsの中のフォルダー以下で実際に使用しています。

akj_audiotools*\plugins\snack_rcp_*\snackexecuter


サンプル

The Snack Sound Toolkitのインストールが必要です。

注意

どれも、前後のサンプルが抜けます。これはFFTの影響?


スペクトログラムデーターを取得

返って来るスペクトログラムの数値はデジベルをintに変換して、しかも容量を減らすため前の値の差分になっています。

高さの最大値はは基本的にもとのサンプリングレートの半分になるようです。(22khzなら11khz)

■引数

path Wave音声ファイルのパス

height サンプル数あたりのスペクトログラム数です。

persample スキップするサンプル数

startvalue 開始位置

endvalue  終了位置

#! /usr/bin/env python

from Tkinter import *
from tkSnack import *
root = Tkinter.Tk()

initializeSnack(root);


import sys;

path=sys.argv[1];
height=int(sys.argv[2])*2;
persample=int(sys.argv[3]);
startValue=int(sys.argv[4]);
endValue=int(sys.argv[5]);

#print(path);
mysound=Sound(load=path);

mysound.convert(encoding='Lin16',channels='1');

#resultList=mysound.dBPowerSpectrum(fftlength='64',windowlength='64',start=startValue,end=endValue);
#resultList=mysound.dBPowerSpectrum(fftlength='64',windowlength='64',start=startValue);

v=startValue;
filelength=mysound.length();

if endValue==0:
	endValue=filelength;


#print filelength;
#print v;
#print height;
#print "why";
#v=0;
#persample=200;
prevValue=0;
while v < filelength :
	#print "ok";
	resultList=mysound.dBPowerSpectrum(fftlength=height,windowlength=height,start=v);
	for i in resultList:
		intV=int(i);
		print prevValue-intV;
		prevValue=intV;
	v=v+persample;
	#print v;
	if v+height>=endValue:
		break;

ピッチ情報を取得

最大のpitchは400としています。最小は10(60とかにした方がいい)

引数は、一つめはファイル、2つめは開始位置(sample)、3つめは終了位置(sample;0だと最後まで)

必ず引数3つつけます。


以下のようなデーターが出力されます。カッコとカンマ区切りで返ってきます一つめのRowがピッチ(382.4168701171875)です。

この時間軸ですが、最初が0.0075秒後のピッチです。あとは0.01ごとにデーターが返ってきます。

音声の長さどおりにデーターは返ってきません。多少欠けます。(特に最小ピッチを小さくすると)

(382.4168701171875, 1.0, 0.0, 0.94537132978439331)
(382.38626098632812, 1.0, 6141.89990234375, 0.97832769155502319)
(379.42950439453125, 1.0, 6767.0283203125, 0.97941821813583374)

注意

メモリを非常に消費します。

■引数

path Wave音声ファイルのパス

#! /usr/bin/env python

from Tkinter import *
from tkSnack import *
root = Tkinter.Tk()

initializeSnack(root);
import sys;
path=sys.argv[1];

mysound=Sound(load=path);
mysound.convert(encoding='Lin16',channels='1');

resultList=mysound.pitch(method='ESPS',minpitch=10,maxpitch=400);


for i in resultList:
	print i;

フォルマント情報を取得

1秒間に100回のサンプルを取得するようになっています。

ただし、返って来る値の数は不明、微妙に少なかったりします。

注意

メモリを非常に消費します。

だいたい、元のサイズファイルサイズの1.5倍 + 分数*20MB近く必要になります。

もし50MBの5分のファイルですと、約180MB必要になります。

■引数

path Wave音声ファイルのパス

#! /usr/bin/env python

from Tkinter import *
from tkSnack import *
root = Tkinter.Tk();

initializeSnack(root);


import sys;

path=sys.argv[1];

mysound=Sound(load=path);
#mysound.convert(encoding='Lin16',channels='1');

resultList=mysound.formant(framelength='0.01');


for i in resultList:
	print i;

サイト
Android情報サイト | Youtube サイト | Java サイト | Google 活用サイト | Google 情報サイト | 無料ソフト活用 サイト |写真活用のPicasa2 サイト |新サイト

Blog
Android ブログ


Copyright (c)2004 - 2012 Aki. All rights reserved.