Audio-Wellenform-Anzeige in Python

Einführung

Ein Memo, als ich den Code schrieb, um die Wellenform der Stimme anzuzeigen. Es ist einfach, librosa.display.waveplot zu verwenden, eine Bibliothek namens librosa. Da jedoch ein Fehler auftritt, wenn die Anzahl der Daten in der Audiodatei groß ist, wird auch die Methode zur Anzeige mit matplotlib.pyplot beschrieben.

Verwendung von librosa.display.waveplot

Der einfachste Weg.

Code

import librosa

def make_waveform_librosa(filename):
    y, sr = librosa.load(filename)
    librosa.display.waveplot(y, sr=sr)

make_waveform_librosa("test.mp3")

Ergebnis

image.png Wenn jedoch die Anzahl der Daten in der zu lesenden Audiodatei groß ist, kann es zu OverflowError: Überschreiten des Zellenblocklimits kommen und die Wellenform wird möglicherweise nicht richtig angezeigt.

Verwendung von matplotlib.pyplot

Da die Blockgröße des Aggs, das am hinteren Ende von matplotlib ausgeführt wird, geändert werden kann, ist es möglich, auch dann zu verarbeiten, wenn die Anzahl der Daten in der Audiodatei groß ist.

Code

import matplotlib.pyplot as plt
import matplotlib
import librosa

def make_waveform_pyplot(filename):
    y, sr = librosa.load(filename)
    totaltime = len(y)/sr
    time_array = np.arange(0, totaltime, 1/sr)
    mpl.rcParams['agg.path.chunksize'] = 100000
    fig, ax = plt.subplots()
    formatter = mpl.ticker.FuncFormatter(lambda s, x: time.strftime('%M:%S', time.gmtime(s)))
    ax.xaxis.set_major_formatter(formatter)
    ax.set_xlim(0, totaltime)
    ax.set_xlabel("Time")
    ax.plot(time_array, y)
    plt.show()

make_waveform_pyplot("test.mp3")

Die Blockgröße wurde wie folgt geschrieben, wenn auf [hier] verwiesen wurde (https://matplotlib.org/xkcd/users/customizing.html), daher habe ich sie entsprechend auf 100000 eingestellt.

### Agg rendering
### Warning: experimental, 2008/10/10
#agg.path.chunksize : 0           # 0 to disable; values in the range
                                  # 10000 to 100000 can improve speed slightly
                                  # and prevent an Agg rendering failure
                                  # when plotting very large data sets,
                                  # especially if they are very gappy.
                                  # It may cause minor artifacts, though.
                                  # A value of 20000 is probably a good
                                  # starting point.

Ergebnis

image.png Ich konnte dasselbe wie librosa.display.waveplot ausgeben.

abschließend

Da librosa.display.waveplot auch intern matplotlib verwendet, denke ich, dass es möglich sein wird, es anzuzeigen, indem mit Chunksize auf die gleiche Weise gespielt wird, aber ich denke, dass es notwendig ist, direkt mit dem Code der Bibliothek zu spielen.

Recommended Posts

Audio-Wellenform-Anzeige in Python
Zeigen Sie eine Liste der Alphabete in Python 3 an
Wellenformhüllkurve in Python
Zeichnen Sie MP3-Wellenformen in Python
Zeigen Sie UTM-30LX-Daten in Python an
Objektäquivalenzbeurteilung in Python
Implementierung der schnellen Sortierung in Python
Zeigen Sie ein Histogramm der Bildhelligkeitswerte in Python an
Zeitdelta in Python 2.7-Serie teilen
MySQL-automatische Escape-Funktion von Parametern in Python
Umgang mit JSON-Dateien in Python
Implementierung eines Lebensspiels in Python
Zeigen Sie Zeichen wie AA in Python an
[ev3dev × Python] Anzeige, Sprache, LED-Steuerung
Separate Python-Diagramme (Memo)
Das Gesetz der Zahlen in Python
Implementierung der ursprünglichen Sortierung in Python
Reversibles Verwürfeln von Ganzzahlen in Python
Anzeigen von LaTeX-Notationsformeln in Python, matplotlib
[Python, Julia] 3D-Anzeige in der Jupyter-Mayavi-Bibliothek
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
Überprüfen Sie das Verhalten des Zerstörers in Python
Übung, dies in Python zu verwenden (schlecht)
Allgemeine Relativitätstheorie in Python: Einführung
Ausgabebaumstruktur von Dateien in Python
Vergleich japanischer Konvertierungsmodule in Python3
Zeigen Sie Python 3 im Browser mit MAMP an
Zusammenfassung verschiedener for-Anweisungen in Python
Das Ergebnis der Installation von Python auf Anaconda
So zeigen Sie die neunundneunzig Tabelle in Python an
Gang of Four (GoF) -Muster in Python
Grundlagen zum Ausführen von NoxPlayer in Python
Massenersatz von Zeichenfolgen in Python-Arrays
Projekt Euler # 16 "Summe der Kräfte" in Python
Traffic Safety-Kun: Erkennung von Verkehrszeichen in Python
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Nicht logische Operatorverwendung von oder in Python
Pyopengl im Browser anzeigen (Python + Aal)
Auf der Suche nach dem schnellsten FizzBuzz in Python
Praktisches Beispiel für hexagonale Architektur in Python
So zeigen Sie Hello World in Python an
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Doppelte Pendelbewegungsgleichung in Python
Entfernen Sie DICOM-Bilder in Python
Status jedes Python-Verarbeitungssystems im Jahr 2020
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Quadtree in Python --2
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Zwietracht in Python
DCI in Python
Quicksort in Python
nCr in Python