Rでwaveファイルを扱うtuneR

tuneRというパッケージがあって、Rでwaveファイルを読んだり書いたりできる。再生とかもできる。

使い方

詳細な使い方はCRANからマニュアル落として読んでもらうとかするとして、簡単な使い方の説明。

読み込み、もしくはwave形式の作成

readWave()で.wavなファイルが読み込める。from, toに引数を与えることで読み込む範囲の指定なんかもできる。

mywave <- readWave("ushisan_koe.wav")

また、sine()関数でwave形式のデータを作成することもできる。周波数と量子化ビット数を与えるとその波長、量子化ビット数の純音を1秒生成する。また、bindを用いて結合もできる。以下tuneRのヘルプから転載。

Wobj <- bind(sine(440, bit=16), sine(220, bit))

この例だとA音(チューニングでよく使うラの音。楽器屋に売ってる音叉はだいたいこれ。)と、1オクターブ下のA音をそれぞれ1秒くっつけたデータになる。
データはplot()によりプロットすることもできる。範囲は普通のベクトルオブジェクトで一部分を取り出すときのように[]を使って指定してもいいし、extractWave(wavefile, from, to)を使って一部分だけのwaveオブジェクトを作ることもできる。ちなみに

mywav <- extractWave(Wobj)

などとしてfrom, toを指定しなかった場合、波形がプロットされる。その上でマウスをクリックすると抜き出し部分の指定ができる。実際にはextractWave()を繰り返して範囲を絞り込むのがいいんじゃないかと思う。

再生と記録

play()を使うとRでwaveファイルの再生ができる。正確にはプレイヤーを呼び出して鳴らすんだけど。

play(Wobj)

play()の2つ目の引数として再生に使用するプレイヤーへのパスを与えることができる。
指定しない場合、mplay32.exeというプレイヤーが使用される。これは古いタイプのメディアプレイヤーで、WindowsでXP以前のバージョンのものなら大抵入っている。

…そう、Vistaには入ってない。なのでVistaでは引数なしで再生できない。僕の環境だけかもしれないけど、新しいメディアプレイヤーのパスを指定しても再生できなかった。
XPだとC:\Windows\system32以下に入っているので、それをどこかパスの通ってる場所へコピーしたら動くと思う。あと良いのかダメなのかわからないのでリンクしないけど、海外のウェブサイトでダウンロードできる場所が結構ある。あと、初回実行時に設定を変更したがる。変更させないと毎回出てきて鬱陶しいので変更させてしまえばいいけど、Vistaの場合は管理者権限で実行しないと変更できないので注意。
また、再生できるだけじゃなくてwaveファイルとして保存もできる。

writeWave(Wobj, "mymelody.wav")

きっと頑張ったらちょっとした音楽が!!
Rで作曲とかワクワクしますね!!!!

ちなみに僕は頑張りません。誰か作って下さい。

ほかにできること

periodogram()関数でピリオドグラムというものが得られる。フーリエ変換の結果の絶対値を二乗したものらしいけどよくわかりません。まあとにかく周波数のスペクトルが出てくる。プロットするとそれっぽいものが。

spec <- periodogram(Wobj, normalize = TRUE, width = 1024, overlap = 512)

で得られたこのオブジェクトにFF()関数をつかうと基本周波数なんかが得られる。
あと他にもpastecsというパッケージと組み合わせて音階とそのエネルギーをプロットしたりとかそんなこともできるらしい。
まあともかくtuneRとpastecsパッケージをインストールした後でexample(tuneR)してみて下さい。
人に聞かれてなんとなく探したパッケージだけどなかなか面白かった。他にもseewaveとかsignalとかwaveを扱えるような雰囲気のパッケージはいくつかあるっぽい。