next up previous
Next: 2 MitsuiWorld の改良 Up: メモ Previous: メモ

1 WAVE ファイルを読む

テスト用の楽器の WAVE ファイルは、 例えば 『楽器の音のWAVEファイル』 で入手して下さい。

WAVE ファイルの内部構造を詳しく知る必要はないと思うが、 参考までに WAVE ファイルを読み取るプログラム readwave.c を紹介しておく。 これは WAVE ファイルを読んで、 内容をテキスト・ファイルにするプログラムである。

コンパイルは簡単、実行も簡単
oyabun% ls
Makefile      piano.wav     readwave.c    writewave.c
oyabun% gcc -o readwave readwave.c 
oyabun% ./readwave piano.wav > piano.txt

こうして出来た piano.txt は、 catless, emacs などで読むことができる。

40000行から41000行までを切り出して、gnuplot で表示
oyabun% gawk '(NR>=40000 && NR< 41000) {print NR,$1,$2}' piano.txt > piano2.txt
oyabun% gnuplot
gnuplot> plot "piano2.txt" with lines

\includegraphics[width=0.6\textwidth]{readwave/piano2.eps}

piano.txt
# RIFF データのサイズ=1234584
# fmt データのサイズ=18
#  01 00 02 00 44 ac 00 00 10 b1 02 00 04 00 10 00
#  00 00
# 非圧縮PCMです。
# ステレオです。
# サンプリング・レート(標本化周波数)=44100
# 1秒当りのバイト数=176400
# ブロック境界=4
# ビット数/サンプル=16
# 拡張情報サイズ=0
# PAD チャンクがあります。# PAD チャンクのサイズ=4042
#  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 (中略)
#  00 00 00 00 00 00 00 00 00 00
# fact チャンクがあります。# fact データのサイズ=4
#  49 af 04 00
# data データのサイズ=1228068
#original file: piano.wav
#number of channels: 2
#sampling rate: 44100
#number of bits (per sample): 16
#number of samples: 307017
64 64
62 62
  (中略 --- 結構長い)
-114 -63
-111 -59
-112 -61
-109 -53
-108 -51

以上、素朴に音声データ (音圧の時間変化) をグラフに表示できた。

Java で Hello World! サウンド編 にある HelloWorldSound.java, HelloWorldRecorder.java を参考にして、Java で実現したい。
while (nBytesRead != -1) {
        // オーディオストリームからデータを読み込みます
        nBytesRead = audioInputStream.read(abData, 0, abData.length);
        if (nBytesRead >= 0) {
          // オーディオデータをミキサーに書き込みます
          int nBytesWritten = line.write(abData, 0, nBytesRead);
        }
      }
abDataByte の配列である。 これを適当に数値に変換すれば良いであろう。


next up previous
Next: 2 MitsuiWorld の改良 Up: メモ Previous: メモ
Masashi Katsurada
平成20年2月11日