通过 acmFormatChoose 函数调出来的编码格式选择对话框,
我使用的是 Windows Media Audio V2 ,即使用DivX WMA Audio Coder,通过acmFormatChoose 运行程序,一切正常。但我使用如下代码跳过对话框直接运行时就会出现问题(调用时没有错误提示,但在收到音频数据后,回放时没有任何声音),请问是哪里的问题。定义结构为 TDIVWMA=packed record
wFormatTag: Word;
nChannels: Word;
nSamplesPerSec: DWORD;
nAvgBytesPerSec: DWORD;
nBlockAlign: Word;
wBitsPerSample: Word;
cbSize: Word;
end;var
DivWma:TDIVWMA;
AudioFormat:pointer;procedure TUDPMainForm.BTRecivClick(Sender: TObject);
begin
with DivWma do
begin
wFormatTag :=353;
nChannels := 1; //mono
nSamplesPerSec := 8000;
nAvgBytesPerSec:= 1000; { for buffer estimation }
nBlockAlign:=64; { block size of data }
wbitspersample := 16;
cbSize:=10;
end;
AudioFormat:=@DivWma;
ACMWaveOut_1.Open(AudioFormat);
end;
我使用的是 Windows Media Audio V2 ,即使用DivX WMA Audio Coder,通过acmFormatChoose 运行程序,一切正常。但我使用如下代码跳过对话框直接运行时就会出现问题(调用时没有错误提示,但在收到音频数据后,回放时没有任何声音),请问是哪里的问题。定义结构为 TDIVWMA=packed record
wFormatTag: Word;
nChannels: Word;
nSamplesPerSec: DWORD;
nAvgBytesPerSec: DWORD;
nBlockAlign: Word;
wBitsPerSample: Word;
cbSize: Word;
end;var
DivWma:TDIVWMA;
AudioFormat:pointer;procedure TUDPMainForm.BTRecivClick(Sender: TObject);
begin
with DivWma do
begin
wFormatTag :=353;
nChannels := 1; //mono
nSamplesPerSec := 8000;
nAvgBytesPerSec:= 1000; { for buffer estimation }
nBlockAlign:=64; { block size of data }
wbitspersample := 16;
cbSize:=10;
end;
AudioFormat:=@DivWma;
ACMWaveOut_1.Open(AudioFormat);
end;
解决方案 »
- 特急,请求帮助,导数据到xls文件
- 关于DELPHI 子控件保存的问题..
- 送80分,想搞点delphi中通过adoquery实现增、删数据表记录,用什么方式比较好?
- ~{TuQySC~}adoquery~{4zLf~}Tquery~{#?J9SC~}dbgridEH~{5DJ1:r7"OV~}tquery~{V'3V2;:C~}.
- 请问操作系统地址栏中的输入框的图标与文字,用什么控件可以实现呢?
- 大家都把自己的QQ号码放出来,互相帮助
- 在delphi的activeform中如何调用另一个窗体或页面呀??!
- 在Delphi中怎么样把一个二进制文件(.exe,.obj,.jpg)写入到数据库中(Access&SqlSever)
- SQL查询问题,急切解决,在线等待......
- 如何让DBGRID显示到最下面一行后,刷新后,下一条显示在DBGRID的第一行
- ★★★★★如何很好的宣传网站,有经验的进来一下★★★★★
- 如何动态修改托盘图标的szTip文字?
WaveFormatEx.nChannels:=1;
WaveFormatEx.nSamplesPerSec:=8000;
WaveFormatEx.nAvgBytesPerSec:=WaveFormatEx.nSamplesPerSec;
WaveFormatEx.nBlockAlign:=1;
WaveFormatEx.wBitsPerSample:=8;
WaveFormatEx.cbSize:=0;
ACMWaveFormat.Format:=WaveFormatEx
上面那几个值是我根踪ACM得出的,但就是不行啊,GSM610可以
Windows Media Audio 2
function TForm1.InitACMFormat:pointer;// 获得ACM数据格式指针
var FWaveFormat: pWaveFormatEx;
FMaxFmtSize:integer;
begin
FMaxFmtSize:=8000; //8000、11025
GetMem(FWaveFormat, FMaxFmtSize);
if FWaveFormat = nil then begin
showmessage('Error allocating local memory for WaveFormatEx structure.');
Result:=nil;
Exit;
end; // initialize the format to standard PCM...
FillChar(FWaveFormat^, FMaxFmtSize, 0);
FWaveFormat.wFormatTag := WAVE_FORMAT_PCM;
//FWaveFormat.wFormatTag :=$31;//WAVE_FORMAT_GSM610; set default format to GSM6.10
FWaveFormat.nChannels := 1;
FWaveFormat.nSamplesPerSec := FMaxFmtSize;
FWaveFormat.nAvgBytesPerSec := FMaxFmtSize;
FWaveFormat.nBlockAlign := 1;
FWaveFormat.wBitsPerSample := 8;
FWaveFormat.cbSize := 0;
result:=FWaveFormat;
end;
但用于 Windows Media Audio V2 就不行
我使用的格式如下 wFormatTag :=353;
nChannels := 1; //mono
nSamplesPerSec := 8000;
nAvgBytesPerSec:= 1000; { for buffer estimation }
nBlockAlign:=64; { block size of data }
wbitspersample := 16;
cbSize:=10;大家看看是不是有错???
var FWaveFormat: pWaveFormatEx;
FMaxFmtSize:integer;
begin
FMaxFmtSize:=8000; //8000、11025
GetMem(FWaveFormat, FMaxFmtSize);
if FWaveFormat = nil then begin
showmessage('Error allocating local memory for WaveFormatEx structure.');
Result:=nil;
Exit;
end; // initialize the format to standard PCM...
FillChar(FWaveFormat^, FMaxFmtSize, 0);
FWaveFormat.wFormatTag := WAVE_FORMAT_PCM;
//FWaveFormat.wFormatTag :=$31;//WAVE_FORMAT_GSM610; set default format to GSM6.10
FWaveFormat.nChannels := 1;
FWaveFormat.nSamplesPerSec := FMaxFmtSize;
FWaveFormat.nAvgBytesPerSec := FMaxFmtSize;
FWaveFormat.nBlockAlign := 1;
FWaveFormat.wBitsPerSample := 8;
FWaveFormat.cbSize := 0;
result:=FWaveFormat;
end;
FWaveFormat.wFormatTag := WAVE_FORMAT_PCM;通过
//FWaveFormat.wFormatTag :=$31;//WAVE_FORMAT_GSM610; set default format to GSM6.10
不行,为什么?
我调用别的格式不行
FWaveFormat.wFormatTag :=$31;
FWaveFormat.nChannels := 1;
FWaveFormat.nSamplesPerSec := 8000;
FWaveFormat.nAvgBytesPerSec := 1625;
FWaveFormat.nBlockAlign := 65;
FWaveFormat.wBitsPerSample := 0;
FWaveFormat.cbSize := 2;
意即:系统试图以不被支持的波型格式打开设备用acmFormatChoose没问题!
不晓得如何解决这个问题,每次录音总要别人来选格式总是不好
的demo的时候,遇到同样的问题,请高手出马!