收费系统中语音报价过程中怎么将已事先录制好的各个不同的语音块连接起来并且播放出来?如105元是由一百、零、五、元,四个语音连接起来播放的

收费系统中语音报价过程中如何将已事先录制好的各个不同的语音块连接起来并且播放出来?如105元是由一百、零、五、元,四个语音连接起来播放的。
我已将组合中用到的0到500的关键数的语音都录好了。我希望实现通过实收金额框中显示出来的金额能够让电脑自动读出来并播放出去。
我初步的想法是为了速度能够保证实时性,先将所有的音块都读到内存中,以备调用,这样速度够块,总大小我看了不到8M,依目前的电脑配置应该问题不大。然后做个函数来自动根据金额的数值对音块文件进行组合,形成一个新的音块,然后用播放器播放。这是我的思路。但是还没有写出源程序来。请各位老师指点一下,这个思路有没有问题,或者有没有能实现这个功能的现成的代码可以提供。谢!
我录好的语音如下(因为收费的数量一定是五的倍数所以...):


一十
一十五
二十
...
一百
二百
三百
四百
五百
收费金额
开始计时
结束计时


------解决方案--------------------
呵呵,我把我的给你看看
procedure TSoundThread.PlaySoundNum(ANum: Double);
var
NumSound:string;
iValue,Value,iDotPos,i:integer;
strValue:string;
begin
try
if ANum<0.0 then exit;
sndPlaySoundA('SOUND_FK', SND_SYNC or SND_RESOURCE);
strValue:=floattostr(ANum);
iDotPos:=pos('.',strValue);
//百位
if iDotPos=0 then
iValue:=strToInt(strValue)
else
iValue:=strtoint(copy(strValue,0,iDotPos-1));
if iValue>99 then
begin
Value:=iValue div 100;
if Value in [1..9] then
begin
NumSound:=NUMSOUNDARRAY[Value];
sndPlaySoundA(pchar(NumSound), SND_SYNC or SND_RESOURCE);
sndPlaySoundA('NUM_BAI', SND_SYNC or SND_RESOURCE);
iValue:=iValue mod 100;
end;
end;
//十位
if iValue>10 then
begin
value:=iValue div 10;
if Value in [1..9] then
begin
NumSound:=NUMSOUNDARRAY[Value];
sndPlaySoundA(pchar(NumSound), SND_SYNC or SND_RESOURCE);
sndPlaySoundA('NUM_TEN', SND_SYNC or SND_RESOURCE);
iValue:=iValue mod 10;
end;
end;
//个位
if iValue>0 then
begin
NumSound:=NUMSOUNDARRAY[iValue];
sndPlaySoundA(pchar(NumSound), SND_SYNC or SND_RESOURCE);
end;
//是否有小数点
if iDotPos>0 then
begin
sndPlaySoundA('DOT', SND_SYNC or SND_RESOURCE);
strValue:=copy(strValue,iDotPos+1,length(strValue)-iDotPos);
for i:=1 to length(strValue) do
sndPlaySoundA(pchar(NUMSOUNDARRAY[strtoint(strValue[i])]), SND_SYNC or SND_RESOURCE);
end;
// sndPlaySoundA('NUM_UNIT', SND_SYNC or SND_RESOURCE);
except
Terminate;
end;

我的是三位啊,

NUMSOUNDARRAY:array[0..9] of string=('NUM_ZERO','NUM_ONE','NUM_TWO','NUM_THREE','NUM_FOUR','NUM_FIVE','NUM_SIX','NUM_SEVEN','NUM_EIGHT','NUM_NINE');

------解决方案--------------------
看看我的接口设计,也许有点参考价值(http://www.bluespace.com.cn/koodoo):


4.5.1 组合播放数字: PlayNumber(sNumStr, iType);

说 明:支持中英文播放数字

参 数:sNumStr : 数字串, 如"1200.67";
iType : 类型: 0 - 数值, 如有小数,将播放"...点..."
1 - 金额, 播放元角分
2 - 数字, 类似读电话号码

注 意:在语音路径下必须要有相应的基础语音文件, 如果是普通话和方言,
必须包含: 0.wav, ..., 9.wav, shi.wav(十), yuan.wav(元)等;
如果SelectLan(2), 即选择英语, 还必须包含: "10.wav", "20.wav", "100.wav"...等
在虚拟线路上将自动使用PC机的声卡放音

参 见:Play(),SelectLan(),SetSndExt() 
例 子: 
// 常量定义
const PLAY_AMOUNT = 0;
const PLAY_MONEY = 1;
const PLAY_NUMBER = 2;

// 播放: 一百股
PlayNumber("100", PLAY_AMOUNT);
Play("gu.wav"); // "股"

// 播放: 八万零六十五点九八
PlayNumber("89065.98", PLAY_AMOUNT);

// 播放: 一百二十元三角五分
PlayNumber("120.35", PLAY_MONEY);

// 播放: "电话号码83847650"
Play("phone.wav"); // "电话号码是..."
PlayNumber("83847650", PLAY_NUMBER);