Blog
Anonys > TimeLine

【自由な歌声合成システムなんだと思う】Sinsy 0.92をインストールしたい!【途中なう】

Nov/19/2021 21:56:56

こんばんは、鳴神裁4.1号です。

突然ですが、界隈よろしく作曲をしたいけど手元にあるのは「自由な」OSであり、かつソフトウェアも「自由な」ものだけで揃えたいということはございませんか?そのような経験はございませんか?

この記事では、Sinsyという歌声合成システムをマシンに設置する体験記を示します。

Modified BSDだそうです。

私の環境


このアノニマスブログで晒すのも誠に恥ずかしいことではございますが、私のOSはGNU/Linuxで、ディストリビューションはArchです。

すなわち公式パッケージマネージャはpacmanです。
また、私が最後に-Syuを実行したのは2021年11月18日18時28分11秒(日本時間)だってログられています。

これらも含めて参考なものであれば幸甚に存じます。

設置手順


まずは0.92版のソースコードをホームページから入手します。

そのファイルをtar zxf(BSDとか反GNUの方はgunzipしてtar xfしてください)し、同ディレクトリにあったREADMEを読みました。

「インストール方法はINSTALLをご覧ください。」

ということでINSTALLを確認しました。

HTSが云々書いてあったので、HTSエンジンのライブラリが必要なのだと思いました。

偶然にもArch GNU/LinuxにはAURパッケージが提供されているではございませんか。

(気がつけば設置されていた)

で、INSTALLのstep 2には./configure [options ...]という手順がありました。

私の環境の場合、渡すオプションとしては./configure --with-hts-engine-header-path=/usr/include/ --with-hts-engine-library-path=/usr/lib/だったのでした。
というのも、


$ pacman -Ql hts-engine
hts-engine /usr/
hts-engine /usr/bin/
hts-engine /usr/bin/hts_engine
hts-engine /usr/include/
hts-engine /usr/include/HTS_engine.h
hts-engine /usr/lib/
hts-engine /usr/lib/libHTSEngine.a
hts-engine /usr/share/
hts-engine /usr/share/licenses/
hts-engine /usr/share/licenses/hts-engine/
hts-engine /usr/share/licenses/hts-engine/COPYING


ということだったからです。

configが終わり、Makefileとかも生成され、いざstep 3: makeをしました。
するとなんということでしょう(誇張):


util/IWritableStream.h:167:78: error: ISO C++17 does not allow dynamic exception specifications
167 | inline IWritableStream& operator<<(IWritableStream& stream, long double buf) throw (StreamException)
| ^~~~~


が出てきたではありませんか。この同様なエラーが同様のコードにあるのです。シェルスクリプトに親しくても(ただしPOSIX規格ばかりなものに限る)makeに疎い私はMakefileのフラグをどういじろうか困ったのです。

さあどうしたことやら。このブログは次回に続くか、またはコメント欄に続きます。

ということで最後に、step 3のmakeを実行した際のログをおいておきましょう。


Making all in lib
make[1]: Entering directory '/path/to/sinsy-0.92/lib'
depbase=`echo Sinsy.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DPACKAGE_NAME=\"sinsy\" -DPACKAGE_TARNAME=\"sinsy\" -DPACKAGE_VERSION=\"0.92\" -DPACKAGE_STRING=\"sinsy\ 0.92\" -DPACKAGE_BUGREPORT=\"http://sinsy.sourceforge.net/\" -DPACKAGE_URL=\"\" -DPACKAGE=\"sinsy\" -DVERSION=\"0.92\" -DHAVE_LIBM=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DSIZEOF_CHAR=1 -DSIZEOF_UNSIGNED_CHAR=1 -DSIZEOF_SHORT=2 -DSIZEOF_UNSIGNED_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_UNSIGNED_INT=4 -DSIZEOF_LONG=8 -DSIZEOF_UNSIGNED_LONG=8 -DSIZEOF_LONG_LONG=8 -DSIZEOF_UNSIGNED_LONG_LONG=8 -DHAVE_VPRINTF=1 -DHAVE_SQRT=1 -DHAVE_STRCHR=1 -DHAVE_STRRCHR=1 -DHAVE_STRSTR=1 -I. -I ../include -I converter -I hts_engine_API -I japanese -I label -I score -I temporary -I util -I xml -I /usr/include/ -g -O2 -MT Sinsy.o -MD -MP -MF $depbase.Tpo -c -o Sinsy.o Sinsy.cpp &&\
mv -f $depbase.Tpo $depbase.Po
In file included from xml/XmlReader.h:50,
from Sinsy.cpp:47:
xml/XmlParser.h:62:66: error: ISO C++17 does not allow dynamic exception specifications
62 | XmlData* read(IReadableStream& stream, std::string& encoding) throw (StreamException);
| ^~~~~
In file included from util/InputFile.h:47,
from Sinsy.cpp:49:
util/IReadableStream.h:64:51: error: ISO C++17 does not allow dynamic exception specifications
64 | virtual size_t read(void* buffer, size_t byte) throw (StreamException) = 0;
| ^~~~~
util/IReadableStream.h:71:62: error: ISO C++17 does not allow dynamic exception specifications
71 | IReadableStream& fromStream(IReadableStream& stream, T& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:88:72: error: ISO C++17 does not allow dynamic exception specifications
88 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, char& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:96:81: error: ISO C++17 does not allow dynamic exception specifications
96 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, unsigned char& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:104:73: error: ISO C++17 does not allow dynamic exception specifications
104 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, INT16& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:112:74: error: ISO C++17 does not allow dynamic exception specifications
112 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, UINT16& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:120:73: error: ISO C++17 does not allow dynamic exception specifications
120 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, INT32& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:128:74: error: ISO C++17 does not allow dynamic exception specifications
128 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, UINT32& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:136:73: error: ISO C++17 does not allow dynamic exception specifications
136 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, INT64& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:144:74: error: ISO C++17 does not allow dynamic exception specifications
144 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, UINT64& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:152:73: error: ISO C++17 does not allow dynamic exception specifications
152 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, float& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:160:74: error: ISO C++17 does not allow dynamic exception specifications
160 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, double& buf) throw (StreamException)
| ^~~~~
util/IReadableStream.h:168:79: error: ISO C++17 does not allow dynamic exception specifications
168 | inline IReadableStream& operator&gt;&gt;(IReadableStream& stream, long double& buf) throw (StreamException)
| ^~~~~
In file included from Sinsy.cpp:49:
util/InputFile.h:65:43: error: ISO C++17 does not allow dynamic exception specifications
65 | size_t read(void* buffer, size_t size) throw (StreamException);
| ^~~~~
In file included from util/OutputFile.h:47,
from Sinsy.cpp:50:
util/IWritableStream.h:63:58: error: ISO C++17 does not allow dynamic exception specifications
63 | virtual size_t write(const void* buffer, size_t byte) throw (StreamException) = 0;
| ^~~~~
util/IWritableStream.h:87:71: error: ISO C++17 does not allow dynamic exception specifications
87 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, char buf) throw (StreamException)
| ^~~~~
util/IWritableStream.h:95:80: error: ISO C++17 does not allow dynamic exception specifications
95 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, unsigned char buf) throw (StreamException)
| ^~~~~
util/IWritableStream.h:103:72: error: ISO C++17 does not allow dynamic exception specifications
103 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, INT16 buf) throw (StreamException)
| ^~~~~
util/IWritableStream.h:111:73: error: ISO C++17 does not allow dynamic exception specifications
111 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, UINT16 buf) throw (StreamException)
| ^~~~~
util/IWritableStream.h:119:72: error: ISO C++17 does not allow dynamic exception specifications
119 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, INT32 buf) throw (StreamException)
| ^~~~~
util/IWritableStream.h:127:73: error: ISO C++17 does not allow dynamic exception specifications
127 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, UINT32 buf) throw (StreamException)
| ^~~~~
util/IWritableStream.h:135:72: error: ISO C++17 does not allow dynamic exception specifications
135 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, INT64 buf) throw (StreamException)
| ^~~~~
util/IWritableStream.h:143:73: error: ISO C++17 does not allow dynamic exception specifications
143 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, UINT64 buf) throw (StreamException)
| ^~~~~
util/IWritableStream.h:151:72: error: ISO C++17 does not allow dynamic exception specifications
151 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, float buf) throw (StreamException)
| ^~~~~
util/IWritableStream.h:159:73: error: ISO C++17 does not allow dynamic exception specifications
159 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, double buf) throw (StreamException)
| ^~~~~
util/IWritableStream.h:167:78: error: ISO C++17 does not allow dynamic exception specifications
167 | inline IWritableStream& operator&lt;&lt;(IWritableStream& stream, long double buf) throw (StreamException)
| ^~~~~
In file included from Sinsy.cpp:50:
util/OutputFile.h:65:50: error: ISO C++17 does not allow dynamic exception specifications
65 | size_t write(const void* buffer, size_t size) throw (StreamException);
| ^~~~~
In file included from Sinsy.cpp:51:
util/WritableStrStream.h:67:48: error: ISO C++17 does not allow dynamic exception specifications
67 | WritableStrStream& operator&lt;&lt;(const T& buf) throw (StreamException) {
| ^~~~~
make[1]: *** [Makefile:736: Sinsy.o] Error 1
make[1]: Leaving directory '/path/to/sinsy-0.92/lib'
make: *** [Makefile:415: all-recursive] Error 1


へるぷ。ちなgcc (GCC) 11.1.0

#歌声合成
#自由ソフトウェア運動すこ
Posted by 鳴神裁4.1号

See more articles of 鳴神裁4.1号

         


Comment
鳴神裁4.1号 2021-11-20 10:29;28
C++17の例外処理のなんだかんだ見つけた
ソースコードいじるならこれにしようかと

https://stackoverflow.com/q/47727108

鳴神裁4.1号 2021-11-20 21:08;37
"lib/"以下のファイルに対してsed 's/) throw (StreamException)/)/g'を適用してみようかと

鳴神裁4.1号 2021-11-20 21:15;46
ということでlibでfind . -type f | xargs sed -i 's/) throw (StreamException)/)/g'(すごくBashism)を適用した後にmakeしています。その結果次は


util/Configurations.cpp: In member function ‘bool sinsy::Configurations::read(const string&)’:
util/Configurations.cpp:132:63: error: cannot bind rvalue reference of type ‘std::__cxx11::basic_string&&’ to lvalue of type ‘std::string’ {aka ‘std::__cxx11::basic_string’}
132 | configs.insert(std::make_pair(key, value));
|


でぶつかったので次はC++17でも(というか実はC++11で既に)動くようなstd::make_pairでもやってみようと思ったのですが、やっぱ流石にもう少し高級な言語でやってみたほうがいいのかもしれません。いつのどのC++コンパイラをターゲットにしているのか。

鳴神裁4.1号 2021-11-20 21:25;30
自由ソフトウェア的にアリかどうかわからないのですが(GNUのウェブページのどこかで「ネット経由で人の鯖にあるソフトウェアを使うのはなぜ危険なのか」的な情報でした)鯖に対してMusicXMLを送信して歌唱させた方が楽なのではないでしょうか。

鳴神裁4.1号 2021-11-20 22:16;09
SourceForgeにmake_pair
の仕様が違うじゃねえかという声があったとは
しかもコンパイラごとにってどういうことだ

https://sourceforge.net/p/sinsy/discussion/general/thread/6119ca6a/

鳴神裁4.1号 2021-11-20 22:21;09
もしかして意図的に1.x以降のバージョンを非公開にしているとか。
どうりで0.xしかなかった

Comment
Name
Do not required items.
Text
Do not use HTML Tags.