⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 中英文混合朗读软件发布 TTS Reader1.5
💻 PAS
📖 第 1 页 / 共 3 页
字号:
       else
         begin
          d:=d+'<LANG LANGID="804">'+z;
          p:=0;
          i:=i+2;
         end
    end  ////
  ///////////////////////////////
  else //if z<>' ' then
    begin ///
       if p=1 then //若上次也是英文
           begin
            d:=d+z;
            p:=1;
            i:=i+2;
           end
       else
          begin
          d:=d+'<LANG LANGID="409">'+z;
          p:=1;
          i:=i+2;
          end
    end;
    //else if z=' ' then d:=d+'  ';
   gauge1.Progress:=(i*100) div l;//进度条
   if gauge1.Progress=100 then
    begin
     spvoice1.Speak(d,1);
    end;
 end;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 p:=100;
 now:=spvoice1.Rate;//得到当前语速
 richedit1.Text:='';
 yinpin:=combobox1.Text;
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
  spvoice1.Pause;
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
 spvoice1.Resume;
end;

procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
 inputread.Checked:=false;
 try
 if opendialog1.Execute then
   begin
     richedit1.Lines.Clear;
     richedit1.Lines.LoadFromFile(opendialog1.FileName);
   end;
   except ON E:EReadError do
   showmessage('此文件打开失败!');
end;
end;
procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin
  word:=richedit1.SelText;
  
end;

procedure TForm1.RichEdit1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var
  l:integer;//s字符串的长度
  i:integer;//
  z:string;
begin
 if nowread.Checked then
  ///////////////////////////////
  if czwbt.Checked then //纯中文朗读
    begin
     //注:此处若不将之转换为全角,则TTS会读为"点"
     word:=StringReplace(word,'.','。',[rfReplaceAll, rfIgnoreCase]);
     spvoice1.Speak('<LANG LANGID="804">'+word,1);
    end
    /////////////////////////////////////////////////////
   else if cywbt.Checked then //纯英文朗读
    begin
     spvoice1.Speak('<LANG LANGID="409">'+word,1);
    end
    else if zyhhbt.Checked then //中英混合朗读
  begin
  gauge1.Visible:=true;
  word:=StringReplace(word,'a','a',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'b','b',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'c','c',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'d','d',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'e','e',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'f','f',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'g','g',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'h','h',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'i','i',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'j','j',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'k','k',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'l','l',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'m','m',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'n','n',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'o','o',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'p','p',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'q','q',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'r','r',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'s','s',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'t','t',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'u','u',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'v','v',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'w','w',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'x','x',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'y','y',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'z','z',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,' ','  ',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,',',',',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'.','。',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,';',';',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,':',':',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'''',''',[rfReplaceAll, rfIgnoreCase]);//注意单引号的引用
  word:=StringReplace(word,'<','〈',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'>','〉',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'/','/',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'\','\',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'?','?',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'|','‖',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'[','[',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,']',']',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'{','{',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'}','}',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'(','(',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,')',')',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'-','-',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'_','﹎',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'=','=',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'+','+',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'!','!',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'@','@',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'#','#',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'$','$',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'%','%',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'^','ˇ',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'&','&',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'*','※',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'1','1',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'2','2',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'3','3',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'4','4',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'5','5',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'6','6',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'7','7',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'8','8',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'9','9',[rfReplaceAll, rfIgnoreCase]);
  word:=StringReplace(word,'0','0',[rfReplaceAll, rfIgnoreCase]);
   //注:若加入数字过滤后,将无法朗读所有数字
  //showmessage(s);//以上代码没问题
  l:=length(word);
  i:=1;
  d:='';

 while i<l do
 begin
  z:=Copy(word,i,2);
   if  (z<>'a') and (z<>'b') and (z<>'c') and (z<>'d') and (z<>'e')
   and (z<>'f') and (z<>'g') and (z<>'h') and (z<>'i') and (z<>'j')
   and (z<>'k') and (z<>'l') and (z<>'m') and (z<>'n') and (z<>'o')
   and (z<>'p') and (z<>'q') and (z<>'r') and (z<>'s') and (z<>'t')
   and (z<>'u') and (z<>'v') and (z<>'w') and (z<>'x') and (z<>'y')
   and (z<>'z') or (z='1') or (z='2') or (z='3') or (z='4') or (z='5')
   or (z='6') or (z='7') or (z='8') or (z='9') or (z='0')
   {and (z<>'\') and (z<>'?') and (z<>'‖') and (z<>'[') and (z=']')
   and (z<>'{') and (z<>'}') and (z<>'(') and (z<>')') and (z<>'-')
   and (z<>'﹎') and (z<>'=') and (z<>'+') and (z<>'!') and (z<>'@')
   and (z<>'#') and (z<>'$') and (z<>'%') and (z<>'ˇ') and (z<>'&')
   and (z<>'※') and (z<>''')}then
   
    begin ////
       z:=StringReplace(z,'1','1',[rfReplaceAll, rfIgnoreCase]);
       z:=StringReplace(z,'2','2',[rfReplaceAll, rfIgnoreCase]);
       z:=StringReplace(z,'3','3',[rfReplaceAll, rfIgnoreCase]);
       z:=StringReplace(z,'4','4',[rfReplaceAll, rfIgnoreCase]);
       z:=StringReplace(z,'5','5',[rfReplaceAll, rfIgnoreCase]);
       z:=StringReplace(z,'6','6',[rfReplaceAll, rfIgnoreCase]);
       z:=StringReplace(z,'7','7',[rfReplaceAll, rfIgnoreCase]);
       z:=StringReplace(z,'8','8',[rfReplaceAll, rfIgnoreCase]);
       z:=StringReplace(z,'9','9',[rfReplaceAll, rfIgnoreCase]);
       z:=StringReplace(z,'0','0',[rfReplaceAll, rfIgnoreCase]);
       if p=0 then //若上次也是中文
            begin
             d:=d+z;
             p:=0;
             i:=i+2;
            end
       else
         begin
          d:=d+'<LANG LANGID="804">'+z;
          p:=0;
          i:=i+2;
         end
    end  ////
  ///////////////////////////////
  else //if z<>' ' then
    begin ///
       if p=1 then //若上次也是英文
           begin
            d:=d+z;
            p:=1;
            i:=i+2;
           end
       else
          begin
          d:=d+'<LANG LANGID="409">'+z;
          p:=1;
          i:=i+2;
          end
    end;
    //else if z=' ' then d:=d+'  ';
   gauge1.Progress:=(i*100) div l;//进度条
   if gauge1.Progress=100 then
    begin
     spvoice1.Speak(d,1);
    end;
 end;
 end;

end;

procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
  gauge1.Visible:=false;
  spvoice1.Disconnect;
  radiobutton2.Checked:=true;
  p:=500;//这可是个很重要的参数哟
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
  spvoice1.Rate:=now;
end;

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
 spvoice1.Rate:=now-5;
end;

procedure TForm1.RadioButton3Click(Sender: TObject);
begin
  spvoice1.Rate:=now+5;
end;

procedure TForm1.RichEdit1Change(Sender: TObject);
 var l,i:integer;m,r:string;
begin
 i:=1;
 r:='';
 m:=richedit1.Text;
  if inputread.Checked then
   begin
    spvoice1.Rate:=now+5;
    l:=length(m);
    r:=Copy(m,l-1,2);
    spvoice1.Speak('<LANG LANGID="804">'+r,1);
   end;

end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  gauge1.Visible:=false;
  spvoice1.Disconnect;
  p:=500;//这可是个很重要的参数哟
  richedit1.Lines.Clear;
  radiobutton2.Checked:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  nowtime.Caption:=timetostr(time);
end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
var
  ErrorDescr: string;
begin
  ErrorDescr := 'Call 911';
  MessageDlg(
  '                               关于软件'+#13+
  '    本软件采用微软公司先进的TTS语音合成技术,能流畅朗读中英文混合文本,'+#13+
  '有慢、中、快三种语速,用户可根据待朗读内容选择朗读模式(1,纯中文2,纯英'+#13+
  '文3,中英混合),支持鼠标选读(即时朗读鼠标选定的语句),录入朗读(即当用'+#13+
  '户输入文本时自动朗读),音量可调,【可将文本导出保存为WAV文件】。'+#13+
  '  该软件费尽本人N个脑细胞(N>99999999999999),BUG捉了一箩筐,可惜灭害'+#13+
  '灵用完了,还请各位帮忙捉虫呀,有任何意见和建议请与俺联系哟!:)'+#13+
  'CopyRight(2002-2003)信息安全工作室http://isxuzhu.myrice.com QQ:122512447 软件设计:风之竹 20030110'
     ,mtInformation,[mbOk],0);

end;


procedure TForm1.SpeedButton6Click(Sender: TObject);
var jieguo:integer;
begin
 jieguo:=messageDlg('你真的要舍我而去吗?',mtConfirmation,[mbyes,mbcancel],0);
   case jieguo of
    6:
        begin
         spvoice1.Disconnect;
         close;
        end;
    2:exit;
end;
end;

procedure TForm1.SpeedButton8Click(Sender: TObject);
var
  jieguo:integer;
  rom:string;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -