Seite 1 von 1
.wav Datei Spalten
Verfasst: Freitag 22. Oktober 2021, 17:24
von Bio Salami
Hey,
ich bin gerade dabei eine AI auf Stimm Erkennung zu trainieren. Dafür müsste ich meine .wav Datei in kleinere zb. 5 Sekunden lange Dateien speichern. Was wäre der einfachste weg?
Re: .wav Datei Spalten
Verfasst: Freitag 22. Oktober 2021, 18:41
von noisefloor
Hallo,
einfach stumpf in 5s Schnipsel teilen oder an passender Stelle (also z.B. immer wenn Stille ist) teilen?
Wenn du eine grafischen Editor brauchst: Audacity ist ein ganz guter, kostenloser Audioeditor.
Gruß, noisefloor
Re: .wav Datei Spalten
Verfasst: Freitag 22. Oktober 2021, 18:55
von __deets__
WAV files liest man üblicherweise als numpy arrays ein, und zusammen mit der Samplerate kannst du einfach Teile da raus schnipseln.
Re: .wav Datei Spalten
Verfasst: Samstag 23. Oktober 2021, 07:46
von Bio Salami
@noisefloor,
ich könnte es auch Manuel machen. Aber ich bräuchte ein Programm welches Audio Dateien (zb. 10 Minuten lang) in 2 Sekunden lange Dateien speichert.
Re: .wav Datei Spalten
Verfasst: Samstag 23. Oktober 2021, 08:09
von __blackjack__
In der Standardbibliothek gibt es das `wave`-Modul, mit dem man sich so etwas relativ leicht schreiben könnte.
Re: .wav Datei Spalten
Verfasst: Samstag 23. Oktober 2021, 10:43
von nezzcarth
Bio Salami hat geschrieben: Freitag 22. Oktober 2021, 17:24
Dafür müsste ich meine .wav Datei in kleinere zb. 5 Sekunden lange Dateien speichern. Was wäre der einfachste weg?
Meiner Meinung nach ist
SoX ein besonders einfacher Weg (vor allem unter Unix-Systemen; unter Windows geht es aber wohl auch irgendwie). Die
Manpage zeigt ein konkretes Beispiel, um eine Wave-Datei in 30-Sekunden-Schnipsel zu teilen.
Re: .wav Datei Spalten
Verfasst: Samstag 23. Oktober 2021, 11:39
von ThomasL
Lies dich mal in diesen Thread hier ein, insbesondere die Antworten liefern multiple Lösungen für dein Problem.
https://stackoverflow.com/questions/172 ... -in-python
Re: .wav Datei Spalten
Verfasst: Samstag 23. Oktober 2021, 11:52
von rogerb
Ich, persönlich finde die von __deets__ vorgeschlagene Methode mit numpy (scipy) am schönsten. Da hat man komfortablen Zugriff auf die Daten und kann zum Beispiel auch schön plotten.
Code: Alles auswählen
import numpy as np
from scipy.io import wavfile
import matplotlib.pyplot as plt
def plot(audio, start, duration):
rate, data = audio
stop = start + duration
fig, ax = plt.subplots(2)
fig.suptitle(f"Start: {start}s, Dauer: {duration}s")
start_index = int(start * rate)
stop_index = int(stop * rate)
samples = int(duration * rate)
time_data = np.linspace(start, stop, samples)
ax[0].set_title("Channel 1")
ax[1].set_title("Channel 2")
ax[0].grid(True)
ax[1].grid(True)
ax[0].plot(time_data, data[start_index:stop_index, 0])
ax[1].plot(time_data, data[start_index:stop_index, 1])
plt.show()
def split(audio, seconds, max_parts=None):
rate, data = audio
total_samples, _channels = data.shape
part_samples = seconds * rate
indices = np.arange(part_samples, total_samples, part_samples)
for num, part in enumerate(np.vsplit(data, indices)):
if max_parts and num >= max_parts:
return
yield (rate, part)
def main():
audio = wavfile.read("sound.wav")
plot(audio, start=10, duration=10)
for num, part in enumerate(split(audio, seconds=2, max_parts=2)):
rate, data = part
wavfile.write(f"sound_part_{num:04d}.wav", rate, data)
if __name__ == "__main__":
main()
Edit: optionaler Parameter um die Anzahl der Ausgabedateien zu begrenzen
Re: .wav Datei Spalten
Verfasst: Sonntag 24. Oktober 2021, 09:39
von tonikae
rogerb hat geschrieben: Samstag 23. Oktober 2021, 11:52
Ich, persönlich finde die von __deets__ vorgeschlagene Methode mit numpy (scipy) am schönsten. Da hat man komfortablen Zugriff auf die Daten und kann zum Beispiel auch schön plotten.
Da ist IMO generell der beste Weg Multimediadatei (nicht nur Audio, sondern auch Bilder) zu bearbeiten...sie in ein Array zu laden. Allerdings würde ich dafür nicht unbedingt Python verwenden.
Nicht böse sein, aber andere Sprachen kriegen das damit deutlich einfacher gebacken, Audio/Bilder/Schnipsel davon in einem Array zu bearbeiten.
Bsp(nicht in Python)
Code: Alles auswählen
using FileIO, Plots
data = load("Hells Bells.flac")[1][30750:689971,1]
bd,slen = 6000, length(data)
anim = @animate for a = 1:50
plot(data, grid=false, legend=false, layout=(3, 1))
plot!(data[90a:90a+bd], legend=false, annotations=(bd,.6,text(a,12,:right)), lc=:acton, sp=2)
plot!(reverse(data), legend=false, xlabel="slen: $slen", lc=:orange, sp=3)
end;gif(anim,"animation.gif", fps=10)
Mit den paar Zeilen kriegt man das sogar animiert.
https://drive.google.com/file/d/1pM5ieA ... SOxQV/view
Re: .wav Datei Spalten
Verfasst: Sonntag 24. Oktober 2021, 12:06
von rogerb
Nicht böse sein, aber andere Sprachen kriegen das damit deutlich einfacher gebacken, Audio/Bilder/Schnipsel davon in einem Array zu bearbeiten.
Schönes Beispiel! Jeder hat halt seine Lieblingssprache, bzw. Sprache in der man sich am besten auskennt. Wenn ich nachts nicht schlafen müsste würde ich wahrscheinlich auch noch Julia lernen