C #: Google Text-to-Speech Loop - PullRequest
       10

C #: Google Text-to-Speech Loop

0 голосов
/ 14 июля 2011

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

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

1 Ответ

0 голосов
/ 14 июля 2011

Это не прямой ответ, но я думаю, что расщепление нехорошо, потому что у 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();
        }
...