Najbolja praksa za rad sa nizovima

Baby Yoda

Contributor
Poruka
21.755
Nebitan je programski jezik koji koristite. Problem o kojem govorim, a koji bih želeo da formatiran inteligentno, a ne na mišiće, jeste:

Imam dva niza. U jednom nizu imam za svako slovo audio (mp3 fajl) dok sa druge strane imam string (koji mogu tretirati kao niz). Cilj je da se, dok loopujem kroz niz (string) za svako slovo nadje odgovarajući audio fajl koji bih spojio u jedan sample. Ne treba mi kod za rad sa audio bibliotekom, već samo logika za povezivanje ove celine. Ne bih voleo da imam sto if i else if..

Siguran sam da postoji pametnije rešenje. Kako to iskusni programeri rešavaju?
 
Ja bih koristio dve WHILE ili FOR petlje (jednu u drugoj): prva da prolazi kroz STRING, karakter po karakter, a druga svaki taj karakter da upoređuje sa AUDIOSTRINGOM, karakter po karakter. Bez silnih IFova

Nadam se da si me razumeo :confused:
Da, razumeo sam osnovni princip i svakako je to lako uraditi ali je zadatak malo kompleksniji od toga.

Ako je rečenica ovog tipa: "Marija voli jabuke".

Python:
str_sample = 'Marija voli jabuke'
audio_list = ['a', 'b', 'c', 'd', 'e'] # I tako dalje da ne pisem svako slovo

Ja znam da su slova poredjana onako kako trebaju biti, ali string nije tako poređan. Sada bi lako mogli da kažemo: Pa okej, ti samo pronađi u drugom nizu prema indeksu gde je i uzmi taj audio. Da, to i želim. Ali taj niz sadrži audio elemente, a ne nešto što je moguće porediti. Ne mogu porediti slovo A sa mp3 fajlom :D

U tome je problem celog zadatka. Pronaći način da na osnovu unetog slova pronađe u nizu sa mp3 fajlovima odgovarajući zvuk za to slovo.
 
Ok, shvatio sam kako da uradim na jedan pomalo čudan način. Napisaću listu svih slova azbuke, a zatim, kada pretražujem string, samo ću porediti i naći indeks gde se nalazi dato slovo. Pošto je svaki audio fajl takođe na istom indeksu u nekoj drugoj listi, onda ću se voditi tim indeksom i sve će biti sasvim okej.

U principu, nije ovo bilo tako teško skontati, nego me je mrzelo da razmišljam, pogledao 2 minuta i odustao. Hahahah. Sada sam pogledao 5 i jasno mi je. :mrgreen:
 
Ali audio fajl je niz slova... glup sam ne razumem...
Nije audio fajl niz slova. Audio fajl je istinski mp3 fajl.

Screenshot_1.png


Screenshot_2.png


S obzirom da je svaki zvuk unutar liste, ja ne mogu da pretražim ime fajla jer to nije tekst..
 
Aaaa ti imas rec i niz slova koji predstavljaju zvuke? Ti hoces da rec bude izgovorena tako sto ces naci slovo po slovo odgovarajuci zvuk?
Tako je. I sve sam to sada sredio. To je rešeno. Ali mi se javlja sada programerski problem i to ovakav:

Kod:
RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
  warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)

Skinuo sam ffmpeg sa neta, stavio ga u path, instalirao sam i preko pip install ffmpeg i opet ista greška iznova i iznova.
 
Hmmm, to mu je dictionary u pythonu. Mada okej, svejedno sam taj deo serdio, jeste š pristup, ali radi. Samo me **** ovo sada sa ffmpeg glupostima jer nemam blage veze šta je problem, nisam taj lvl da razumem to uopšte.
Pa dictionary ti resava asocijaciju slovo<->ime fajla i lukap je o(1) posto je to hash tabela. ne znam samo popunis dictionary, ako je dobar path ne vidim problem...
 
Ja mislim da grešim sa lokacijom samog fajla, takođe jer mi je dir pogrešan i ne umem sa OS bibliotekom to lepo izvesti. Ako se meni main.py nalazi u whatever folderu. Gledajmo na to kao na root. U tom root folderu imam sounds folder. Kako ja da udjem u sounds folder? Čini mi se da samo dodavanje
"/sounds/a.mp3" ne radi. Mora drugačiji pristup.

Mislim da je definitivno ujeban path.

Screenshot_1.png


Ovo je hijerarhija trenutna.

Screenshot_2.png


Ovo je moj pokušaj da lociram fjal. Mislim da ne može ovako.
 
Ja mislim da grešim sa lokacijom samog fajla, takođe jer mi je dir pogrešan i ne umem sa OS bibliotekom to lepo izvesti. Ako se meni main.py nalazi u whatever folderu. Gledajmo na to kao na root. U tom root folderu imam sounds folder. Kako ja da udjem u sounds folder? Čini mi se da samo dodavanje
"/sounds/a.mp3" ne radi. Mora drugačiji pristup.

Mislim da je definitivno ujeban path.

Pogledajte prilog 1126201

Ovo je hijerarhija trenutna.

Pogledajte prilog 1126202

Ovo je moj pokušaj da lociram fjal. Mislim da ne može ovako.
Stavi ili apsolutnu stazu ili ne znam odakle python pokrece iz kog working dira pa odatle relativno... ne koristim python.
btw fajlovi ne moraju da se zovu a.mp3 ukoliko koristis dictionary...
 
Stavi ili apsolutnu stazu ili ne znam odakle python pokrece iz kog working dira pa odatle relativno... ne koristim python.
btw fajlovi ne moraju da se zovu a.mp3 ukoliko koristis dictionary...
Da, da, znam da ne moraju tako da se zovu fajlovi, može samo a, s obzirom da je to ključ, potpuno je nebitno.
Ma, nadjem ja putanju:

Python:
import os
current_directory = os.getcwd()

I probam primeniti:

Python:
a_sound = AudioSegment.from_file(f"{current_directory}/sounds/a.mp3", format="mp3")

Ali greška veli:
Screenshot_2.png


Screenshot_1.png
 
Tako je. To sam rešio mada je ovo \ pravilo problem jer je escape. I onda sam morao koristiti raw string da bih ignorisao to XD
No, svejedno nije upalilo. Jesam dobio ispravnu putanju, ali nisam rešio problem sa onim ffmpeg. Tu nešto ne štima i to je glavni problem.
 
Ovo je inače funkcija koja izbacuje grešku:

Python:
def get_encoder_name():
    """
    Return enconder default application for system, either avconv or ffmpeg
    """
    if which("avconv"):
        return "avconv"
    elif which("ffmpeg"):
        return "ffmpeg"
    else:
        # should raise exception
        warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
        return "ffmpeg"
 
Ovo je inače funkcija koja izbacuje grešku:

Python:
def get_encoder_name():
    """
    Return enconder default application for system, either avconv or ffmpeg
    """
    if which("avconv"):
        return "avconv"
    elif which("ffmpeg"):
        return "ffmpeg"
    else:
        # should raise exception
        warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
        return "ffmpeg"
ne znam šta je which

edit:
a verovatno je which od which unix komande koja daje path do exe koji je u pathu...
 
Poslednja izmena:
Uspesno je sacuvao novonastali mp3 fajl. Jedino je problem sto to zvuci glupo. Hahaha. Nema smooth izmedju. Kao da izgovara slovo po slovo jer spajajjci te zvuke on pravi neku internu pauzicu koja meni odmaze.

Moram pronaci da li postoji mogucnost da prilikom konketanacije audio fajlova ne pravi te mini pauzice. Vreme je da spavam. Vazno mi je veoma da sam resio problem sa ffmpeg. Ocekivao sam da ce doci do neke greske u startu. To je neminovno kada se radi sa fajlovima.
 

Back
Top