首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

通过modem将wav播放到对方电话上,该如何处理

2012-06-07 
通过modem将wav播放到对方电话上上次坛子里的朋友帮着调试的,用delphi7电脑能够播放wav 语音了,电脑上安装

通过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.


------解决方案--------------------


楼主用TApdTapiDevice这组控件就可以了,这里有现成的文章和代码
http://blog.csdn.net/ktcserver/article/details/1526994
对你应该是有帮助的

热点排行