如何直接指定TMMACMConverter.PWaveFormat?(50分)

  • 主题发起人 主题发起人 intelligent113
  • 开始时间 开始时间
I

intelligent113

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,请问,如何在使用MMTools的TMMACM 和 TMMACMConverter的时候,如何直接指定TMMACMConverter.PWaveFormat?
以下代码是通过弹出选择窗口,让用户自己指定的。

if MMACM1.ACMPresent then

begin

if MMACM1.ChooseFormat(ACMConverter.PWaveFormat,'Select Format') then

begin

ACMConverter.PWaveFormat := MMACM1.PWaveFormat;
end;

end;


如果我要选择的格式是mp3 11025Hz ,16bit ,Mono,请问如何实现?
 
procedure TMainForm.btnStartClick(Sender: TObject);
var
wfx: TWaveformatEx;

begin

if MMACM1.ChooseFormat(nil,'Select Format') then

begin

// setup a source PCM format
pcmBuildWaveHeader(@wfx,16,1,22050);

// alloc a buffer for conversion
FSrcBuffer := GlobalAllocPtr(GPTR, 4096);

// setup our conversion instance
FPACMConvert := acmbegin
Convert(@wfx,MMACM1.PWaveFormat,
FSrcBuffer,4096,True);
if (FPACMConvert = nil) then

raise Exception.Create('Unable to convert to destination format');
end;

end;
 
您好,我的意思是不要出现那个
MMACM1.ChooseFormat 窗口,而自己指定格式,请您帮助,
万分感激
谢谢!
 
你试试:
procedure TMainForm.btnStartClick(Sender: TObject);
var
wfx: TWaveformatEx;
begin

// setup a source PCM format
pcmBuildWaveHeader(@wfx,16,1,22050);

// alloc a buffer for conversion
FSrcBuffer := GlobalAllocPtr(GPTR, 4096);

// setup our conversion instance
FPACMConvert := acmbegin
Convert(@wfx,MMACM1.PWaveFormat,
FSrcBuffer,4096,True);
if (FPACMConvert = nil) then

raise Exception.Create('Unable to convert to destination format');

// The destination buffer is allocated from acmbegin
Convert
FDstBuffer := FPACMConvert.lpDstBuffer;

{ create a destination file }
MMWaveFile1.Wave.CreateFile('C:/TEST.WAV',MMACM1.PWaveFormat);
end;

 
您好,我尝试了您的方法,应该行不通。
我查了一些资料,从目前我得到的信息来看,好像必须跳出那个codec的选择窗体。
避开那个窗体的而直接指定的,好像没有见到谁给出了方法。however,对于有一些特别的codec,比如GSM 6.10就可以直接指定,而其他的好像不太行。

欢迎您指正!
 
呵呵,问题已经得到了圆满的解决。是我们对PWaveFormatEx的理解的问题,
在您的帮助下,我已经解决了问题,非常高兴认识您!希望您日后能够多多帮助我这个
后辈!感谢
 
后退
顶部