投稿

9月, 2017の投稿を表示しています

MATLAB版WORLD を GNU Octave で使う

イメージ
音声分析合成システム  WORLD  を GNU Octave 上で動かしてみる。 WORLDにはC++版とMATLAB版がある。ふと思い立って試作するには、C++ よりも MATLAB のほうがはるかにラクだ。しかし MATLAB は高価なので、個人で手を出すのは難しい。そこで MATLAB 互換のオープンソースソフトウェア Octave を使うことにした。 この記事では MATLAB版WORLD を Octave で動かすときの注意点と、WORLD で声をこねくりまわして遊ぶためのメモを書き連ねていく。 注 : この記事のとおりにOctaveで動作させると、 C++版や本物のMATLABで実行したときと結果が一致しない (原因はおそらくビルトイン関数の結果が微妙に異なるため)。一応それらしい結果になるし、単に「動いたら面白いな」という程度なので、ここでは問題ないと考えて割り切っている。正しい結果が必要なときは Julia  の  WORLD.jl パッケージ  を利用したほうがよいとおもう。 WORLD の使い方は、おもに森勢先生の公演スライドとPDF資料をベースにしている(URLを記事の最後に載せてある)。とてもわかりやすい資料なので、目を通しておくべし。 環境 Windows 10 (x64) GNU Octave  4.2.1 WORLD  v0.2.1_4 (Matlab) WORLD を使う準備 Matlab版WORLD  のZIPファイルをダウンロードして解凍しておく。 基本的に Octave は MATLAB 互換なので、普通はこのまま動作できる。 ところが、Octave には実装されていないMATLABの関数が存在する。 今回使った WORLD v0.2.1_4 (Matlab) で使われている rng関数 と interp1q関数 は、現時点では Octave に実装されていない。 というわけで、埋めあわせ用の関数を用意した。 rng.m function rng(x) randn('seed', x) rand('seed', x) end interp1q.m function yi = interp1q(x, y, xi)