Najbolja praksa za rad sa nizovima

Baby Yoda ♥

Contributor
Poruka
18.189
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?
 

Baby Yoda ♥

Contributor
Poruka
18.189
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.
 

Baby Yoda ♥

Contributor
Poruka
18.189
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:
 

Baby Yoda ♥

Contributor
Poruka
18.189
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..
 

bmaxa

Buduća legenda
Poruka
25.894

Baby Yoda ♥

Contributor
Poruka
18.189
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.
 

bmaxa

Buduća legenda
Poruka
25.894
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...
 

Baby Yoda ♥

Contributor
Poruka
18.189
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.
Poruka je automatski spojena:

Screenshot_1.png


Ovo je hijerarhija trenutna.

Screenshot_2.png


Ovo je moj pokušaj da lociram fjal. Mislim da ne može ovako.
 

bmaxa

Buduća legenda
Poruka
25.894
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.
Poruka je automatski spojena:

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...
 

Baby Yoda ♥

Contributor
Poruka
18.189
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
 

Baby Yoda ♥

Contributor
Poruka
18.189
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"
 

bmaxa

Buduća legenda
Poruka
25.894
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:

Baby Yoda ♥

Contributor
Poruka
18.189
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.
 

Top
  Blokirali ste reklame
Dragi prijatelju, nemojte da blokirate reklame - isključite Ad Blocker na Forumu, jer će tako mesto vaših susreta na Krstarici ostati besplatno za korišćenje.