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

  • 主题发起人 主题发起人 liuaono1
  • 开始时间 开始时间
un1说的才是正确的。
如果采用GSM610的格式 那么在 TWaveFormatEx 结构体的后面应当还有一个word的参数。
即就是 un1说的
xBytes;

例子:

type
tWAVEFORMATEX = record
wFormatTag: Word;
{ format type }
nChannels: Word;
{ number of channels (i.e. mono, stereo, etc.) }
nSamplesPerSec: DWORD;
{ sample rate }
nAvgBytesPerSec: DWORD;
{ for buffer estimation }
nBlockAlign: Word;
{ block size of data }
wBitsPerSample: Word;
{ number of bits per sample of mono data }
cbSize: Word;
{ the count in bytes of the size of }
xBytes:Word;
{ 这个我不知道。 }
end;



var
tmpformat: tWAVEFORMATEX;
begin

tmpformat.wFormatTag:=49;
tmpformat.nChannels:=1;
tmpformat.nSamplesPerSec:=8000;
tmpformat.nAvgBytesPerSec:=1625;
tmpformat.nBlockAlign:=65;
tmpformat.wBitsPerSample:=0;
tmpformat.cbSize:=2;
tmpformat.xBytes:=320;
//320=$140
ACMWaveOut.Open(@AudioFormatGSM8K);
ACMWaveIn.Open(@AudioFormatGSM8K);
end;




 
写错了 :)
var
tmpformat: tWAVEFORMATEX;
begin

tmpformat.wFormatTag:=49;
tmpformat.nChannels:=1;
tmpformat.nSamplesPerSec:=8000;
tmpformat.nAvgBytesPerSec:=1625;
tmpformat.nBlockAlign:=65;
tmpformat.wBitsPerSample:=0;
tmpformat.cbSize:=2;
tmpformat.xBytes:=320;
//320=$140
ACMWaveOut.Open(@tmpformat);
ACMWaveIn.Open(@tmpformat);
end;

 
up,请问楼上的最近在不?有问题要问你
 
都这么长时间没有好好的上来了。说吧
 
你说的那几种方法我用不了
 
1.
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;


一样报错的

 
除了PCM格式外,其他的不能直接给定
 
戏浪儿的方法是正确的,我试过。
但我还有些疑问,通过 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 DivWmado

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;
 
各位玩ACM的来帮个忙喽
 
Type
TGSM610=packed record
wFormatTag: Word;
{ format type }
nChannels: Word;
{ number of channels (i.e. mono, stereo, etc.) }
nSamplesPerSec: DWORD;
{ sample rate }
nAvgBytesPerSec: DWORD;
{ for buffer estimation }
nBlockAlign: Word;
{ block size of data }
wBitsPerSample: Word;
{ number of bits per sample of mono data }
cbSize: Word;
{ the count in bytes of the size of }
wSamplesPerBlock:word;
end;

var
Format:pointer;
GSM610:TGSM610;
begin

with GSM610do

begin

wFormatTag:=$31;
nChannels:=1;
wBitsPerSample:=0;
nSamplesPerSec:=8000;
nBlockAlign:=65;
nAvgBytesPerSec:=1625;
cbSize:=2;
wSamplesPerBlock:=$140;
end;

Format:=@GSM610;
FACMWaveIn.Open(Format);
FACMWaveOut.Open(Format);
 
使用acm控件进行语音传输,但是随着时间的推移,延时会变的越来越大。
刚刚开始的时候大概0.5s,但是过了一会以后,就会变成3s左右,开的时间越长,变的越大,而且程序占用的内存也变大,线程数变多。
不知道有什么解决的方法。
 
ACM控件每open,close一次,都会增加5个句柄,而且内存占用增加100k,这个问题怎么解决啊。。。。。
 
后退
顶部