-
Народы! Ни фига не понимаю. Вопрос, конечно, может и не мультимедийный, но речь идет о Lame компрессоре. Когда-то я уже им пользовался и все было в порядке, а сечас пишу новый проект и получается фигня: я хочу писать 32 кбита, а реально пишется нечто с переменным битрейтом и звоном каким-то. Т.е. я так понимаю DLL-ка неправильно понимает передаваемые мной параметры. А что не так не могу въехать.
Объявления:
PMp3Rec = ^TMp3Rec; {$A-} TMp3Rec = Record case dwConfig: Cardinal of BE_CONFIG_MP3:( dwSampleRate: Cardinal; byMode: Byte; wBitrate: Word; bPrivate, bCRC, bCopyright, bOriginal: boolean); End; {$A+}
Function beInitStream(Config: Pmp3Rec; dwSamples: Pointer; dwBufferSize: Pointer; PStream: PHBE_Stream): Cardinal; CDecl ; Function beEncodeChunk1(PStream: HBE_Stream; nSamples: Cardinal; pSamples: Pointer; pOutput: Pointer; pdwOutput: Pointer): Cardinal; CDecl; и т.д.
Implementation
Function beInitStream; external 'lame_enc.dll'; Function beEncodeChunk; external 'lame_enc.dll';
И собственно использование:
Var Mp3: TMP3Rec; ...
With Mp3 Do begin dwConfig:=BE_CONFIG_MP3; {BE_CONFIG_MP3 = 0} dwSampleRate:=BaseRec.FDiscr; {44100} If BaseRec.StereoMode Then byMode:=BE_MP3_MODE_STEREO{0} Else byMode:=BE_MP3_MODE_MONO;{3} wBitrate:=BaseRec.BitRate {32}; bPrivate:=False; bCRC:=False; bCopyright:=False; bOriginal:=False; end;
Res:=beInitStream(@Mp3, @dwSamples, @dwBufferSize, @MStream[CurEncBuf^.Left]);
Res:=beEncodeChunk(MStream[CurEncBuf^.Left], dwSamples, A, M, @Z);
Т.е. штука-то работает, тока непонятно как её заставить делать то, что нужно. Впечатление, что неправильно передается эта самая TMP3Rec. Но чего тут не так я не пойму.
Заранее благодарен.
|