皆さん、こんにちは!
TTS を使用して名前の WAV ファイルを作成する必要があるプロジェクトに取り組んでいます。
MS-SAPI 5.1 SDK を Windows Server 2003 にインストールし、C# を使用して TTS プログラムを作成しています。デフォルトの Microsoft Sam の声とは別に、NeoSpeech TTS からの声がサーバーにインストールされています。
私が抱えている問題は、プログラムが複数の作業 WAV ファイルを生成しないことです。
具体的には、プログラムに 4 つの名前を送信すると、プログラムは 4 つの WAV ファイルを作成します。ただし、名のみが正しく変換されます。ファイル サイズは 1 kb を超えており、ファイルはメディア プレーヤーでも再生されます。
他の 3 つのファイルが作成されますが、サイズは 1 kb で、どのメディア プレーヤーでも機能しません。
私は C# と MS-SAPI の両方に慣れていませんが、コードを作成するのに十分な仕事をしたと思います。私はこれを理解しようと何日も費やしましたが、今はエネルギーがありません.
この問題に関する洞察は大歓迎です。御時間ありがとうございます。
これが私のコードです:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using SpeechLib;
using System.Threading;
namespace TTS_Text_To_Wav
{
class Gender
{
public static String MALE = "Male";
public static String FEMALE = "Female";
}
class Languages
{
public static String ENGLISH = "409;9";
public static String SPANISH = "40a";
}
class Vendor
{
public static String VOICEWARE = "Voiceware";
public static String MICROSOFT = "Microsoft";
}
class SampleTTS
{
static void Main(string[] args)
{
SampleTTS processor = null;
try
{
processor = new SampleTTS();
// get unprocessed items
ArrayList unProcessedItems = new ArrayList();
unProcessedItems.Add("Kate");
unProcessedItems.Add("Sam");
unProcessedItems.Add("Paul");
unProcessedItems.Add("Violeta");
if (unProcessedItems != null)
{
foreach (string record in unProcessedItems)
{
// convert text to wav
processor.ConvertStringToSpeechWav(record, "c:/temp/" + record + ".wav", Vendor.VOICEWARE, Gender.MALE, Languages.ENGLISH);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
void ConvertStringToSpeechWav(String textToConvert, String pathToCreateWavFile, String vendor, String gender, String language)
{
SpVoice voice = null;
SpFileStream spFileStream = null;
try
{
spFileStream = new SpFileStream();
voice = new SpVoice();
spFileStream.Format.Type = SpeechAudioFormatType.SAFT8kHz16BitMono;
spFileStream.Open(pathToCreateWavFile, SpeechStreamFileMode.SSFMCreateForWrite, false);
voice.Voice = voice.GetVoices("Vendor=" + vendor + ";Gender=" + gender, "Language=" + language).Item(0);
voice.AudioOutputStream = spFileStream;
voice.Speak(textToConvert, SpeechVoiceSpeakFlags.SVSFlagsAsync | SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);
voice.WaitUntilDone(Timeout.Infinite);
}
catch (Exception e)
{
throw new Exception("Error occured in ConvertStringToSpeechWav()\n" + e.Message);
}
finally
{
if (spFileStream != null)
{
spFileStream.Close();
}
}
}
}
}
編集:
私はいくつかの新しい行動に気づいたようです。このコードは、システム上の Microsoft 音声に対して正常に機能します。この問題があると思われるのは、NeoSpeech の音声のみです。
それは私のコードが正しく、声に何か問題があるということですか? 一つには、お客様から声をいただいたので、どうしようもありません。第二に、これらはプロダクション対応の声です。私は彼らが十分にテストされていると確信しています。
私はまだ、私が書いたコードに何か問題があると信じがちです。
他に利用可能な提案はありますか?私はここで本当の修正をしています。助けていただければ幸いです。