ファイルサイズの取得

以前、説明したファイル読み込みのクラスであるSndWaveは、上位クラスのSndFIOを継承しています。であるからSndFIOのメソッドのGetDataFrames()でファイルサイズを取得できます。使い方は

file = SndWave("loop.wav", READ)
size = file.GetDataFrames()

こんな感じでファイルサイズを取得できます。使い道で考えられるのはサウンドデータを読み込むSndTableの配列のサイズ。

table = SndTable(size, file)

ここでそのSndTableをオシレータに流すとルーピング・オシレータになる。オシレータの周波数はファイルのサンプリングレートをファイルサイズで割って求められるので、正確なファイルのループ再生になる。

sampRate = file.GetSr() #サンプリングレートを取得
osc = Oscil(table, sampRate / size, 5000)

再生速度を2倍にする時は以下のように。

osc = Oscil(table, sampRate / size * 2, 5000)