2011-01-31 4 views
0

これは私が持っているコードです:話す前にどのように私はフラット(TTS)を一時停止できますか?

fliteEngine = [[FliteTTS alloc] init]; 

    [fliteEngine setVoice:@"cmu_us_awb"]; 
    [fliteEngine setPitch:120.0 variance:50.0 speed:1.2]; 
    [fliteEngine speakText:fullScript]; 

そしてfullScriptは、私はそれを言いたいとNSStringのです。

しかし、iPod Touchの第1世代では、ロードに時間がかかり、最大3分かかるので、私はそれが何を言おうとしているのかをロードしたいと思っています。

誰でもこの方法を知っていますか?その最後の行であるので、[fliteEngine speakText:fullScript];はすべての処理時間を要し、それを読み出すものと思われます。

+0

初めて読み込まれると非常に遅く動作します。あなたが見つけた解決策はありますか? – Wasim

+0

ところで、これらの音声設定はひどいので、自分でより良いものを選ぶ方法はわかりません。音声、ピッチ、分散、スピードの自然な組み合わせを見つけることができましたか? –

答えて

1

文字列全体を一度に読み込む必要はありません。あなたは速く読み込むことができる小さな部分に分割し、古いものがすでに発音されるたびに新しいチャンクをロードすることができます。 私はFliteTTSに慣れていませんが、おそらくデータを前処理する方法があります。はいの場合は、テキストを小さな塊に分割することもできますし、現在の譜表が発音されている間に別のスレッドで次の頁をプリロードすることもできます。

0

fliteライブラリは、バックグラウンドスレッドの波形ファイルに保存できます。次に、ファイルの準備が整った後でサウンドを再生します。

1

ソリューションはfliteTTS.mファイルで..

を発見し、私は新しい「startTalking」ビットに次のコードをカットし、その後、[audioPlayer prepareToPlay];をコメント解除しました。

-(void)startTalking { 


    [audioPlayer play]; 
    // Remove file 
    [[NSFileManager defaultManager] removeItemAtPath:tempFilePath error:nil]; 
    delete_wave(sound); 
} 

は、私は最初speakTextを呼び出すが、その後[fliteEngine startTalking];を呼び出し、それがそのように動作します。

関連する問題