Конференция "Media" » ACM codec [D7, WinXP]
 
  • Zoom © (07.05.08 00:30) [0]
    Подскажите пожалуйста если кто сталкивался с
    http://homepages.borland.com/torry/vcl/mmedia/audio/acm.zip
    там три компонента ACMDialog ACMWaveIn ACMWaveOut
    позволяют кодиаровать/декодировать на ходу звук чере ACM codec


    почему Delphi7 нормально компилирует этот пакет, не считая сетевых дел, но в процессе выполнения программы происходит ошибка в acmdialog.pas ? процес уходит в  ntdll.DlgBreakPoint :(
    вот в этой функции:
    res:=acmFormatChoose(fc);  

    описанная в msacm.pas ???
  • Zoom © (07.05.08 21:34) [1]
    Также в тех компонентах происходит еще ошибка , опят таки у автора скомпилированный пример работает нормально, у меня почему-то нет... правда неизвестно на кокой Delphi (stud_pe показал 4-5) компилировал но неужели 7ая собирает проект как-то иначе?
    я попробовал принудительно открыть ACMWaveOut1.Open(pw); со следующими параметрами:


    pw.wFormatTag :=$31;   //WAVE_FORMAT_GSM610; set default format to GSM6.10
      pw.nChannels := 1;     //mono
      pw.nSamplesPerSec := 8000;
      pw.nAvgBytesPerSec:= 8000; { for buffer estimation }
      pw.nBlockAlign:=1;      { block size of data }
      pw.wbitspersample := 8;
     // pw.cbSize:= 65535;


    ACMWaveOut1.Open(pw);

    и все равно WaveOutOpen дает ошибку 32 ???
    может кто знает в чем есть существенные отличия в компиляторах напр Delphi3 и Delphi7, особено касаемых типу вызову функции из системных dll ???

    /////////////////////////////////////////
     

    procedure TACMWaveOut.Open(format:PWaveFormatEx);
    var
    waveformat:PWaveFormatEx;
    maxsizeformat,i:integer;
    begin
     if (format<>nil) and (HWaveOut1=nil) then
      begin
        acmMetrics(0, ACM_METRIC_MAX_SIZE_FORMAT,MaxSizeFormat);
        getmem(WaveFormat, MaxSizeFormat);
        move(format^,waveformat^,maxsizeformat);
        HWaveOut1:=new(PHWaveOut);
        //create playing handle with waveformatex structure
        i:=WaveOutOpen(HWaveOut1,0,waveformat,handle,0,CALLBACK_WINDOW or WAVE_MAPPED);
        if i<>0 then
        begin
         showmessage('Problem creating playing handle' + inttostr(i));
         exit;
        end;
        closed:=false;
       end;
    end;
  • Zoom © (08.05.08 03:42) [2]
    Вроде разобрался !
    Прикол в том что функция  acmFormatChoose() в msacm32.dll
    почему-то не хочет дружить с дебагером делфи, программа
    запускается но только не из IDE, может кто знает в чем глюк
    дебагера и как его можно подличить, или этот диагноз не лечится?
    с такими приколами и самому не долго в дурке оказаться :)
  • han_malign © (08.05.08 15:01) [3]

    > ntdll.DlgBreakPoint

    у тебя там случайно Lame MP3 кодек не стоит, с версией 3.93 и ниже?
    Он память повреждает при некоторых условиях(хорошо хоть только в своем контектсе - приложение не валится). Отуда и может вылазить точка останова в проверке целостности кучи...

    Ну и на другие левые кодеки стоит посмотреть, которые вполне могут быть скомпилированны в отладочной версии.

    А отладчик Delphi тут не причем - он все правильно делает - у него в генокоде записанно останавливаться на исключении генерируемом прерыванием
    asm int 3

    которое и дергается в ntdll.DlgBreakPoint...

    Неужто название этой функции никаких ассоциаций не навеяло???
  • Zoom © (08.05.08 17:32) [4]
    Неужто название этой функции никаких ассоциаций не навеяло???

    да я в первый раз полез в дебри мультимедии...

    вот он
    vct3216.acm
    1.6.0.17
    Voxware Audio Compression Manager Driver
    попался !

    Огромнейшее спасибо за совет!
 
Конференция "Media" » ACM codec [D7, WinXP]
Есть новые Нет новых   [133928   +471][b:0][p:0.001]