Wineでもゆっくりしていってね!!!
さて、巷でゆっくりを見かけるようになって久しいですが、Windowsでないと使えないというのが寂しいところ。
そこでLinuxからでも使える方法を考えてみました。
まずはWineで実行してみるわけですが、VB版/.net版ともにまともに動かない。
SofTalkは音声の合成にAquesTalkというライブラリを使っているので、
さっそく公式(http://www.a-quest.com/download/index.html)を見てみると
タダなのはWindows用だけのようで・・・
サンプルのAqTkAppも動かないし・・・
どうもSofTalk本体と同じく、サウンドかGDIでこけているようだ。
そこでFedora 12の公式のリポジトリに入っているWindows用クロスコンパイラを使ってライブラリを直接たたいてみる。
まずはgccをインストール:
# yum install mingw32-gcc
コードを書く:
#include <stdio.h> #include <stdlib.h> #include "AquesTalk.h" int main(int argc,char **argv){ // parse arguments int speed=100; if(argc!=3 && argc!=4){ printf("usage:\n"); printf(" aqwrap <input-file(SJIS)> <output-file(WAV)> <speed>?\n"); return -1; } if(argc==4) speed=atoi(argv[3]); // load text unsigned char *text; FILE *fi=fopen(argv[1],"rb"); if(fi==NULL){ fprintf(stderr,"couldn't open input file %s\n",argv[1]); return -2; } fseek(fi,0,SEEK_END); int fsize=ftell(fi); text=malloc(fsize); fseek(fi,0,SEEK_SET); fread(text,fsize,1,fi); fclose(fi); // feed the text to AquesTalk int size; unsigned char *wav=AquesTalk_Synthe(text,speed,&size); free(text); if(wav==NULL){ fprintf(stderr,"AquesTalk_Synthe:error:%d\n",size); return -1; } // write out to a file FILE *fo=fopen(argv[2],"wb"); if(fo==NULL){ fprintf(stderr,"couldn't open output file %s\n",argv[2]); AquesTalk_FreeWave(wav); return -2; } fwrite(wav,1,size,fo); AquesTalk_FreeWave(wav); fclose(fo); return 0; }
ファイルを適当に集めてコンパイル:
$ ls AquesTalk.h AquesTalk.dll AquesTalk.lib main.c $ i686-pc-mingw32-gcc main.c AquesTalk.lib -o aqwrap.exe
使ってみる:
$ echo "わいんでも、ゆっくりしていってね。"|nkf -s > test $ wine aqwrap.exe test x.wav 80
仕様:
- 入力ファイルは「音声記号列」(仕様書: http://www.a-quest.com/download/manual/siyo_onseikigou.pdf)のみ受け付ける
- 声はDLLを入れ替えることで変更する
- あまり長いファイルはだめかも?
バイナリは要望があれば公開します。