WAV konwersja na Dat

0

Mam taki problem - musze plik wav przekonwertować na dat najlepiej chyba zrobić to w Delphi ale jak ktoś wie jak niech da znać. (Chodzi o sygnały żeby później było można otworzyć to w Mad Cad-ie i wykreślić wykres . Prosze o pomoc w raźie pomyślnego działania proszę o kontakt gg: 3194579

0

Na wiki masz specyfikację (i to nie jedną) wava, poszukaj w necie specyfikacji tego formatu, na który chcesz przekonwertować, i połowa roboty za tobą ;)

0

chodziło mi opis calosci jak wykonać bo z tego akurat jestem noga

0

w rupieciach znalazłem coś takiego

type
  c4=array[1..4] of char;
  byte3=array[1..3] of byte;

  twaveChunk=record
    ID:        c4;        {RIFF}
    size:      cardinal;
    rifftype:  c4;        {WAVE}
  end;

  tformatchunk=record
    id:        c4;        {fmt }
    size:      cardinal;

    format:    smallint;
    channels:  word;
    samplesps: cardinal;          // samples per second
    bytesps:   cardinal;          // bytes per second
    align:     smallint;          // chanels * bytes per sample
    bitsps:    smallint;          // bits per sample

//    nic:array[25..128] of byte;
  end;

  tdatachunk=record
    id:        c4;        {data}
    size:      cardinal;
  end;

  pdata = ^tData;

  tdata = record
    sps,
    channels,
    n,
    start:         cardinal;
    case integer of
      1:(  x:  array[0..25000000] of longint);
      2:( a8:  array[0..25000000] of byte);
      3:(a16:  array[0..25000000] of smallint);
      4:(a24:  array[0..25000000] of byte3);
  end;

function jeden(n:string):pdata;
var
  e,i:cardinal;
  wc:twavechunk;
  fc:tformatchunk;
  dc:tdatachunk;
  fi:file;
  p:pdata;
begin
  jeden:=nil;
  assign(fi, n);
  reset(fi, 1);
  blockread(fi, wc, sizeof(wc), e);
  if (e=sizeof(wc)) and (wc.id='RIFF') and (wc.rifftype='WAVE') then begin
    blockread(fi, fc, 8, e);
    if (e=8) and (fc.id='fmt ') then begin
      blockread(fi, fc.format, fc.size, e);
      if (e=fc.size) and ((fc.format=1) or (fc.format=6)) then begin
        repeat
          blockread(fi, dc, 8, e);
          if (e=8) then
            if dc.id='data' then break
            else seek(fi, filepos(fi)+dc.size)
          else break
        until false;
        if (e=8) and (dc.id='data') then begin
          e:= dc.size div
              ((fc.bitsps+7) div 8);
          getmem(p, 16+e*4);
          p^.sps:=fc.samplesps;
          p^.channels:=fc.channels;
          p^.n:=e;
          p^.start:=filepos(fi);
          blockread(fi, p^.x, dc.size, e);
          if e=dc.size then begin
            jeden:=p;
            e:=(fc.bitsps+7) div 8;
            i:=p^.n;
            repeat
              dec(i);   //write(#13, i:10);
              if e=1 then p^.x[i]:=smallint(p^.a8[i])-128
              else if e=2 then p^.x[i]:=p^.a16[i]
              else if e=3 then
                p^.x[i]:=(p^.a24[i,3] shl 8+p^.a24[i,2]) shl 8 + p^.a24[i,1]
              else if e=4 then break
            until i=0;
            if e=1 then begin
              for i:= 0 to p^.n-1 do
                p^.x[i]:=round(10000*(1/(1+exp(-p^.x[i]/16))-0.5))
            end;
//tu dekompresor a-law
          end else begin
            freemem(p, p^.n*4+16);
            writeln('malo danych');
          end
        end else writeln('data')
      end else writeln('format 6')
    end else writeln('fmt')
  end else writeln('riff');
  close(fi);
end;
0

Dzięki wielkie sprawedze czy bedzie działać!!! Ale jeśli ktoś ma jeszcze jakiś sposób to proszę dać znać z góry dzięx

0

No sprawdziłem i niestety nie działa nie wiem czemu prosił bym o kontakt kogoś kto się na tym zna dokładniej

0

Być może plik nie jest w formacie WAVE_FORMAT_PCM lub WAVE_FORMAT_IEEE_FLOAT - wtedy blok "fmt " może mieć większy rozmiar. Dodatkowo czytanie 'na szywno' WAV'a to zły pomysł - między blokiem "fmt " a "data" mogą się znajdować inne bloki.

0

-0x666 umiesz to zrobić to daj znać na gg prośba jak wykonasz to [browar] gwarantowany

0

Umiem, nie zrobię, nie piszę w Delphi ;-P

0

prośba potrzebne mi to obojętne w czym tylko żeby było

1 użytkowników online, w tym zalogowanych: 0, gości: 1