Affichage de la forme d'onde audio en Python

introduction

Un mémo quand j'ai écrit le code pour afficher la forme d'onde de la voix. Il est facile d'utiliser librosa.display.waveplot, qui est une bibliothèque appelée librosa, mais comme une erreur se produit lorsque le nombre de données dans le fichier audio est important, la méthode d'affichage à l'aide de matplotlib.pyplot est également décrite.

Comment utiliser librosa.display.waveplot

Le moyen le plus simple.

code

import librosa

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

make_waveform_librosa("test.mp3")

résultat

image.png Toutefois, si le nombre de données dans le fichier audio à lire est important, OverflowError: dépassement de la limite de bloc de cellules peut se produire et la forme d'onde peut ne pas s'afficher correctement.

Comment utiliser matplotlib.pyplot

Étant donné que la taille de bloc de l'agrégation exécutée sur le back-end de matplotlib peut être modifiée, il est possible de la gérer même lorsque le nombre de données dans le fichier audio est important.

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")

En faisant référence à here, la taille du morceau a été écrite comme suit, donc je l'ai réglée à 100000 de manière appropriée.

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

résultat

image.png J'ai pu sortir le même que librosa.display.waveplot.

en conclusion

Puisque librosa.display.waveplot utilise également matplotlib en interne, je pense qu'il sera possible de l'afficher en jouant avec chunksize de la même manière, mais je pense qu'il faut jouer directement avec le code de la librairie.

Recommended Posts

Affichage de la forme d'onde audio en Python
Afficher une liste d'alphabets en Python 3
Enveloppe de forme d'onde en Python
Dessiner une forme d'onde mp3 en Python
Afficher les données UTM-30LX en Python
Jugement d'équivalence d'objet en Python
Implémentation du tri rapide en Python
Afficher un histogramme des valeurs de luminosité de l'image en python
Diviser timedelta dans la série Python 2.7
Échappement automatique des paramètres MySQL en python
Gestion des fichiers JSON en Python
Implémentation du jeu de vie en Python
Afficher des caractères comme AA en python
[ev3dev × Python] Affichage, voix, contrôle LED
Graphiques Python séparés (mémo)
La loi des nombres en python
Implémentation du tri original en Python
Brouillage réversible d'entiers en Python
Afficher les formules de notation LaTeX en Python, matplotlib
[Python, Julia] Affichage 3D dans la bibliothèque Jupyter-Mayavi
Conversion de la chaîne <-> date (date, datetime) en Python
Vérifiez le comportement du destroyer en Python
Pratique d'utilisation de ceci en Python (mauvais)
Théorie générale de la relativité en Python: Introduction
Arborescence de sortie des fichiers en Python
Comparaison des modules de conversion japonais en Python3
Afficher Python 3 dans le navigateur avec MAMP
Résumé de diverses instructions for en Python
Le résultat de l'installation de python sur Anaconda
Comment afficher la table quatre-vingt-dix-neuf en python
Modèles Gang of Four (GoF) en Python
Principes de base pour exécuter NoxPlayer en Python
Remplacement en bloc des chaînes dans les tableaux Python
Projet Euler # 16 "Somme des pouvoirs" en Python
Traffic Safety-kun: Reconnaissance des panneaux de signalisation en Python
Résumé des méthodes intégrées, etc. de la liste Python
Utilisation d'opérateurs non logiques de ou en python
Afficher pyopengl dans le navigateur (python + anguille)
À la recherche du FizzBuzz le plus rapide en Python
Exemple pratique d'architecture hexagonale en Python
Comment afficher Hello World en python
Projet Euler # 17 "Nombre de caractères" en Python
Equation de mouvement à double pendule en python
Débarrassez-vous des images DICOM en Python
Statut de chaque système de traitement Python en 2020
Projet Euler # 1 "Multiple de 3 et 5" en Python
Quadtree en Python --2
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Discord en Python
DCI en Python
tri rapide en python
nCr en python