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;
  可发不出声音,不知道哪儿不对,请大侠们帮忙分析分析。