procedure TForm1.play_str(channeltype,channelid:integer;str: widestring);
var
buff:pchar;
buffer:pchar;
ifilehandle1,ifilehandle:integer;
hz:string;
str1,hz1:widestring;
totallen,a1,a2,a3,a4,totalstart,indexstart:integer;
bfvoc:integer;
filehandle:integer;
begin
str1:=trim(str);
ifilehandle:=fileopen(path+'voc\binahz.ndx',fmopenreadwrite);//文件索引
if ifilehandle<0 then
showmessage('');
ifilehandle1:=fileopen(path+'voc\total.voc',fmopenreadwrite);//打开发音文件库
if ifilehandle1<0 then
showmessage('');
for i:= 1 to length(str1) do
begin
hz1:=copy(str1,i,1);
hz:=widechartostring(pwidechar(hz1));
if (indexstart<1) or (indexstart> 108193) then
begin
if (ord(hz[1])>=216) and (ord(hz[2])<=247) then
indexstart:= ((ord(hz[1])-176) * 94 + ord(hz[2]) - 166 )*16 // 二级字库
else
indexstart:= ((ord(hz[1])-176) * 94 + ord(hz[2]) - 161)*16;
end;
fileseek(ifilehandle,indexstart+10,0);
buff:=pchar(AllocMem(2));
a1:=ord(fileread(ifilehandle,buff^,1));
a2:=ord(fileread(ifilehandle,buff^,1))*256;
a3:=ord(fileread(ifilehandle,buff^,1))*256*256;
a4:=ord(fileread(ifilehandle,buff^,1))*256*256*256;
totalstart:=a1+a2+a3+a4;
totallen:=a1+a2;
fileseek(ifilehandle1,totalstart,0);
buff:=pchar(allocmem(totallen+1));
bfvoc:=fileread(ifilehandle1,buff^,totallen);
buffer:=pchar(allocmem(bfvoc));
end;
fileclose(ifilehandle);
fileclose(ifilehandle1);
filehandle:=filecreate('voc2');
filewrite(filehandle,buffer^,bfvoc);
phonic1.PlayFile(channeltype,channelid,'voc2',0,0);//播放语音文件end;
可发不出声音,不知道哪儿不对,请大侠们帮忙分析分析。
var
buff:pchar;
buffer:pchar;
ifilehandle1,ifilehandle:integer;
hz:string;
str1,hz1:widestring;
totallen,a1,a2,a3,a4,totalstart,indexstart:integer;
bfvoc:integer;
filehandle:integer;
begin
str1:=trim(str);
ifilehandle:=fileopen(path+'voc\binahz.ndx',fmopenreadwrite);//文件索引
if ifilehandle<0 then
showmessage('');
ifilehandle1:=fileopen(path+'voc\total.voc',fmopenreadwrite);//打开发音文件库
if ifilehandle1<0 then
showmessage('');
for i:= 1 to length(str1) do
begin
hz1:=copy(str1,i,1);
hz:=widechartostring(pwidechar(hz1));
if (indexstart<1) or (indexstart> 108193) then
begin
if (ord(hz[1])>=216) and (ord(hz[2])<=247) then
indexstart:= ((ord(hz[1])-176) * 94 + ord(hz[2]) - 166 )*16 // 二级字库
else
indexstart:= ((ord(hz[1])-176) * 94 + ord(hz[2]) - 161)*16;
end;
fileseek(ifilehandle,indexstart+10,0);
buff:=pchar(AllocMem(2));
a1:=ord(fileread(ifilehandle,buff^,1));
a2:=ord(fileread(ifilehandle,buff^,1))*256;
a3:=ord(fileread(ifilehandle,buff^,1))*256*256;
a4:=ord(fileread(ifilehandle,buff^,1))*256*256*256;
totalstart:=a1+a2+a3+a4;
totallen:=a1+a2;
fileseek(ifilehandle1,totalstart,0);
buff:=pchar(allocmem(totallen+1));
bfvoc:=fileread(ifilehandle1,buff^,totallen);
buffer:=pchar(allocmem(bfvoc));
end;
fileclose(ifilehandle);
fileclose(ifilehandle1);
filehandle:=filecreate('voc2');
filewrite(filehandle,buffer^,bfvoc);
phonic1.PlayFile(channeltype,channelid,'voc2',0,0);//播放语音文件end;
可发不出声音,不知道哪儿不对,请大侠们帮忙分析分析。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货