怎样剔除 ACM 控件中的 “选择声音对话框”(150分)

  • 主题发起人 主题发起人 liuaono1
  • 开始时间 开始时间
L

liuaono1

Unregistered / Unconfirmed
GUEST, unregistred user!
var
fc:TACMFORMATCHOOSEA;
res:longint;
Format:PWaveFormatEx;



procedure TForm1.Button1Click(Sender: TObject);
var
maxsizeformat:longint;
begin

acmMetrics(0, ACM_METRIC_MAX_SIZE_FORMAT, MaxSizeFormat);
getmem(Format, MaxSizeFormat);
Format^.wFormatTag :=$31;
//WAVE_FORMAT_GSM610;
set default format to GSM6.10
Format^.nChannels := 1;
//mono
Format^.nSamplesPerSec := 8000;
Format^.nAvgBytesPerSec:= 1625;
{ for buffer estimation }
Format^.nBlockAlign:=65;
{ block size of data }
Format^.wbitspersample := 0;
Format^.cbSize:=2;
ACMWaveOut1.Open(Format);
ACMWaveIn1.Open(Format);

........

end;



我想自己设置缺省的声音选项,可是以上程序段编译老是通不过,
显示“ problem creating playing handle32”
意即:系统试图以不被支持的波型格式打开设备


如若调用 format:=ACMDialog1.OpenDialog 则可通过,检查ACMDialog.pas 发现因为以下
一句调用了选择声音对话框,但不知怎样将它消除。(我只需该对话框的缺省值____见上值
,故不需要弹出对话框)

......

res:=acmFormatChoose(fc);
//display the ACM dialog box
result:=nil;
if res=MMSYSERR_NOERROR then
result:=fc.pwfx;
//return the pointer to waveformatex structure

......

烦劳各位大侠不吝指点。
 
是因为你设置的格式$31不对,换一个....
 
正是在此
Format^.wFormatTag :=$31;
//WAVE_FORMAT_GSM610;
set default format to GSM6.10
 
to : caowei,房客

Format^.wFormatTag :=$31;
设置没错!
我通过调用 format:=ACMDialog1.OpenDialog 后选缺省值GSM6.10并确认,
这时检查Format^.wFormatTag 值确为$31;


帮帮忙,看看还有其它问题吗?
 
其实此句是 ACMDialog 控件中的原句:(缺省值)
fc.pwfx.wFormatTag :=$31;
//WAVE_FORMAT_GSM610;
set default format to GSM6.10

:-)
 
HELP!! SOS!
 
Case WAVE_FORMAT_GSM610 ' Initialize Wave Format - WAVE_FORMAT_GSM610
.wFormatTag = WAVE_FORMAT_GSM610 ' wave format type
.nChannels = 1 ' number of channels - mono
.nSamplesPerSec = c8_0kHz ' sample rate kHz
.nAvgBytesPerSec = 1625 ' Bytes/Sec
.nBlockAlign = 65 ' block size of data
.wBitsPerSample = 0 ' bits/sample of - not used.
.cbSize = 2 ' extra bytes used for WaveFormatEx
.xBytes(0) = &H40 ' Fact Chunk - Byte 0
.xBytes(1) = &H1 ' Fact Chunk - Byte 1
 
to un1 :

通不过耶,是说明文字吧!
 
他用的是VB,呵呵....
 
救救我! 哪位好心的Delphi高手!
另:我真想改变一下控件的采样时间,控件的声音采样时间为一秒,省去网络传输的
时间不算,妈呀,这边过去的声音,等再听到那边的回答,最少已是两秒的延迟了,
真受不了(我想做双方同时通话,同电话差不多的)。
msacm.pas 中的定义没提到这点,我真想了解这方面的资料,是否微软的netmeeting的
通话延迟也充分说明了系统调用的默认采样时间单位只能为一秒?
 
延时的问题不太好解决....
不知道有没有高手知道啊?
 
这个问题终于被我解决啦!

<a href=http://www.avsuper.com>href=http://www.avsuper.com</a>,在"免费源码"里面.
 
此段代码可以用
procedure TForm1.Button1Click(Sender: TObject);
var format: array[0..50] of char;
tmpformat: TWaveFormatEx;
i: WORD;
begin

fillchar(format, 50, 0);
tmpformat.wFormatTag := 49;
tmpformat.nChannels := 1;
tmpformat.nSamplesPerSec := 8000;
tmpformat.nAvgBytesPerSec := 1625;
tmpformat.nBlockAlign := 65;
tmpformat.wBitsPerSample := 0;
tmpformat.cbSize := 2;
move(tmpformat, format, sizeof(tmpformat));
i := $140;
move(i, format[sizeof(tmpformat)], 2);
if format = nil then
exit;
ACMWaveOut1.Open(@format);
ACMWaveIn1.Open(@format);
end;
 
遇到同样问题!
但是我发现用acm控件延时严重
可能有1~2“
gz
 
可以这样解决
不用acmdialog控件
加上*qing同志的代码:)
 
请问一下,wFormatTag这个值从那里可以查到呢?
 
TWaveFormatEx这出错,值从何来呢
 
To:caowei
http://www.avsuper.com
没有“免费代码”这一页呀?
 

const
AudioFormatGSM8K: array[1..50] of byte=($31, $00, $01, $00, $40, $1F, $00, $00, $59, $06, $00,
$00, $41, $00,$00, $00 , $02, $00, $40, $01, $00, $00, $00, $00, $00, $00, $00, $00,$00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00, $74, $B4, $44, $00, $F8, $6C, $CD, $00, $44, $10);
begin

ACMWaveOut.Open(@AudioFormatGSM8K );

ACMWaveIn.Open(@AudioFormatGSM8K );
end;
 
后退
顶部