C#: цикл преобразования текста в речь Google

Я создаю простую программу, которая берет строку, отправляет ее на сервер преобразования текста в речь Google и загружает преобразованный текст в файл mp3/wav на компьютер. У меня есть код ниже, но он работает только до 100 символов (ограничение Google). Как я могу сделать цикл, чтобы разрезать строку на 100 частей символов, а затем сохранить ее в одном файле mp3/wav на компьютере? Я знаю, что это возможно с помощью javascript и actionscript (как я их видел), но как я могу сделать это на С#?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Threading;

namespace TestCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            WebClient web = new WebClient();

            web.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 9.0; Windows;)");

            string encstr = string.Empty;

            string filename = "tts.mp3"; //could also be tts.wav

            string s = "This string cannot be more than 100 characters.";

            encstr = Uri.EscapeDataString(s);

            Console.WriteLine(encstr);

            web.DownloadFile("http://translate.google.com/translate_tts?tl=en&q=" + encstr, ".\\" + filename);
        }
    }
}

person Syam    schedule 14.07.2011    source источник
comment
Во-первых, проверьте TOS Google; Я не уверен, что такой цикл будет разрешен, или такой запрос вообще. Кроме того, каждое слово влияет на слова до или после него; если вы разделите строку каким-либо образом, кроме как после точки (или вопросительного знака и т. д.), вы можете изменить ее звучание.   -  person configurator    schedule 14.07.2011
comment
Почему бы не использовать настоящий движок TTS? См. Microsoft Speech API codeproject.com/KB/audio-video/TTSinVBpackage.aspx< /а>   -  person configurator    schedule 14.07.2011
comment
@configurator Я понимаю проблему законности, но я видел, как это делается в сценарии действий, например здесь: http://peteshand.net/blog/index.php/actionscript-text-to-speech/ Я хотел знать, можно ли это сделать на C#. Microsoft Speech API звучит неестественно/хорошо. Их API-интерфейс Bing Speech предлагает что-то похожее на Google, но снова ограничено 500 символами, поэтому я снова сталкиваюсь с той же проблемой... :(   -  person Syam    schedule 14.07.2011


Ответы (1)


Это не прямой ответ, но я думаю, что разделение не очень хорошо, потому что в TTS есть интонация слова, а также интонация предложения. Вместо этого я рекомендую использовать SpeechSynthesizer Class с бесплатным движком TTS. . Однако я не знаю, какой движок TTS является бесплатным и где он находится. Если найду добро, отпишусь.


ОБНОВЛЕНО

Файлы MP3 просто объединяются без проблем из этот вопрос.

хорошо, прежде чем я перейду к объединению mp3-файлов, как будет выглядеть цикл while, чтобы сначала получить эти mp3-файлы на компьютере? если я пройду свой цикл, файл tts.mp3 будет перезаписан, и у меня останется только последняя полученная строка из 100 символов.

Вы можете объединить два файла, как показано ниже. Наконец, fs1 получит весь контент.

        string tts1 = "tts1.mp3";
        string tts2 = "tts2.mp3";
        FileStream fs1 = null;
        FileStream fs2 = null;
        try
        {
            fs1 = File.Open(tts1, FileMode.Append);
            fs2 = File.Open(tts2, FileMode.Open);
            byte[] fs2Content = new byte[fs2.Length];
            fs2.Read(fs2Content, 0, (int)fs2.Length);
            fs1.Write(fs2Content, 0, (int)fs2.Length);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message + " : " + ex.StackTrace);
        }
        finally
        {
            fs1.Close();
            fs2.Close();
        }
person Jin-Wook Chung    schedule 14.07.2011
comment
Да, интонация есть. Тем не менее, я должен был уточнить это в своем первоначальном вопросе, я знаю, как использовать класс SpeechSynthesizer в С#, поскольку я использовал это раньше. Я хотел знать, как будет выглядеть цикл, если я разобью строку на 100-символьные интервалы и создам на компьютере один файл mp3/wav (независимо от интонации) из Google. То же самое для переводчика Microsoft Bing, но с интервалом в 500 символов. - person Syam; 14.07.2011
comment
хорошо, прежде чем я перейду к объединению mp3-файлов, как будет выглядеть цикл while, чтобы сначала получить эти mp3-файлы на компьютере? если я пройду свой цикл, файл tts.mp3 будет перезаписан, и у меня останется только последняя полученная строка из 100 символов. - person Syam; 15.07.2011