通过modem将wav播放到对方电话上
上次坛子里的朋友帮着调试的,用delphi7电脑能够播放wav 语音了,
电脑上安装了语音猫
我想先通过mscomm32串口拨通对方电话,然后在播放语音给对方听.目前能够拨通对方电话,但点击声音时,听不到声音。
我层用apro4.07控件,在XP下能对方能听到声音,但WIN7下没有声音,所以想通过AT命令拨通电话,在放音给对方。
请帮忙看看,我这代码里有什么问题吗?谢谢
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
MSComm1: TMSComm;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
buf: Array of byte;
implementation
{$R *.dfm}
uses MMSystem;
function GetWaveFmtData(path: string; var fmt: TWaveFormatEx ): Boolean;
var
hFile: HMMIO;
ckiRIFF,ckiFmt,ckiData: TMMCKInfo;
//buf: array of byte;
begin
Result := False;
hFile := mmioOpen(PChar(path), nil, MMIO_READ);
if hFile = 0 then Exit;
ZeroMemory(@ckiRIFF, SizeOf(TMMCKInfo));
ZeroMemory(@ckiFmt, SizeOf(TMMCKInfo));
ZeroMemory(@ckiData, SizeOf(TMMCKInfo));
ckiRIFF.fccType := mmioStringToFOURCC('WAVE', 0);
ckiFmt.ckid := mmioStringToFOURCC('fmt', 0);
ckiData.ckid := mmioStringToFOURCC('data', 0);
ZeroMemory(@fmt, SizeOf(TWaveFormatEx));
mmioDescend(hFile, @ckiRIFF, nil, MMIO_FINDRIFF);
if (ckiRIFF.ckid = FOURCC_RIFF) and (ckiRIFF.fccType = mmioStringToFOURCC('WAVE',0)) and
(mmioDescend(hFile, @ckiFmt, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR) and
(mmioRead(hFile, @fmt, ckiFmt.cksize) = ckiFmt.cksize) and
(mmioAscend(hFile, @ckiFmt, 0) = MMSYSERR_NOERROR) and
(mmioDescend(hFile, @ckiData, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR) then
begin
SetLength(buf, ckiData.cksize);
Result := (mmioRead(hFile, PAnsiChar(buf), ckiData.cksize) = ckiData.cksize);
end;
mmioClose(hFile, 0);
end;
//------------------------------------------------------------------------------
var
wh: TWaveHdr;
hOut: HWAVEOUT;
fmt: TWaveFormatEx;
procedure TForm1.Button1Click(Sender: TObject);
const
path = 'E:\1.wav';
begin
GetWaveFmtData(path, fmt);
wh.lpData := PAnsiChar(buf);
wh.dwBufferLength := Length(buf);
wh.dwBytesRecorded := 0;
wh.dwUser := 0;
wh.dwFlags := 0;
wh.dwLoops := 1;
wh.lpNext := nil;
wh.reserved := 0;
//WAVE_MAPPER
waveOutOpen(@hOut, MSComm1.CommID , @fmt, Handle, 0, CALLBACK_WINDOW);
waveOutPrepareHeader(hOut, @wh, SizeOf(TWaveHdr));
waveOutWrite(hOut, @wh, SizeOf(TWaveHdr));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
mscomm1.PortOpen:=true;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
mscomm1.output :='at=fclass=8' + chr(13);
mscomm1.output :='at+vls=7' + chr(13);
mscomm1.output :='at+vrn=0' + chr(13);
mscomm1.output :='at+vtd=10' + chr(13);
mscomm1.output :='at+vit=6' + chr(13);
mscomm1.output :='atdT122' + chr(13);
mscomm1.output :='at+vsm=1,8000,0,0' + chr(13);
mscomm1.output :='at+vtx' + chr(13);
mscomm1.output :='at+vrx' + chr(13);
end;
end.