0

オーディオストリームを返す非常に短い文(100文字未満)のgooglettsサービスを送信するサンプルを作成しようとしています。このストリームをファイルに保存しようとしていますが、次のファイルを書き込んだ後、Bufを開くと、実際のプレーヤーで開くことができますが、最初の文字(google ttsに送信された文の最初の文字)しか発声しません。ファイルの保存に問題がある可能性があります。私はコード内のオーディオを扱ったことがないので、見て、より良いコードを提案してください。

WebRequest request = WebRequest.Create(string.Format("http://translate.google.com/translate_tts?q={0}", Uri.EscapeUriString(textBox1.Text.Trim())));
            request.Method = "GET";

            try
            {
                WebResponse response = request.GetResponse();

                if (response != null && response.ContentType.Contains("audio"))
                {
                    Stream stream = response.GetResponseStream();

                    byte[] buffer = new byte[response.ContentLength];

                    stream.Read(buffer, 0, (int)response.ContentLength);

                    FileStream localStream = new FileStream("audio.mp3", FileMode.OpenOrCreate);

                    localStream.Write(buffer, 0, (int)response.ContentLength);

                    stream.Close();
                    localStream.Close();
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
4

4 に答える 4

2

応答ストリームからの読み取り中にループする必要があるかもしれません。

int read = 0;

while ( read < response.ContentLength )
{
    read += stream.Read(buffer, 0, ( response.ContentLength - read ) );
}
于 2011-03-10T11:36:25.007 に答える
1

代わりにWebClient.DownloadFileを使用してみてください。これは、Microsoftがファイル処理を処理する1行のメソッド呼び出しです。それが機能しない場合は、少なくともバイトバッファ処理を除外できます...

于 2011-03-10T11:39:59.993 に答える
1

response.ContentLengthに依存しないようにします。代わりに、StreamReader.ReadToEnd()を使用できます。

于 2011-03-10T11:49:36.097 に答える
0

これは私のために働きます:

WebClient wc = new WebClient();

// UserAgentヘッダーが追加されていない場合、üのような特殊文字は「不明な文字」と発音されますwc.Headers.Add(HttpRequestHeader.UserAgent、 "Mozilla / 4.0(互換; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0 .50727) ");

byte [] mp3Bytes = wc.DownloadData( "http://translate.google.com/translate_tts?tl=de&q=Hallo Welt!"); string fileOut = "audio.mp3"; FileStream fs = new FileStream(fileOut、FileMode.Create); fs.Write(mp3Bytes、0、(int)mp3Bytes.Length); fs.Close();

于 2011-03-22T17:44:32.330 に答える