怎样跳过 ACM 控件中的 “选择声音对话框”

verylihai 2003-12-29 03:51:58
通过 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;
...全文
123 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovestl 2004-02-07
  • 打赏
  • 举报
回复
跟我联系我发一个DEMO给你,我自已写的,

MSN:lovestl@hotmail.com
QQ:123726969,注明一下,就OK
晨曦hoho 2004-02-05
  • 打赏
  • 举报
回复
已经给你留言了
intelligent113 2004-02-03
  • 打赏
  • 举报
回复
呵呵,问题我已经解决了,想知道的就给我写信吧,完全是我们对acmFormatChoose的了解太片面造成的
intelligent113 2004-02-01
  • 打赏
  • 举报
回复
请问这个问题解决了吗?有人给出好的解决方法吗?是否是windows的bug?我参考MMTools
的demo的时候,遇到同样的问题,请高手出马!
zangqi 2004-01-16
  • 打赏
  • 举报
回复
显示“ problem creating playing handle32”
意即:系统试图以不被支持的波型格式打开设备

用acmFormatChoose没问题!




zangqi 2004-01-16
  • 打赏
  • 举报
回复
在我的机器上PCM格式wFormatTag:=$1可以,GSM610 wFormatTag:=$31就不可以。好奇怪!


FWaveFormat.wFormatTag :=$31;
FWaveFormat.nChannels := 1;
FWaveFormat.nSamplesPerSec := 8000;
FWaveFormat.nAvgBytesPerSec := 1625;
FWaveFormat.nBlockAlign := 65;
FWaveFormat.wBitsPerSample := 0;
FWaveFormat.cbSize := 2;
晨曦hoho 2004-01-16
  • 打赏
  • 举报
回复
楼上的说对了,用acmFormatChoose就没问题!
不晓得如何解决这个问题,每次录音总要别人来选格式总是不好
晨曦hoho 2004-01-15
  • 打赏
  • 举报
回复
ASDC001(ASDC001) 这样确实可行,对于GSM610,我试过至少三种方法,完全成功
但用于 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;

大家看看是不是有错???
ASDC001 2004-01-15
  • 打赏
  • 举报
回复
我的是这样用的,试试看
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;
晨曦hoho 2004-01-15
  • 打赏
  • 举报
回复
zangqi(回眸一笑) 可以,但是这是使用GSM610格式的
我调用别的格式不行
ASDC001 2004-01-15
  • 打赏
  • 举报
回复
不好意思,就当那句不行吧,
因为对这个了解不多,也是在网上看见的
呵呵
zangqi 2004-01-15
  • 打赏
  • 举报
回复
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;


FWaveFormat.wFormatTag := WAVE_FORMAT_PCM;通过


//FWaveFormat.wFormatTag :=$31;//WAVE_FORMAT_GSM610; set default format to GSM6.10
不行,为什么?
晨曦hoho 2004-01-14
  • 打赏
  • 举报
回复
有办法吗
晨曦hoho 2004-01-12
  • 打赏
  • 举报
回复
我也是随便在网上下载了一个,它没有版本的,D567都可以用
koy0755 2004-01-11
  • 打赏
  • 举报
回复
我下载的acm在delphi7上用不了,你们的acm 能在delphi7上用吗?如果可以能不能给我发一个?先谢谢了。

admin@168mm.com
晨曦hoho 2004-01-10
  • 打赏
  • 举报
回复
那我要请教了,在格式选择对话框中,如何自己设置选择最下面的那种
Windows Media Audio 2
fangjx 2004-01-08
  • 打赏
  • 举报
回复
可以阿。我就时自己设置FORMAT
晨曦hoho 2004-01-07
  • 打赏
  • 举报
回复
这样不行,虽然不报错,但是不能正常采集声音,采集后回放是没有任何声音
上面那几个值是我根踪ACM得出的,但就是不行啊,GSM610可以
xzhifei 2004-01-05
  • 打赏
  • 举报
回复
自己设置ACMWaveFormat

WaveFormatEx.wFormatTag:=1;
WaveFormatEx.nChannels:=1;
WaveFormatEx.nSamplesPerSec:=8000;
WaveFormatEx.nAvgBytesPerSec:=WaveFormatEx.nSamplesPerSec;
WaveFormatEx.nBlockAlign:=1;
WaveFormatEx.wBitsPerSample:=8;
WaveFormatEx.cbSize:=0;
ACMWaveFormat.Format:=WaveFormatEx
luckyboy97 2004-01-05
  • 打赏
  • 举报
回复
帮你顶
加载更多回复(1)

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧