音楽とかソフトとか

いつもの弊ブログとは違う傾向のことを書き記します。

UTAUの合成波形ビューアを開発中ですが、F0抽出法を試行錯誤していたところpYINというものがあると教えて頂きました。ビューアへの導入は今の所未定ですが、ひとますmsys2でコンパイルしてコマンドラインで駆動する所までいきましたので、手元の環境でやったことをメモ書きします。


libsndfileのインストール
libsndfile-1.0.26.tar.gzをダウンロードして展開。
cd libsndfile-1.0.26
./configure
make
make install

これで/usr/local/include/や/usr/local/lib/にライブラリ一式がインストールされる


boostのインストール
msys2のpacmanにboostがあったので、mingw32/mingw-w64-i686-boost 1.60.0-1 をpacmanコマンドでインストール。


vamp-plugin(のvamp-simple-host.exe)のコンパイル
vamp-plugin-sdk-2.6.tar.gzをダウンロードして展開。
cd vamp-plugin-sdk-2.6
export SNDFILE_CFLAGS=-I/usr/local/include
export SNDFILE_LIBS="-L/usr/local/lib -lsndfile -static"
./configure
make host


pYINをコンパイル
pyin-v1.1.tar.gzをダウンロードして展開。
cd pyin-v1.1
cp Makefile.mingw32 Makefile
vim Makefile

(変更前) TOOLPREFIX ?= i586-mingw32msvc-
(変更後) TOOLPREFIX ?=

(変更前) CXXFLAGS += $(CFLAGS) -I../include -I../boost_1_53_0
(変更後) CXXFLAGS += $(CFLAGS) -I../include -I/mingw32/usr/include -I../vamp-plugin-sdk-2.6

(変更前) PLUGIN_LDFLAGS := $(LDFLAGS) -static -shared -L../lib -lvamp-sdk -Wl,-Bsymbolic -static-libgcc -Wl,--retain-symbols-file=vamp-plugin.list -fno-exceptions $(shell $(CXX) -print-file-name=libstdc++.a)
(変更後) PLUGIN_LDFLAGS := $(LDFLAGS) -static -shared -L../lib -L../vamp-plugin-sdk-2.6 -L/mingw32/lib/ -lvamp-sdk -Wl,-Bsymbolic -static-libgcc -Wl,--retain-symbols-file=vamp-plugin.list -fno-exceptions $(shell $(CXX) -print-file-name=libstdc++.a)

vim Makefile.inc

(変更前) OBJECTS := $(SOURCES:.cpp=.o)
(変更後) OBJECTS := $(SOURCES:.cpp=.o) \
../vamp-plugin-sdk-2.6/src/vamp-sdk/acsymbols.o \
../vamp-plugin-sdk-2.6/src/vamp-sdk/FFT.o \
../vamp-plugin-sdk-2.6/src/vamp-sdk/PluginAdapter.o \
../vamp-plugin-sdk-2.6/src/vamp-sdk/RealTime.o
TEST_LDFLAGS := -L/mingw32/lib \
-lboost_atomic-mt \
-lboost_chrono-mt \
-lboost_container-mt \
-lboost_context-mt \
-lboost_coroutine-mt \
-lboost_date_time-mt \
-lboost_exception-mt \
-lboost_filesystem-mt \
-lboost_graph-mt \
-lboost_iostreams-mt \
-lboost_locale-mt \
-lboost_log_setup-mt \
-lboost_log-mt \
-lboost_math_c99f-mt \
-lboost_math_c99l-mt \
-lboost_math_c99-mt \
-lboost_math_tr1f-mt \
-lboost_math_tr1l-mt \
-lboost_math_tr1-mt \
-lboost_prg_exec_monitor-mt \
-lboost_program_options-mt \
-lboost_python3-mt \
-lboost_python-mt \
-lboost_random-mt \
-lboost_regex-mt \
-lboost_serialization-mt \
-lboost_signals-mt \
-lboost_system-mt \
-lboost_test_exec_monitor-mt \
-lboost_thread-mt \
-lboost_timer-mt \
-lboost_type_erasure-mt \
-lboost_unit_test_framework-mt \
-lboost_wave-mt \
-lboost_wserialization-mt

(※ TEST_LDFLAGSの設定は本来上記のライブラリ全部をリンクさせなくて良いはずですが、調べるのが面倒だったのでboostのライブラリを全部突っ込みました)

make


pYINを使ってみる

cd ../vamp-plugin-sdk-2.6/host/
./vamp-simple-host.exe -pし、表示されたフォルダにpyin.dllをコピーする。

temp.wavを用意し、以下のコマンドでF0抽出してみる。
./vamp-simple-host.exe pyin:pyin temp.wav
./vamp-simple-host.exe pyin:yin temp.wav
./vamp-simple-host.exe pyin:localcandidatepyin temp.wav
それぞれ標準出力にF0抽出結果らしき数値データが出ます。
./vamp-simple-host.exe -lすると出力結果の概説らしいものが出ます(あまりよく精査していませんが…)。



現状はここまでです。もし導入するなら単体のexeで動くような形になって欲しいかなと思っています。

スポンサーサイト

PageTop