?? 013.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0043)http://hub.myrice.com/delphizt/dmtl/013.htm -->
<HTML><HEAD><TITLE>-->DELPHI專題--多媒體類-->使用DELPHI實現文本文件顯示和聲音同步播放</TITLE>
<META content="text/html; charset=GB2312" http-equiv=Content-Type>
<META content=" DELPHI專題--多媒體類 使用DELPHI實現文本文件顯示和聲音同步播放" name=keywords>
<META content=" - DELPHI專題--多媒體類 - 使用DELPHI實現文本文件顯示和聲音同步播放" name=description>
<STYLE>#page {
LEFT: 0px; POSITION: absolute; TOP: 0px
}
.tt3 {
FONT: 9pt/12pt "宋體"
}
.tt2 {
FONT: 12pt/15pt "宋體"
}
A {
TEXT-DECORATION: none
}
A:hover {
COLOR: blue; TEXT-DECORATION: underline
}
</STYLE>
<META content="Microsoft FrontPage 4.0" name=GENERATOR></HEAD>
<a href="index.html">返回</a>
<BODY aLink=#9900ff bgColor=#ffffff leftMargin=3 link=#006699 text=#000000
topMargin=3 vLink=#006699 marginwidth="3" marginheight="3">
<TABLE border=0 cellPadding=10 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD bgColor=#f5f8f8 class=tt2 width="84%">
<CENTER><B><FONT color=#ff6666 face=楷體_GB2312
style="FONT-SIZE: 16.5pt">使用DELPHI實現文本文件顯示和聲音同步播放</FONT></B></CENTER>
<HR color=#ee9b73 SIZE=1 width="94%">
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
在一些語言教學軟件中,經常使用文本顯示和聲音同步播放,我們可以用DEL PHI實現之。 </SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
<B>一、材料的制作</B> </SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
首先,我們選擇幾篇文章,這里我們選擇馬丁路德金、林肯和里根的演說,每一篇文章分為若干句,在制作聲音文件時,記下每個句子的開始時間和結束時間,然后將其記到一個數據表中,這個表有如下字段:NO、TEXT、STARTTIME,分別表示每句序號、內容、開始時間。
</SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> <B>二、
界面的制作</B> </SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
在DELPHI中創建一個新工程,在FORM中放入多媒體控件,RTF編輯器,命令按鈕,單選分組框,數據表,時鐘和標簽,如圖所示 </SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
<B>三、各個控件的屬性</B> </SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 1、
多媒體控件的AutoEnable和AutoOpen特性設置為False
,VisibleButtons特性設置Record、Eject、Step為不可見。 </SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 2、
Table控件的DatabaseName設為存放表的目錄,我們將應用程序、聲音文件和表存放在myprog目錄,因此這里將DatabaseName設為c:\myprog,將TableName設為默認的播放文件對應的數據表的名字,這里設為ex1.dbf。
</SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 3、
Radiogroup控件的Caption設為 ‘請選擇播放內容’,Itmes特性中加上三行:馬丁路德金,林肯,里根。 </SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 4、
Richedit控件的Lines特性加上‘演講內容。 </SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
<B>四、代碼的編寫</B> </SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 1、變量聲明
</SPAN></P><BR><PRE><SPAN style="FONT-SIZE: 9pt">
var isend:Boolean;
CurrentButton:TMPBtnType;
CurrentPlay,CurrentDisp:longint;
</SPAN></PRE>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
其中isend表示播放是否已經到了末尾,CurrentButton表示當前MediaPlayer元件中按下了哪個按鈕,CurrentPlay
,CurrentDisp表示當前播放記錄及當前顯示記錄。 </SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
2、在FormCreate事件中做一些必要的準備工作,其代碼如下: </SPAN></P><BR><PRE><SPAN style="FONT-SIZE: 9pt">
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.TableName:='ex1.dbf'; Table1.Open;
MediaPlayer1.FileName:='ex1.wav';MediaPlayer1.Open;
MediaPlayer1.TimeFormat:=tfMilliseconds;
isend:=False;
CurrentButton:=btStop;
CurrentDisp:=1;
CurrentPlay:=1;
end;
</SPAN></PRE>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
3、在單選分組框中加進如下代碼: </SPAN></P><BR><PRE><SPAN style="FONT-SIZE: 9pt">
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
MediaPlayer1.Close; Table1.Close;
case radiogroup1.ItemIndex of
0:begin MediaPlayer1.FileName:='ex1.wav';
Table1.TableName:='ex1.dbf';end;
1:begin MediaPlayer1.FileName:='ex2.wav';
Table1.TableName:='ex2.dbf';end;
2:begin MediaPlayer1.FileName:='ex3.wav';
Table1.TableName:='ex3.dbf'; end;
end;
Table1.Open; MediaPlayer1.Open;
end;
</SPAN></PRE>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
4、為了適當修改MediaPlayer元件中各個按鈕的功能,需要編寫MediaPlayer元件的click事件的代碼,主要是修改“快進”及“快退”的功能,使其每次移動一句,且移動后直接播放,而不用再按“播放”按鈕。為達到這個功能,在過程的一開始,設置DoDefault參數為False,表示不執行默認的動作,在過程的中間部分,加上必要的處理,在過程的結束處,寫上根據按下的按鈕執行相應功能語句。
</SPAN></P><BR><PRE><SPAN style="FONT-SIZE: 9pt">
procedure TForm1.MediaPlayer1Click(Sender: TObject;
Button: TMPBtnType; var DoDefault: Boolean);
begin
DoDefault:=False;
with MediaPlayer1 do
begin
case Button of
btPlay : begin
if isend=true then
begin
Table1.first; Position:=start;
CurrentPlay:=1; CurrentDisp:=1;
isend:=False;
RichEdit1.lines.clear; RichEdit1.lines.add
('演講內容');
end;
CurrentButton:=btPlay;
end;
btStop : begin CurrentButton:=btStop;
isend:=true;
end;
btpause: if CurrentButton=btPlay then
CurrentButton:=btpause
else if CurrentButton=btpause then
CurrentButton:=btPlay;
btPrev: begin CurrentButton:=btPrev;
Table1.Prior;
Position:=Table1.fieldvalues
['STARTTIME'];
CurrentButton:=btPlay;
end;
btBack: begin CurrentButton:=btBack;
Table1.first; Position:=start;
CurrentPlay:=1;
CurrentDisp:=1;
RichEdit1.lines.clear;
RichEdit1.lines.add
('演講內容');
CurrentButton:=btPlay;
end;
btNext: begin CurrentButton:=btNext;
Table1.Next;
Position:=Table1.fieldvalues
['STARTTIME'];
CurrentButton:=btPlay;
end;
end;
case CurrentButton of
btPlay: Play;
btpause:pause;
btStop:Stop;
end;
end;
end;
</SPAN></PRE>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
5、為了能同步顯示文本,需要編寫定時器OnTime事件的代碼,如果當前播放的時間超過了當前記錄的開始時間,則設置CurrentPlay為當前記錄號,如果CurrentPlay超過了CurrentDisp
,則顯示當前記錄。 </SPAN></P><BR><PRE><SPAN style="FONT-SIZE: 9pt">
procedure TForm1.Timer1Timer(Sender: TObject);
begin
with MediaPlayer1 do
begin
if CurrentButton=btPlay then
begin
if not Table1.eof and (Position
>Table1.FieldValues['STARTTIME'])
then
begin CurrentPlay:=Table1.recno;
if CurrentPlay >=CurrentDisp then
begin
RichEdit1.Lines.add(Table1.fieldvalues['TEXT']);
CurrentDisp:=CurrentDisp+1;
end;
Table1.Next;
end;
if Table1.eof then
begin
CurrentButton:=btStop;
isend:=true;
end;
end;
end;
end;
</SPAN></PRE>
<P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT>
注:在MediaPlayer的click事件中,使用了btPrev,btNext等常量,為了能夠通過編譯,在uses子句中需將ComCtrls放在mPlayer之前,以免引起沖突。
</SPAN></P>
<HR color=#ee9b73 SIZE=1 width="94%">
</TD>
</TR></TBODY></TABLE></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -