Bearbeiten Sie WAV-Dateien mit dem Wave-Modul von Python

Hallo zusammen

Es scheint, dass Python standardmäßig mit einem Wave-Modul geliefert wird, und es scheint, dass Sie damit WAV-Dateien lesen und schreiben können. Dieses Mal spielen wir mit einem Programm, das damit eine kurze WAV-Datei erstellt, wobei die zweite Hälfte aus einer langen WAV-Datei ausgeschnitten ist.

Umweltvorbereitung

Ich bin PHPer, daher weiß ich nicht, wie ich die Python-Umgebung vorbereiten soll, aber ich habe ein Docker-Image mit Keras, das ich häufig verwende, also verwende ich dieses. (Obwohl es ziemlich schwer ist) https://hub.docker.com/r/gw000/keras-full/

Außerdem habe ich natürlich nicht den Mut, eine Datei zu erstellen und sie wiederholt auf der Konsole auszuführen, also starte ich jupyter schnell und führe sie über einen Browser aus.

$ docker run --rm -v `pwd`/src:/srv -v `pwd`/data:/data -p 8888:8888 -p 6006:6006 -m 2g gw000/keras-full

Ich war besorgt über den Speicher, deshalb habe ich für alle Fälle 2 GB reserviert. später, http://127.0.0.1:8888 Wenn Sie mit einem Browser zugreifen, wird jupyter ausgeführt. Geben Sie daher das Kennwort [keras] ein und starten Sie.

Laden von WAV

Nachdem die Vorbereitung abgeschlossen ist, lesen wir die Wave-Datei und erhalten die Informationen. Geben Sie Folgendes in den Jupiter ein.

import wave
import struct
from scipy import fromstring, int16

#Datei lesen
wavf = '/data/input/test.wav'
wr = wave.open(wavf, 'r')

#Ruft die Eigenschaften einer Wave-Datei ab
ch = wr.getnchannels()
width = wr.getsampwidth()
fr = wr.getframerate()
fn = wr.getnframes()

print("Channel: ", ch)
print("Sample width: ", width)
print("Frame Rate: ", fr)
print("Frame num: ", fn)
print("Params: ", wr.getparams())
print("Total time: ", 1.0 * fn / fr)

#Holen Sie sich die tatsächlichen Wellendaten und quantifizieren Sie sie
data = wr.readframes(wr.getnframes())
wr.close()
X = fromstring(data, dtype=int16)

Ich werde versuchen, es bisher auszuführen.

Channel:  2
Sample width:  2
Frame Rate:  44100
Frame num:  15884224
Params:  _wave_params(nchannels=2, sampwidth=2, framerate=44100, nframes=15884224, comptype='NONE', compname='not compressed')
Total time:  360.18648526077095

Das folgende Ergebnis wird ausgegeben. Da Kanal 2 ist, können Sie sehen, dass diese Datei in Stereo ist. Sie können auch sehen, dass die Gesamtzeit 360 Sekunden = 6 Minuten beträgt, was eine relativ lange Datei ist.

In Welle exportieren

Als nächstes schreiben wir den gelesenen Inhalt von Anfang an 90 Sekunden lang als weitere Datei aus.

#Berechnen Sie die Anzahl der Frames entsprechend 90 Sekunden
time = 90
frames = int(ch * fr * time)

#Ausgabedaten generieren
outf = '/data/output/test.wav'
Y = X[:frames]
outd = struct.pack("h" * len(Y), *Y)

#Export
ww = wave.open(outf, 'w')
ww.setnchannels(ch)
ww.setsampwidth(width)
ww.setframerate(fr)
ww.writeframes(outd)
ww.close()

Es ist so. Wenn mehrere Kanäle vorhanden sind, erhöht sich die Anzahl der erforderlichen Frames entsprechend, sodass dies berücksichtigt wird. Nachdem Sie die Ausgabedaten erneut in das Zeichenfolgenformat konvertiert haben, möchten Sie sie ausschreiben, indem Sie dieselben Parameter wie beim Lesen angeben. Wenn Sie sich also ansehen, ob die Datei tatsächlich erstellt wurde,

スクリーンショット 2017-06-06 13.53.56.png

Es sieht so aus, als wäre es geschafft.

Zusammenfassung

Dieses Mal habe ich untersucht, wie eine WAV-Datei direkt mit Wave bearbeitet wird, einem Standardmodul von Python. Deshalb spreche ich darüber. .. ..

Diesmal ist es so.

Referenz

http://yukara-13.hatenablog.com/entry/2013/11/09/103848 http://denshi.blog.jp/signal_processing/python/save_sine_wave

Recommended Posts

Bearbeiten Sie WAV-Dateien mit dem Wave-Modul von Python
Erfahren Sie mehr über die Protokollierung mit dem Python-Protokollierungsmodul ①
Ich habe versucht, WAV-Dateien mit Pydub zu synthetisieren.
Speichern Sie das numpy-Array mithilfe des Wave-Moduls in einer WAV-Datei
Erste Schritte mit Pythons Ast-Modul (Verwenden von NodeVisitor)
Versuchen Sie es mit dem Feed-Parser von Python.
Versuchen Sie es mit Pythons Tkinter