比如说有一文本中有这样一段话:"程序员大本营",如何把它转换成语音,用普通话读出来

解决方案 »

  1.   

    英文的用TTS就OK,要普通话读出来就很麻烦了
      

  2.   

    虽然我没做这方面的 但是听说主要都是用tts 应该有中文版的
      

  3.   

    一个TTS的例子:
    unit ReadText_Unit;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, StdCtrls, Buttons, VtxtAuto_tlb, Menus, ExtCtrls;type
      TReadTextForm = class(TForm)
        Memo1: TMemo;
        MainMenu: TMainMenu;
        Read: TMenuItem;
        Pause: TMenuItem;
        Stop: TMenuItem;
        Previous: TMenuItem;
        Next: TMenuItem;
        Exit1: TMenuItem;
        Load: TMenuItem;
        Speed: TMenuItem;
        procedure FormCreate(Sender: TObject);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
        procedure ReadClick(Sender: TObject);
        procedure PauseClick(Sender: TObject);
        procedure StopClick(Sender: TObject);
        procedure PreviousClick(Sender: TObject);
        procedure NextClick(Sender: TObject);
        procedure Exit1Click(Sender: TObject);
        procedure LoadClick(Sender: TObject);
        procedure SpeedClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      ReadTextForm: TReadTextForm;
      tts:tvtxtauto;implementation{$R *.DFM}procedure TReadTextForm.FormCreate(Sender: TObject);
    begin
      memo1.Lines.Clear;
      tts:=tvtxtauto.Create(self);
      tts.Register('Project1','Project1');
      speed.Caption:='Speed='+inttostr(tts.Speed);
    end;procedure TReadTextForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      tts:=nil;
    end;procedure TReadTextForm.ReadClick(Sender: TObject);
    begin
      tts.Speak(memo1.text,vtxtst_reading);
    end;procedure TReadTextForm.PauseClick(Sender: TObject);
    begin
      if tts.IsSpeaking then
      tts.AudioPause else tts.AudioResume;
    end;procedure TReadTextForm.StopClick(Sender: TObject);
    begin
      tts.StopSpeaking;
    end;procedure TReadTextForm.PreviousClick(Sender: TObject);
    begin
     tts.AudioRewind;
    end;procedure TReadTextForm.NextClick(Sender: TObject);
    begin
      tts.AudioFastForward;
    end;procedure TReadTextForm.Exit1Click(Sender: TObject);
    begin
      tts:=nil;
      application.Terminate;
    end;procedure TReadTextForm.LoadClick(Sender: TObject);
    var op:topendialog;
    begin
      op:=topendialog.Create(self);
      op.Filter:='Text file|*.txt|All file|*.*';
      if op.Execute then memo1.Lines.LoadFromFile(op.filename);
      op.free;
    end;procedure TReadTextForm.SpeedClick(Sender: TObject);
    var ns:integer;
    begin
      ns:=strtoint(inputbox('Set new reading speed','Value=',inttostr(tts.speed)));
      if tts.IsSpeaking then
      begin
        tts.AudioPause;
        tts.Speed:=ns;
        tts.AudioResume;
      end else tts.Speed:=ns;
      speed.Caption:='Speed='+inttostr(tts.Speed);  
    end;end.
      

  4.   

    看来好象很简单 在哪里能找到 tts?
      

  5.   

    英文的用TTS就OK,要普通话读出来就很麻烦了