📄 uspeech.pas
字号:
//==============================================================================
// $修订版本号: 1.000 $
// $日期 : 2005年4月15日 星期五 12:18:23 $
// $版本号 : 1.0.0 Alpha 1 $
//
// Taxi Service Sytem Voice Base Unit
// 出租车业务系统发音逻辑基础单元。
//
// $BeginLog$
// $Endlog $
// $版权所有 (c)2005 广州众向科技有限公司。 保留所有权利$
//==============================================================================
{: 出租车业务系统发音逻辑基础单元。
}
unit uSpeech;
interface
uses Classes, MPlayer, Controls, Math, SysUtils;
type
TCityVoiceName = ( TAXI_VOICE_BEIJING,
TAXI_VOICE_TIANJING,
TAXI_VOICE_SHANGHAI,
TAXI_VOICE_CHONGQING,
TAXI_VOICE_XIANGGANG,
TAXI_VOICE_HEILONGJIANG,
TAXI_VOICE_JILIN,
TAXI_VOICE_LIAONING,
TAXI_VOICE_SHANDONG,
TAXI_VOICE_HENAN,
TAXI_VOICE_HEBEI,
TAXI_VOICE_HUBEI,
TAXI_VOICE_HUNAN,
TAXI_VOICE_SHANXI_JIN,
TAXI_VOICE_SHANXI_SHAN,
TAXI_VOICE_GANSU,
TAXI_VOICE_QINGHAI,
TAXI_VOICE_YUNNAN,
TAXI_VOICE_SICHUANG,
TAXI_VOICE_GUIZHOU,
TAXI_VOICE_ANHUI,
TAXI_VOICE_JIANGSU,
TAXI_VOICE_JIANGXI,
TAXI_VOICE_ZHEJIANG,
TAXI_VOICE_FUJIAN,
TAXI_VOICE_GUANGDONG,
TAXI_VOICE_HAINAN,
TAXI_VOICE_TAIWAN,
TAXI_VOICE_NEIMENGGU,
TAXI_VOICE_GUANGXI,
TAXI_VOICE_NINGXIA,
TAXI_VOICE_XIZANG,
TAXI_VOICE_XINJIANG
);
TMediaFileSpeech = class
private
FParent: TWinControl;
FMPSpeech: TMediaPlayer;
FSoundFilePath: string;
FTaxiSpeechQueue: TStringList;
FCurrentSpeechItemIndex: Integer;
private
FOnSpeechStop: TNotifyEvent;
FOnSpeechStart: TNotifyEvent;
private
procedure DoOnMediaPlayerNotify(Sender: TObject);
private
procedure speechItem(_index: Integer);
public
constructor Create(AControl: TControl);
destructor Destroy; override;
public
procedure Speech;
procedure FinishSpeech;
procedure AddSpeech(_speech_str: string);
published
property SoundFilePath: string read FSoundFilePath write FSoundFilePath;
published
property OnSpeechStop: TNotifyEvent read FOnSpeechStop write FOnSpeechStop;
property OnSpeechStart: TNotifyEvent read FOnSpeechStart write FOnSpeechStart;
end;
// 全局方法
function OneNumberToCHNSpeech(_one_number: Integer): string;
function OneCharToSpeech(_one_char: string): string;
function OneCityToSpeech(_one_city: string): string;
function NumCharStrToCHNSpeech(_str: string): string;
function NumberToCHNSpeech(_number: Integer): string;
function IndexOfCityName(const CityName:String):Integer;
function GetCityNameVoice(const CityName: String):String;
const
// 中英文业务语音
// 中英文业务单次语音
TAXI_VOICE_CHN_YUET = 'CHN_YueT.wav';
// 中文数字语音
TAXI_VOICE_CHN_YI = 'CHN_Yi.wav';
TAXI_VOICE_CHN_YAO = 'CHN_Yao.wav';
TAXI_VOICE_CHN_ER = 'CHN_Er.wav';
TAXI_VOICE_CHN_SAN = 'CHN_San.wav';
TAXI_VOICE_CHN_SI = 'CHN_Si.wav';
TAXI_VOICE_CHN_WU = 'CHN_Wu.wav';
TAXI_VOICE_CHN_LIU = 'CHN_Liu.wav';
TAXI_VOICE_CHN_QI = 'CHN_Qi.wav';
TAXI_VOICE_CHN_BA = 'CHN_Ba.wav';
TAXI_VOICE_CHN_JIU = 'CHN_Jiu.wav';
TAXI_VOICE_CHN_SHI = 'CHN_Shi.wav';
TAXI_VOICE_CHN_LIN = 'CHN_Lin.wav';
TAXI_VOICE_CHN_QIAN = 'CHN_Qian.wav';
TAXI_VOICE_CHN_BAI = 'CHN_Bai.wav';
// 英文字母语音
TAXI_VOICE_CHAR_A = 'CHAR_A.wav';
TAXI_VOICE_CHAR_B = 'CHAR_B.wav';
TAXI_VOICE_CHAR_C = 'CHAR_C.wav';
TAXI_VOICE_CHAR_D = 'CHAR_D.wav';
TAXI_VOICE_CHAR_E = 'CHAR_E.wav';
TAXI_VOICE_CHAR_F = 'CHAR_F.wav';
TAXI_VOICE_CHAR_G = 'CHAR_G.wav';
TAXI_VOICE_CHAR_H = 'CHAR_H.wav';
TAXI_VOICE_CHAR_I = 'CHAR_I.wav';
TAXI_VOICE_CHAR_J = 'CHAR_J.wav';
TAXI_VOICE_CHAR_K = 'CHAR_L.wav';
TAXI_VOICE_CHAR_L = 'CHAR_L.wav';
TAXI_VOICE_CHAR_M = 'CHAR_M.wav';
TAXI_VOICE_CHAR_N = 'CHAR_N.wav';
TAXI_VOICE_CHAR_O = 'CHAR_O.wav';
TAXI_VOICE_CHAR_P = 'CHAR_P.wav';
TAXI_VOICE_CHAR_Q = 'CHAR_O.wav';
TAXI_VOICE_CHAR_R = 'CHAR_R.wav';
TAXI_VOICE_CHAR_S = 'CHAR_S.wav';
TAXI_VOICE_CHAR_T = 'CHAR_Y.wav';
TAXI_VOICE_CHAR_U = 'CHAR_U.wav';
TAXI_VOICE_CHAR_V = 'CHAR_V.wav';
TAXI_VOICE_CHAR_W = 'CHAR_W.wav';
TAXI_VOICE_CHAR_X = 'CHAR_X.wav';
TAXI_VOICE_CHAR_Y = 'CHAR_Y.wav';
TAXI_VOICE_CHAR_Z = 'CHAR_Z.wav';
TAXI_VOICE_CHAOSHU = 'CHAOSHU.wav';
TAXI_VOICE_FANGDAO = 'FANGDAO.wav';
TAXI_VOICE_CHAOSHITINGCE = 'CHAOSHITINGCE.wav';
TAXI_VOICE_QIANGJIE = 'QIANGJIE.wav';
TAXI_VOICE_BAOJING = 'BAOJING.wav';
TAXI_VOICE_LINSHI = 'LINSHI.wav';
TAXI_VOICE_GUA = 'GUA.wav';
const
TAXI_CITYNAME :Array[0..32] of string =
('京','津','沪','渝','港','黑','吉','辽','鲁','豫',
'冀','鄂','湘','晋','陕','甘','青','云','川','贵',
'皖','苏','赣','浙','闽','粤','琼','台','蒙','桂',
'宁','藏','新'
);
TAXI_CITYNAME_VOICE :Array[TCityVoiceName] of String =
(
'CITY_BEIJING.wav',
'CITY_TIANJING.wav',
'CITY_SHANGEHAI.wav',
'CITY_CHONGQING.wav',
'CITY_XIANGGANG.wav',
'CITY_HEILONGJIANG.wav',
'CITY_JILIN.wav',
'CITY_LIAONING.wav',
'CITY_SHANDONG.wav',
'CITY_HENAN.wav',
'CITY_HEBEI.wav',
'CITY_HUBEI.wav',
'CITY_HUNAN.wav',
'CITY_SHANXI_JIN.wav',
'CITY_SHANXI_SHAN.wav',
'CITY_GANSU.wav',
'CITY_QINGHAI.wav',
'CITY_YUNNAN.wav',
'CITY_SICHUANG.wav',
'CITY_GUIZHOU.wav',
'CITY_ANHUI.wav',
'CITY_JIANGSU.wav',
'CITY_JIANGXI.wav',
'CITY_ZHEJIANG.wav',
'CITY_FUJIAN.wav',
'GUANGDONG.wav',
'HAINAN.wav',
'TAIWAN.wav',
'NEIMENGGU.wav',
'GUANGXI.wav',
'NINGXIA.wav',
'XIZANG.wav',
'XINJIANG.wav'
);
implementation
//------------------------------------------------------------------------------
// 全局功能函数
//------------------------------------------------------------------------------
{: 生成单个数字的中文语音串。
@param _one_number 单个的数字
@result 生成的语音串
}
function OneNumberToCHNSpeech(_one_number: Integer): string;
begin
case _one_number of
0: Result := TAXI_VOICE_CHN_LIN;
1: Result := TAXI_VOICE_CHN_YI;
2: Result := TAXI_VOICE_CHN_ER;
3: Result := TAXI_VOICE_CHN_SAN;
4: Result := TAXI_VOICE_CHN_SI;
5: Result := TAXI_VOICE_CHN_WU;
6: Result := TAXI_VOICE_CHN_LIU;
7: Result := TAXI_VOICE_CHN_QI;
8: Result := TAXI_VOICE_CHN_BA;
9: Result := TAXI_VOICE_CHN_JIU;
end;
end;
{: 生成单个数字的中文语音串。
@param _one_city 单个的城市简称
@result 生成的语音串
}
function OneCityToSpeech(_one_city: string): string;
begin
if Length(Trim(_one_city)) = 0 then exit;
Result := GetCityNameVoice(Copy(_one_city,1,2));
end;
{: 生成单个字母的语音串。
@param _one_char 单个的字母
@result 生成的语音串
}
function OneCharToSpeech(_one_char: string): string;
begin
if Trim(_one_char) = '' then Exit;
case Ord(UpperCase(_one_char)[1]) of
Ord('A'): Result := TAXI_VOICE_CHAR_A;
Ord('B'): Result := TAXI_VOICE_CHAR_B;
Ord('C'): Result := TAXI_VOICE_CHAR_C;
Ord('D'): Result := TAXI_VOICE_CHAR_D;
Ord('E'): Result := TAXI_VOICE_CHAR_E;
Ord('F'): Result := TAXI_VOICE_CHAR_F;
Ord('G'): Result := TAXI_VOICE_CHAR_G;
Ord('H'): Result := TAXI_VOICE_CHAR_H;
Ord('I'): Result := TAXI_VOICE_CHAR_I;
Ord('J'): Result := TAXI_VOICE_CHAR_J;
Ord('K'): Result := TAXI_VOICE_CHAR_K;
Ord('L'): Result := TAXI_VOICE_CHAR_L;
Ord('M'): Result := TAXI_VOICE_CHAR_M;
Ord('N'): Result := TAXI_VOICE_CHAR_N;
Ord('O'): Result := TAXI_VOICE_CHAR_O;
Ord('P'): Result := TAXI_VOICE_CHAR_P;
Ord('Q'): Result := TAXI_VOICE_CHAR_Q;
Ord('R'): Result := TAXI_VOICE_CHAR_R;
Ord('S'): Result := TAXI_VOICE_CHAR_S;
Ord('T'): Result := TAXI_VOICE_CHAR_T;
Ord('U'): Result := TAXI_VOICE_CHAR_U;
Ord('V'): Result := TAXI_VOICE_CHAR_V;
Ord('W'): Result := TAXI_VOICE_CHAR_W;
Ord('X'): Result := TAXI_VOICE_CHAR_X;
Ord('Y'): Result := TAXI_VOICE_CHAR_Y;
Ord('Z'): Result := TAXI_VOICE_CHAR_Z;
end;
end;
{: 从由数字和字符组成的字符串生成中文语音串。
@param _str 由数字和字符组成的字符串
@result 生成的语音串
}
function NumCharStrToCHNSpeech(_str: string): string;
var
i: Integer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -