» »

python-mp3 datoteke

python-mp3 datoteke

mirkostru ::

Nekatere datoteke .mp3 vsebujejo tudi podatke o naslovu, izvajalcu, imenu albuma, letu izdaje ipd. Do teh podatkov lahko pridemo tako, da celotno datoteko preberemo v niz. Brati jo moramo kot binarno datoteko (tako, kot smo na predavanjih prebrali datoteko .gif). Nato vzamemo samo zadnjih 128 znakov tega niza.

Najprej moramo preveriti, ali so prvi trije znaki tega niza (se pravi, niza, ki vsebuje samo zadnjih 128 znakov celotne datoteke!) enaki "TAG". Če niso, potem .mp3 ne vsebuje zgoraj naštetih podatkov.

Če so prvi trije znaki enaki TAG, potem naslednjih 30 znakov vsebuje naslov pesmi, naslednjih 30 znakov je naslov izvajalca, naslednjih 30 naslov albuma in naslednji štirje leto izdaje. Če je, recimo, naslov pesmi v resnici krajši od 30 znakov, je na koncu naslova ustrezno število znakov \x00. Torej, naslov "Englishman in New York" bi bil zapisan takole
'Englishman in New York\x00\x00\x00\x00\x00\x00\x00\x00'
Celoten opis pesmi pa je takšen:
TAGEnglishman
in New
York\x00\x00\x00\x00\x00\x00\x00\x00Sting\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...Nothing
Like the Sun\x00\x00\x00\x00\x00\x00\x001987
Temu sledijo še drugi podatki, vendar se bomo omejili na te.

za oceno 6
Napišite program, ki izpiše naslove vseh datotek s končnico .mp3 v trenutnem direktoriju in za vsako datoteko izpiše naslov pesmi, izvajalca, ime albuma in leto izdaje. (Pri tem ne izpisujte znakov \x00.) Če teh podatkov za posamezno datoteko ni, naj pove, da jih ni.

za oceno 7
Kot 6, vendar naj se vsi ti podatki izpišejo tudi v datoteko. Vsaka vrstica naj ustreza eni datoteki, v vrstici pa naj bo ime datoteke ter vsi zgoraj našteti podatki. Podatki naj bodo ločeni s tabulatorji. Datoteka naj bo torej takšna, da jo lahko uvozite v Excel (oziroma Calc, če uporabljate Open Office).

za oceno 8
Napišite 6 in 7, poleg tega pa napišite še program, ki datotekam .mp3, ki nimajo podatkov, dodat podatke. Program naj preišče vse poddirektorije trenutnega direktorija. Omejite se lahko na en sam nivo, se pravi, ni se vam potrebno ukvarjati s poddirektoriji poddirektorijev. Za vse datoteke mp3, ki jih najde, naj stori naslednje: če imajo informacije o pesmi (se pravi, če imajo TAG), jih pustite pri miru. Sicer pa na konec datoteke dodate TAG. To pomeni, da morate dodati niz, ki je dolg 128 znakov in se začne s črkami TAG, ki mu sledi ime naslova, izvajalca in tako naprej. Ker mora biti celoten string dolg 128 znakov, podatki, ki smo jih našteli zgoraj, pa imajo le 97 znakov, dodajte na koncu še 31 znakov \x00. Če hočete stvari urediti, kot se šika, pa si oglejte ID3v1 na strani ID3. @ Wikipedia

Odkod dobiti podatke? Takole: naslov pesmi naj bo kar ime datoteke .mp3, samo končnico odbijte. Naslov albuma pa naj bo naslov direktorija. Izvajalca in letnico si izmislite.

EVO ČE JE KATERA DUŠA TAKO DOBRA DA MI POMAGA DAM 50 evrov.AJA PA RABIM DANES

Nuke_H2 ::

EVO ČE JE KATERA DUŠA TAKO DOBRA DA MI POMAGA DAM 50 evrov.AJA PA RABIM DANES

Dobr, da se nisi spomnu vprašat kakšn dan prej ;).

Zgodovina sprememb…

  • spremenil: Nuke_H2 ()

Gandalfar ::

No, pokazi kaj imas do sedaj pa kje se ti ustavi, pa ti bomo pomagali

Isotropic ::

nekaj o tem pise v knjigi learning python, 3 edition

mirkostru ::

potem,ko mi Python izpiše vse datoteke mp3 ne vem kako jih prebrati v niz-naprej bi potem že verjetno šlo

Gandalfar ::

RunoTheDog ::

Tudi jaz bi potreboval nekaj pomoči.Muči me tale del:

"To pomeni, da morate dodati niz, ki je dolg 128 znakov in se začne s črkami TAG, ki mu sledi ime naslova, izvajalca in tako naprej. Ker mora biti celoten string dolg 128 znakov, podatki, ki smo jih našteli zgoraj, pa imajo le 97 znakov, dodajte na koncu še 31 znakov \x00."

Poskušal sem takole:

Podatki = "TAG"+(naslovPesmi+((30-(len(naslovPesmi))*"\x00")+((30-(len("Kaki")))*"\x00")+(30*"\x00")+letnica+(31*"\0xx")
b=file(t,"a")
b.write(Podatki)
b.close()

Gandalfar ::

in kje crkne?

techfreak :) ::

b = file(t, "ab")

Za binary datoteke moraš dodati b.

RunoTheDog ::

Pomotoma sem si zbrisal cel program, tako, da sem ga moral ponovno napisati.;(

Se pravi, rad bi dodal tag tistim datotekam, ki ga nimajo.

Prišel sem do tukaj:

else:#ce nima TAG-a
    naslovPesmi = novaDatoteka.strip(".mp3")
    naslovAlbuma = os.getcwd()
    naslovIzvajalca = "Kaki"#si lahko zmislimo
    letnica = "2009" #si lahko zmislimo

    podatki = "TAG"+naslovPesmi+(30-(len(naslovPesmi))*"\x00"+naslovIzvajalca+
(30-(len(naslovIzvajalca))*"\x00"+naslovAlbuma+(30-(len(naslovAlbuma))*"\x00"
+letnica+31*"\x00" #skupaj morajo imeti 128 znakov

Zgodovina sprememb…

Gandalfar ::

ja .. kje ti crkne? :)

techfreak :) ::

podatki = "TAG" + naslovPesmi + ((30 - len(naslovPesmi)) * "\x00") + naslovIzvajalca + 
((30-len(naslovIzvajalca)) * "\x00") + naslovAlbuma + ((30 - len(naslovAlbuma)) * "\x00")
 + str(letnica) + (31*"\x00")

Oklepaji narobe postavljeni, integer pa string ne smeš mešati (moraš prej pretvoriti).

Zgodovina sprememb…

Gandalfar ::

integer pa string ne smeš mešati (moraš prej pretvoriti


v pythonu lahko:

>>> "f00" * 5
'f00f00f00f00f00'

techfreak :) ::

Govoril sem o tem:
>>> "tekst" + 10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

Gandalfar ::

ah, to pa ne :)

RunoTheDog ::

Hvala obema za pomoč. Sem zaključil na hitro "projekt", ker se mi ni dalo več.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

WebAssembly postal standard

Oddelek: Novice / Brskalniki
418665 (5649) xmetallic
»

Pobegla baza z osebnimi in finančnimi podatki več kot polovice ameriških gospodinjste

Oddelek: Novice / Zasebnost
268824 (6466) MrStein
»

Kako narediti request z "\" v URL-ju

Oddelek: Programiranje
172145 (1420) Horejšio
»

Oddaljeni BSOD

Oddelek: Novice / Varnost
355059 (2946) PrimozR
»

Naprava za predvajanje glasbe

Oddelek: Kaj kupiti
151845 (1587) 7h3_1

Več podobnih tem