Search code examples
c#mp3audio-streamingwebresponse

C# - Saving Audio File using Google TTS Service


I am trying to build a sample which send a very short sentence (less than 100 char) google tts service which returns a audio stream. I am trying to save this stream into a file but when open it, Buf after writing following file, i am able to open it in real player but it only utters first letter (first letter of the sentence sent to google tts). There might be a problem in saving file, I never dealt with Audio in Code so please take a look and suggest some better code.

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);
            }

Solution

  • Maybe you need to loop while reading from the response stream:

    int read = 0;
    
    while ( read < response.ContentLength )
    {
        read += stream.Read(buffer, 0, ( response.ContentLength - read ) );
    }