STRAIGHTメモ その1:導入

未来の自分用.
プログラミングとか全然詳しくないので,質問には多分答えられないし,
ありえないことしてるかも.
ありえないことをしていたら,教えてくださると嬉しいです.

開発環境

VC++
http://www.aspl.is.ritsumei.ac.jp/morise/straightlib/

上記のアドレスに書いてあるのは,VC++ 2010 Expressですが,
この後説明で使うのは,VC++ 2008 Express.
説明と同じものを使いたい場合は,2010じゃなくて以下の2008をインストール.
http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/

STRAIGHTとは?

http://www.aspl.is.ritsumei.ac.jp/morise/straightlib/より引用

和歌山大学の河原英紀教授が1997年に生み出した音声分析変換合成方式です.

音声の分析合成が可能なライブラリですね.
STRAIGHTを用いた音声合成器の歌唱.
【STRAIGHTシンセ】けんか別れ【改めv.Connectデモ】 by HAL@shurabaP 音楽/動画 - ニコニコ動画

プロジェクトを作る

VC++を立ち上げる

メニューバーの[ファイル]→[新規作成]→[プロジェクト]

CLR→空のCLRプロジェクト
プロジェクト名は何でもいい.ここでは[日付_straight]とした.([3_10_straight])
場所はわかるところに.

メニューバーの[表示]→[ソリューション エクスプローラ]


ソリューション エクスプローラの[ソースファイル]を右クリック
[追加]→[新しい項目]

コード→C++ファイル.ファイル名は何でもいい.ここでは日付(3_10)とした.

プロジェクトの設定

メニューバーの[プロジェクト]→[3_10_straight(プロジェクト名)のプロパティ]

[構成プロパティ]→[全般]→[共通言語ランタイムサポート]を
[共通言語ランタイムサポートを使用しない]に変更

[デバッグ]→[コマンド引数]に 入力wavファイル(半角スペース)出力wavファイルを指定する.
ここでは,a.wavファイルを予め用意するとして,「a.wav output.wav」と記入した.

[C/C++]→[全般]→[追加インクルードディレクトリ]に"straight"フォルダがある場所までのアドレスを記載.
(**\straightLib_bin-1.0.3\straight\straightLibとか)

"straight"フォルダがあるフォルダはこんなところ.

[コード生成]→[ランタイム ライブラリ]をマルチスレッド(/MT)に.

[リンカ]→[全般]→[追加ライブラリディレクトリ]に"straightLib.lib"があるフォルダまでのパス
(**\straightLib_bin-1.0.3\lib)

"straightLib.lib"があるフォルダはこんなところ.

[入力]→[追加の依存ファイル]に,"straightLib.lib straight.lib sp.lib spAudio.lib spBase.lib"と記入.

お疲れ様.
ここまで出来たら,OKを押す.

メニューバーの[ビルド]→[ソリューションのビルド]で正常終了したらOK.

もうちょっと準備

プロジェクトのフォルダ(3_10_straight)に行く.

プロジェクトのフォルダ(3_10_straight)の中の[Debug]フォルダに,
STRAIGHTの中にあった[plugins]フォルダを移動させる.

[plugins]フォルダの中身はこんなの.

プロジェクトのフォルダのさらに奥にある,ソースファイル(3_10.cpp)がある場所に,[a.wav]を用意する.
[a.wav]は適当な音源の「あ.wav」を用意し,名前を変えるだけでいい.

サンプルプログラムのソースを写す

STRAIGHTライブラリには,サンプルプログラムをつけてくださっているので,
とりあえずそれを動かしてみる.

Straightのフォルダ内にある[example]フォルダを探す.

一番単純な,[simple.c]をダブルクリックで起動.

色々書いてあるけど,全部コピーして,[3_10.cpp]に貼りつける.

メニューバーの[デバッグ]→[デバッグなしで開始]をする.

黒い画面が出て,しばらく出ると処理が終わる.

[3_10.cpp]や[a.wav]があるフォルダに,[output.wav]が出来てると思う.

simple.cはこれで終わり.

ちょっとだけ書き換えて遊ぶ

ソース下部

if (straightSynthCompute(straight, source, specgram, synth, 1.0, 1.0, 1.0) == ST_TRUE) {

となっている部分を

if (straightSynthCompute(straight, source, specgram, synth, 2.0, 1.0, 1.0) == ST_TRUE) {

などに変えてみる.
ピッチが変わった.

その後ろにある1.0もそれぞれ,2.0や1.5などに変えてみると面白いかも.
あと,[simple.c]だけじゃなく,他のexampleもひと通り試すと良い.
サンプルソースによっては,二つの入力wavファイルが必要なものもある(sampleMorphing.cなど)ので
その辺りはプログラムによって,ちゃんとコマンドライン引数とか変えよう.

STRAIGHTメモ:その2 音声関係の用語 - 雑多にしっとり