Python-Librosa Klasörün tümüne Savefig uygulamak

Herkese selamlar. Yüksek lisans sınavımda sunmak için ufak bir proje düşünüyorum. Bölümüm yazılım, bilişim üzerine olmadığı için çok komplike bir proje olmayacak. Fakat bir çıktıyı dışarıda işleme koymaktaki temel mantığı bir anlasam geliştirmeye devam edebilirim.

Bir klasör içerisindeki tüm wav dosyalarının “matplotlib.pyplot.savefig()” komutuyla görüntülerini alıp ayrı bir klasörde toplamayı amaçlıyorum. Tabi mantığı anlamak için soruyu böyle sundum. İlerleyen süreçte sinyalin Power, RMS, LUFS değer tespitleri gibi eklemeler yaparak zenginleştirmeyi amaçlıyorum.

Kullandığım kütüphaneler;

  • Matplotlib (Grafik çizdirme…)
  • Liborosa (STFT, Cqt, frekans dönüştürme gibi işlemler.)
  • Numpy (Array, matris oluşturma vs.)

Belirttiğim gibi klasöre işleme konularında başarılı değilim. Bu konuda kaynak bile belirtseniz yeterli olacaktır. Ya da yapacağım işle ilgili kütüphane, fonksiyon, metod öneriniz varsa paylaşırsanız sevinirim.

Umarım kendimi ifade edebilmişimdir. Teşekkür ederim, iyi çalışmalar.

1 Beğeni

Merhaba. Takıldığınız yer tam olarak neresi?

Yukarıda yazan işlemleri
y, sr=Librosa.load(Llibrosa.ex(“Dosya Yolu”))

Ya da

file = librosa.ex(“Dosya Yolu”)
sr=96000
Librosa.load(file, sr=sr)

  • "Dosya yolu"na klasördeki elemanları teker teker atayacak bir fonksiyon bulmam gerekiyor.

Birinci dosyayı aldı, işleme koydu, bir klasöre çıktısını verdi. İkinci dosyayı aldı işleme koydu, bir klasöre çıktısını verdi… “Kaynak klasörden dosyaları fabrika bandı gibi alacak, işleme tâbi tutacak ve hedef klasöre çıktı verecek.”

https://docs.python.org/3/library/os.html#os.listdir

1 Beğeni

Ben de Python’ın dökümantasyonunu kurcalıyordum. Ekrem Bey teşekkür ederim. Bu konuyu biraz daha pekiştirdiğimde konu havada kalmasın diye araştıranlar için bir örnek bırakmayı planlıyorum.

Tekrardan ilginize teşekkür ederim, iyi çalışmalar.

1 Beğeni

os modülü ile sorununu çözebilirsin.

import os

def yapilacak_islemler_fonksiyonu(dosya_ismi):
    yapilacak_islem(dosya_ismi)

dosya_isimleri = os.listdir(path="klasör_ismi")

for i in dosya_isimleri:
    yapilacak_islemler_fonksiyonu(i)

Yapılacak işlemleri fonksiyon şeklinde tanımlayın.
os modülü ile dosya içindeki tüm dosya isimlerini alın.
For döngüsü ile dosya isimleri üzerinde gezerken tanımladığınız fonksiyonu çağırın.

1 Beğeni

Dün böyle birşey yazmıştım; wave görsellerini Jupyter notebook’ta gösteriyor ama ‘plt.savefig’ yaptığımda sadece ilk işleme aldığı dosyaya uyguluyor. Biraz daha kurcalarsam birşeyler çıkar sanırım.

import librosa as lr
import matplotlib.pyplot as plt
from glob import glob

data_dir="İşlem uygulanacak klasör yolu"
audio_files = glob(data_dir+'/*.wav')

for file in range(0, len(audio_files), 1):
    audio, sfreq = lr.load(audio_files[file])
    time = np.arange(0, len(audio))/sfreq
    fig, ax = plt.subplots()
    ax.plot(time, audio)
    ax.set(xlabel='Time (s)', ylabel='Sound Amplitude', title=[file])
    plt.show()

Bu arada teşekkür ederim. Sizin yazdığınız daha sistematik, nesne yönelimli görünüyor.

*edit: İmla.

Bu linkteki anlatım bence ses verisi analizinin internetteki en yalın ve en açıklayıcı hali. Sonradan konuya gelenler bu sayfada muhtemelen aradığı birçok şeyi daha nesne yönelimli şekilde bulabilir.