0

私は C# が初めてで、自分のコードの問題を見つけることができないようです。Google 翻訳のテキスト読み上げサイトからオーディオ ファイルを取得して再生しようとしていますが、エラーが発生し続けます。

An unhandled exception of type 'System.InvalidOperationException' occurred in System.dll
Additional information: The wave header is corrupt.

誰かが私のコードの問題を教えてもらえますか? メソッドは次のとおりです。

    public static void PlayWord(string Query)
    {
        string GoogleTranslateURL = "http://translate.google.com/translate_tts?tl=en";
        System.Net.WebRequest req = System.Net.WebRequest.Create(GoogleTranslateURL + (string.IsNullOrEmpty(Query) ? "" : "&q=" + Query));

        using (var ms = new MemoryStream())
        {
            using (Stream webStream = req.GetResponse().GetResponseStream())
            {
                var buffer = new byte[4096];
                int read;
                while (webStream != null && (read = webStream.Read(buffer, 0, buffer.Length)) > 0)
                    ms.Write(buffer, 0, read);
            }
            using (SoundPlayer player = new SoundPlayer(ms))
            {
                if (ms.CanSeek) ms.Seek(0, System.IO.SeekOrigin.Begin);
                player.Stream = null;
                player.Stream = ms;
                player.Play();
            }
        }
    }
4

3 に答える 3

0
        string GoogleTranslateURL = @"http://translate.google.com/translate_tts?tl=en&q=pop";
        System.Net.WebRequest req = System.Net.WebRequest.Create(GoogleTranslateURL);

        string a = req.GetResponse().ContentType;


        using (Stream webStream = req.GetResponse().GetResponseStream())
        {
            FileStream stream = new FileStream(@"C:\Projects\EverydayProject\pop.wav", FileMode.Create, System.Security.AccessControl.FileSystemRights.FullControl, FileShare.ReadWrite, 100, FileOptions.None);

            webStream.CopyTo(stream);
            stream.Close();
            webStream.Close();
        }


        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = @"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe";
        startInfo.Arguments = @"C:\Projects\EverydayProject\pop.wav";
        var process = Process.Start(startInfo);

        if(!process.HasExited)
        {
            process.Refresh();
            Thread.Sleep(1000);
        }

        process.CloseMainWindow();
        process.Close();

        if (File.Exists(@"C:\Projects\EverydayProject\pop.wav"))
            File.Delete(@"C:\Projects\EverydayProject\pop.wav");

問題は HTTP リクエストにはありません! これは私にとってはうまくいっています。問題はSoundPlayerクラスにあります。SoundPlayer の操作方法を確認してください。

于 2014-10-05T00:32:18.750 に答える
0

SoundPlayerWAV ファイルのみを再生できます。ここで msdn は次のように述べています。

SoundPlayer クラスは、.wav ファイルを読み込んで再生するための単純なインターフェイスを提供します。

ただし、Google は mp3 ファイルで応答するため、代わりにMediaPlayerを試してください。

var mp = new MediaPlayer();
mp.Open(new Uri(GoogleTranslateURL + (string.IsNullOrEmpty(Query) ? "" : "&q=" + Query)));
mp.Play();
于 2014-10-05T01:52:46.697 に答える
-1

試す:

Player.Stream.Position = 0;

于 2014-10-05T01:32:40.583 に答える