Bit po bicie rozkodowac mp3 np. w Pascalu?

0

Witam wszystkich! Mam pewien problem a mianowicie dostałem na zaliczenie pewne zadanie w którym muszę "Bit po bicie rozkodowac mp3 np. w Pascalu" i szczerze mówiąc nie wiem jak sie za to zabrac więc bardzo was proszę o jakieś wskazówki do tego zagadnienia!

0

hmm... bit po bicie? toż to paranormalne! Przecież takiego tekstu :
ID3 TENC Lavf51.12.1˙űd đ i

%˘† ŚmŔą R@ L °ÚĄSGŠhôÉçʦÁ(ˇaň© pJ(CŘG˙HĐ8%CŘF_Ňt GőŇţNÁ(â±:YäiYGő‰ŇÂóJĘhęĂ:V#ůXŤŽ XJÄ˙Ó#JŁ
‰ßó#JŁ˙Đ,—|б3?4,LĎŔ‚ÄŔ·âĆF·âĆF´ĎŇ4™‘_­ 1_­ 1T}
*Č 9Ś|cqË»üÜRnîö”ŕÄ

nic i nikt nie rozkoduje.

0
  1. Pliki Mp3 zaczynają się od nagłówka, który jeśli spróbujesz potraktować jako dźwięk(i) to w najlepszym wypadku usłyszysz jakąś kaszane(podobną do TH ;-) ).
  2. Zacznij od przeczytania opisu formatu MP3.
0
Autre napisał(a)

hmm... bit po bicie? toż to paranormalne! Przecież takiego tekstu :
ID3 TENC Lavf51.12.1˙űd đ i

%˘† ŚmŔą R@ L °ÚĄSGŠhôÉçʦÁ(ˇaň© pJ(CŘG˙HĐ8%CŘF_Ňt GőŇţNÁ(â±:YäiYGő‰ŇÂóJĘhęĂ:V#ůXŤŽ XJÄ˙Ó#JŁ
‰ßó#JŁ˙Đ,—|б3?4,LĎŔ‚ÄŔ·âĆF·âĆF´ĎŇ4™‘_­ 1_­ 1T}
*Č 9Ś|cqË»üÜRnîö”ŕÄ

nic i nikt nie rozkoduje.

oczywiście. a odtwarzacze mp3 zgadują zawartość pliku po nazwie i na bieżąco ściągają wav-y z internetu.
nie mogłem się powstrzymać.

0
dodekam napisał(a)

oczywiście. a odtwarzacze mp3 zgadują zawartość pliku po nazwie i na bieżąco ściągają wav-y z internetu.

Nie znasz się. To po chińsku jest napisane. Wynalazca mp3 był przecież skośnookim Chińczykiem. Odtwarzacz mp3 po prostu zczytuje te dane i odśpiewuje dźwięki. Podobny efekt uzyskałbyś ściągając chiński program do karaoke i łądując odpowiednią czcionkę.

0

Jeżeli ja bym tworzył format mp3 to zamiast krzaków umiściłbym liczby i znaki będące na klawiaturze.

0

Ależ to są liczby, tylko napisane chińską czcionką.

0
Autre napisał(a)

Jeżeli ja bym tworzył format mp3 to zamiast krzaków umiściłbym liczby i znaki będące na klawiaturze.

Nie trzeba było otwierać .mp3 Notatnikiem... wiesz, że mp3 to pliki binarne a z całego zakresu bajtu tylko 0x20-0x7F to normalne, drukowalne ASCII? Niższe wartości to kody kontrolne jak \r czy \n a wyższe to znaki rozszerzone. Krzaki oraz rzeczy, które się w ogole nie skopiowały to w istocie liczby, tak, inty itd. - wkleiłeś początek nagłówka pliku mp3.

p.s. nawet nie wiesz jaką radość sprawiasz sporej części społeczności swoimi kolejnymi postami [rotfl]

0
Autre napisał(a)

Jeżeli ja bym tworzył format mp3 to zamiast krzaków umiściłbym liczby i znaki będące na klawiaturze.

W sumie to świetny pomysł, można by było tworzyć pliki mp3 za pomocą notatnika, a nie jakichś brzydkich hexedytorów. Znacznie skróciłoby to czas pisania utworów - nawet nie wiesz, ile czasu spędza zespół muzyczny nad hexedytorem, żeby poprawnie odtworzyć swoje brzmienie...

0

Yzerman -> poszukaj se na necie specyfikacji formatu MP3, po czym dowiedz się, jak odczytywać dane z plików binarnych w Pascalu (w C to funkcja read, na Pascalu się nie znam).
Autre -> po prostu czysty rotfl ;)
dodekam -> śmiejesz się, ale mi np. zdarzyło się pisać 'z ręki' model 3D w formacie .smd, bo nie miałem pod ręką edytora żadnego ;)

0
Ghostek napisał(a)

Yzerman -> poszukaj se na necie specyfikacji formatu MP3, po czym dowiedz się, jak odczytywać dane z plików binarnych w Pascalu (w C to funkcja read, na Pascalu się nie znam).

A jeśli chodzi o język "C" to jak by to rozkodowanie miało wyglądac bo nie bardzo wiem jak sie za to zabrac?? :-(

0

http://www.oreilly.com/catalog/mp3/chapter/ch02.html
czytasz te pierwsze 32 bity, kopiujesz je np. do tablicy i rozkodowujesz
zakładam, że wiesz, jak się robi odczyt z/zapis do plików.

0

Ja bym napisał strukturę opisującą nagłówek ramki pliku MP3, np.:

struct MP3_FrameHeader
{
 unsigned int frameSync : 11;
 unsigned int audioVersion : 2;
 unsigned int MPEGlayer : 2;
 unsigned int protection : 1;
 unsigned int bitrateIndex : 4;
 unsigned int samplingRateFrequency : 2;
 unsigned int paddingBit : 1;
 unsigned int privateBit : 1;
 unsigned int channelMode : 2;
 unsigned int modeExtension : 2;
 unsigned int copyright : 1;
 unsigned int original : 1;
};

Potem czytasz to przez fread (http://www.cplusplus.com/reference/clibrary/cstdio/fread.html) i gotowe ;)

0

Ghostek ale jak mam zczytac funkcja fread te bity? Zapisac je do pliku i wtedy odczytac?Ale to mi chyba nic nie da!Nie wiem w ogóle jak rozkodowac te bity :-( Byłbym wdzięczny za jakaś jeszcze pomoc!

0

Masz tu coś na dobry początekprogram demo_primo_voto_pic;

var
fi:file of byte;
buf:byte;
bitn:byte;

procedure otwarcie(nazwa:string);
begin
assign(fi, nazwa); reset(fi);
read(fi, buf);
bitn:=0;
end;

function nastbit:byte;
begin
nastbit:=buf and 1;
inc(bitn);
if bitn=8 then begin
read(fi, buf);
bitn:=0
end
end;

function CzytajPole(ilebit:byte):longint;
var r:longint;
begin
r:=0;
while ilebit>0 do begin
r:=r shl 1 + nastBit;
dec(ilebit)
end;
CzytajPole:=r;
end;

var
framesync:word;
begin
otwarcie('mydelkoFa.mp3');
framesync:=czytajPole(11);

close(fi)
end.

0

poprawka, nie wiem w jakiej kolejności zapisane są bityfunction CzytajPole(ilebit:byte):longint;
var r:longint;
begin
r:=0;
while ilebit>0 do begin
dec(ilebit)
{ kolejność bitów ?}
r:=r shl 1 + nastBit; { od najstarszego }
albo, nie wiem nie znam sie
r:=r or (nastBit shl ilebit); { od najmłodszego }

end;
CzytajPole:=r;
end;

0

mgr.Dobrowolski wklepałem ten pierwszy kod do kompilatora i wygenerował mi plik w którym nie wiem do końca czy rozkodował to mp3 czy tylko zamieścił informacje o nim w dziwny sposób! Miałeś może podobnie?

0

Yzerman bidaku, zanim zabierzesz się za MP3, może poczytaj ogólnie o czytaniu plików binarnych. Później, jak już będziesz minimalnie łapał ideę, to sobie spróbuj odczytać nagłówek jakiejś bitmapki - chociaż szerokość, wysokość, ilość kolorów. Jak to zrozumiesz, to spróbuj z MP3 wyciągać informacje w ID3TAG, bo to tylko seekowanie i surowe czytanie z pliku struktur.

Następnie poczytaj o plikach WAV, bo musisz wiedzieć, do czego dekodujesz. Na sieci jest trochę demek, które w Pascalu odtwarzają pliki WAV, oglądnij pobieżnie.

Dekoder MP3 zaczniesz pewnie za kilka tygodni, jak będziesz znał porządnie podstawy. Chociażby to, że MP3 nie dekoduje się bit po bicie, tylko bajt po bajcie. A nawet nie, bo dekodowanie leci ramkami.

Projekt na zaliczenie? Czyli masz kilka miesięcy, nie porywaj się z motyką na słońce, tylko systematycznie zdobywaj informacje i ćwicz umiejętności. Na moje oko, dekoder MP3 to robota na co najmniej kilka tygodni, a realnie to w miesiącach bym liczył. Więc deadline'y też sobie zaplanuj.

I jedziesz. Na tę chwilę obawiam się, że posiadasz zbyt mało wiadomości, żeby zrozumieć jakieś wskazówki, których udzieliłby ci ktoś obeznany z formatem w praktyce.

0

Kiedyś widziałem źródła dekodera mp3 na stronie foobara - może tam jeszcze są, nie wiem.
Ta strona może Cię zainteresuje: http://www.mpg123.de/
Zerknij do svn


(...)

  fp = fopen("../song.mp3","rb");
  if (!fp)
    {
      printf("File not found\r\n");
      return 1;
    }
  
  fseek(fp,0,SEEK_END);
  iMP3Size = ftell(fp) << SHARC_SHIFT;
  printf("File Size = %d bytes\r\n",iMP3Size);
  fseek(fp,0,SEEK_SET);

(...)
      ret = decodeMP3(&mp,buf,len,out,8192/2,&size);
      
      while(ret == MP3_OK) 
        {
          for (ret = 0; ret < size; ret++)
            ((short*)out)[ret] = (short)out[ret];

          fwrite(out,sizeof(short),size,fp);

          iTotalDecode += size;

          ret = decodeMP3(&mp,NULL,0,out,8192/2,&size);
        }
    }

  printf("Done Decoding %d samples\r\n",iTotalDecode);
  fclose(fp);

  return 0;
}

A tak ogólnie, to Google Twoim przyjacielem jest.

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