[PYTHON] Apprenez librosa avec un tutoriel 1

introduction

Cet article s'adresse aux personnes qui souhaitent utiliser librosa mais ne savent pas par où commencer. Je suis l'un d'eux (rires)

Ici, basé sur le tutoriel librosa, vous pouvez partager votre propre interprétation et compréhension de ce que vous faites dans le tutoriel. je pense Plus précisément, tout en commentant le tutoriel original en japonais, j'expliquerai sous forme de complément du comportement en montrant le contenu et les figures des variables. Cependant, comme je suis moi-même débutant, je n'ai pas écrit beaucoup de choses difficiles.

Ceci est le premier article, alors jetez un œil chaleureux. Si vous avez des erreurs, n'hésitez pas à les signaler!

Le point de cette fois

--Chargement de la source sonore de l'échantillon

Cliquez ici pour savoir comment installer librosa (https://librosa.github.io/librosa/install.html)!

Cette fois, c'est un démarrage rapide du didacticiel de la librosa. Tout d'abord, cela ressemble à l'essentiel. Je veux m'habituer petit à petit à la librosa!

Chargement de la source sonore de l'échantillon

Tout d'abord, obtenons le chemin (emplacement) de la source sonore de l'échantillon.

#Importer une librosa
import librosa
#Obtenez le chemin de l'exemple de fichier ogg
filename = librosa.util.example_audio_file()
print(filename) # C:~\Python\Python36\site-packages\librosa\util\example_data\Kevin_MacLeod_-_Vibe_Ace.ogg

Ici, le fichier Kevin_MacLeod - Vibe_Ace.ogg est chargé comme exemple de source sonore. Vous pouvez charger n'importe quelle source sonore en changeant ce nom de fichier. En passant, comme le nom du fichier l'indique, cette chanson est Vibe Ace de Kevin Macleod. [Google Play Music](https://www.google.com/search?sa=X&biw=1280&bih=667&sxsrf=ALeKk00C4J7UUWZwKvPxMEnRFVkx_rSMVQ:1590896525499&q=%E3%82%B1%B%3%3%3%E selon l'E3% 83% BB% E3% 83% 9E% E3% 82% AF% E3% 83% AD% E3% 83% BC% E3% 83% 89 + ambiance + ace & bâton = H4sIAAAAAAAAAONgFuLVT9c3NEwqN7IwME_OUYJwk7PzUopMstK0RLOTrfRzS4szk_UTc5JKc62K8_PSixexqjxu2vi4efLj5s2Pm3c_bp73uGn94-a1j5v3PG7uVCjLTEpVSExO3cHKCACxHq1VYQAAAA & ved = 2ahUKEwiq_5qyl93pAhVGHaYKHQnECMkQri4wKHoECBUQUw), chanson La durée est aussi courte que 1:05, et le genre semble être Jazz.

Qu'est-ce qu'un fichier ogg? D'après Wikipedia

Ogg est un conteneur qui stocke un ou plusieurs codecs en tant que contenu. Le code le plus typique d'Ogg est le codeur vocal Vorbis. L'Ogg qui stocke Vorbis s'appelle Ogg Vorbis (ainsi que d'autres codecs). Ogg Vorbis est parfois appelé simplement Ogg, mais il convient de noter que Ogg est le nom du conteneur, pas le codec. (Omis) Au départ, la Fondation Xiph.Org a défini l'extension commune pour Ogg comme .ogg, mais en 2007 a changé l'extension commune en .ogx, l'extension vidéo en .ogv et l'extension audio en .oga. .. L'extension commune d'origine, .ogg, est utilisée à des fins de compatibilité uniquement avec les fichiers audio Ogg Vorbis.

Il semble que le contenu soit un format de fichier appelé Vorbis.

Chargez-le maintenant.

#Charger en utilisant le chemin précédent
#y: Forme d'onde
#sr: taux d'échantillonnage
y, sr = librosa.load(filename)
print(type(y)) # <class 'numpy.ndarray'>
print(y.shape) # (1355168,)
print(type(sr), sr) # <class 'int'> 22050

C'est la méthode utilisée pour lire le fichier audio Il semble prendre en charge la plupart des formats de fichiers audio tels que wav, flac et aiff.

Les sorties "y" et "sr" sont représentées respectivement par des tableaux numpy et des entiers. Depuis print (y.shape), vous pouvez voir que y contient 1355168 nombres. De plus, «sr» est de 22050 Hz par défaut, ce qui signifie que 22050 nombres correspondent à 1 seconde.

Obtenez des informations sur les battements

Vient ensuite l'acquisition des informations de battement.

Ce qui est important ici, c'est une ** frame ** qui résume les valeurs numériques de certaines des formes d'onde (le nombre défini par hop_length). Par défaut, hop_length = 512, donc le nombre est 512 → 1 image. Cette fois, nous obtiendrons l'image qui est le battement (point).

# tempo:BPM
# beat_images: images de synchronisation de battement
#512 échantillons par image(hop_length=512)
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
print('Estimated tempo: {:.2f} beats per minute'.format(tempo)) # Estimated tempo: 129.20 beats per minute
print(beat_frames) 
# [   5   24   43   63   83  103  122  142  162  182  202  222  242  262
#   281  301  321  341  361  382  401  421  441  461  480  500  520  540
#   560  580  600  620  639  658  678  698  718  737  758  777  798  817
#   837  857  877  896  917  936  957  976  996 1016 1036 1055 1075 1095
#  1116 1135 1155 1175 1195 1214 1234 1254 1275 1295 1315 1334 1354 1373
#  1394 1414 1434 1453 1473 1493 1513 1532 1553 1573 1593 1612 1632 1652
#  1672 1691 1712 1732 1752 1771 1791 1811 1831 1850 1871 1890 1911 1931
#  1951 1971 1990 2010 2030 2050 2070 2090 2110 2130 2150 2170 2190 2209
#  2229 2249 2269 2289 2309 2328 2348 2368 2388 2408 2428 2448 2468 2488
#  2508 2527 2547]

Vous pouvez obtenir le BPM de la musique à partir de cette méthode. Dans ce cas, «BPM = 129,20», ce qui signifie qu'il y a 129,2 battements par minute. De plus, à partir de print (beat_frames), vous pouvez voir que le battement arrive dans la 5e image, la 24e image, .... Il semble que le rythme arrive toutes les 20 images.

Ensuite, regardons le timing du battement en termes de temps.

# beat_frames->beat_times
#À utiliser lorsque vous souhaitez connaître le timing du battement par temps
beat_times = librosa.frames_to_time(beat_frames, sr=sr)
#La formule de calcul est la suivante
# beat_times[i] = beat_frames[i] * hop_length / sr
print(beat_times)
#     [ 0.11609977  0.55727891  0.99845805  1.46285714  1.92725624  2.39165533
#   2.83283447  3.29723356  3.76163265  4.22603175  4.69043084  5.15482993
#   5.61922902  6.08362812  6.52480726  6.98920635  7.45360544  7.91800454
#   8.38240363  8.87002268  9.31120181  9.77560091 10.24       10.70439909
#  11.14557823 11.60997732 12.07437642 12.53877551 13.0031746  13.4675737
#  13.93197279 14.39637188 14.83755102 15.27873016 15.74312925 16.20752834
#  16.67192744 17.11310658 17.60072562 18.04190476 18.52952381 18.97070295
#  19.43510204 19.89950113 20.36390023 20.80507937 21.29269841 21.73387755
#  22.2214966  22.66267574 23.12707483 23.59147392 24.05587302 24.49705215
#  24.96145125 25.42585034 25.91346939 26.35464853 26.81904762 27.28344671
#  27.7478458  28.18902494 28.65342404 29.11782313 29.60544218 30.06984127
#  30.53424036 30.9754195  31.43981859 31.88099773 32.36861678 32.83301587
#  33.29741497 33.7385941  34.2029932  34.66739229 35.13179138 35.57297052
#  36.06058957 36.52498866 36.98938776 37.43056689 37.89496599 38.35936508
#  38.82376417 39.26494331 39.75256236 40.21696145 40.68136054 41.12253968
#  41.58693878 42.05133787 42.51573696 42.9569161  43.44453515 43.88571429
#  44.37333333 44.83773243 45.30213152 45.76653061 46.20770975 46.67210884
#  47.13650794 47.60090703 48.06530612 48.52970522 48.99410431 49.4585034
#  49.92290249 50.38730159 50.85170068 51.29287982 51.75727891 52.221678
#  52.6860771  53.15047619 53.61487528 54.05605442 54.52045351 54.98485261
#  55.4492517  55.91365079 56.37804989 56.84244898 57.30684807 57.77124717
#  58.23564626 58.6768254  59.14122449]

Les calculs suivants sont effectués ici.

\mathrm{beat\_times[i]=beat\_frames[i] \times hop\_length / sr}\\

Par exemple, dans le cas de $ \ mathrm {i = 0} $

\begin{align}
\mathrm{beat\_times}[0]&=\mathrm{beat\_frames[0]} \times \mathrm{hop\_length} / \mathrm{sr}\\
&=5 \times 512 / 22050\\
&=0.1160997732...\\
&\simeq0.11609977
\end{align}

À partir de là, il a été trouvé que «beat_times» peut être calculé à partir de «beat_frames» et «sr».

en conclusion

La première fois, c'était le tutoriel Quickstart, comment était-ce? Nous vous serions reconnaissants si vous pouviez commenter l'article ainsi que le contenu.

La prochaine fois, le tutoriel Utilisation avancée, puis Exemples avancés J'espère pouvoir accéder à .html # advanced).

Recommended Posts

Apprenez librosa avec un tutoriel 1
AWS Step Functions pour apprendre avec un exemple
Apprenez Python avec ChemTHEATER
Format A4 avec python-pptx
Apprenez Zundokokiyoshi en utilisant LSTM
Pandas apprenant avec la chimioinfomatique
Apprentissage Scikit-Learn avec la chimioinfomatique
Tutoriel CIFAR-10 avec Keras
Apprenez avec Chemo Informatics Matplotlib
Apprenez avec Chemo Informatics NumPy
DCGAN avec TF Learn
Décorer avec un décorateur
Apprenez Pendulum-v0 avec DDPG
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Dessinez un graphique avec NetworkX
Essayez de programmer avec un shell!
Créer une page d'accueil avec django
Apprenez les orbites elliptiques avec Chainer
[Tutoriel PyTorch ④] FORMATION D'UN CLASSIFICATEUR
Lancez-vous avec Django! ~ Tutoriel ④ ~
Apprenez de nouvelles données avec PaintsChainer
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
Tutoriel Pepper (5): Utilisation d'une tablette
Utiliser une imprimante avec Debian 10
Faites une loterie avec Python
Créer un répertoire avec python
Un peu coincé dans le chainer
Dessinez un graphique avec networkx
Créez facilement un profil avec un décorateur
Faire un feu avec kdeplot
Les ingénieurs de données apprennent DevOps en vue de MLOps. ① Prise en main
Créer un environnement Kubernetes avec Ansible 2
[Python] Qu'est-ce qu'une instruction with?
Résoudre ABC163 A ~ C avec Python
Faites fonctionner l'imprimante de reçus avec python
Jouez avec une tortue avec des graphiques de tortue (partie 1)
Tracez un graphe avec Julia + PyQtGraph (2)
Apprenez Zundokokiyoshi en utilisant un simple RNN
Générer une distribution normale avec SciPy
[Tutoriel PyTorch ⑤] Apprentissage de PyTorch avec des exemples (Partie 2)
Créer un arbre déterminé avec scikit-learn
Apprendre avec Causal ML Package Meta-Learner
Faisons une interface graphique avec python.
Faites un son avec le notebook Jupyter
Apprenez avec FizzBuzz Iterator, Generator, Decorator
Énumérer les fichiers avec des extensions spécifiques
Apprenez avec les réseaux convolutifs PyTorch Graph
Créer un serveur Flask avec Docker
Créer un fichier deb avec Docker
Résoudre ABC166 A ~ D avec Python
[TensorFlow 2] Apprendre RNN avec perte CTC
Apprenons Deep SEA avec Selene
Dessinez un graphique lâche avec matplotlib
Déployer l'application Django avec Docker
Faisons une rupture de bloc avec wxPython
Créez un environnement virtuel avec Python!
J'ai fait une loterie avec Python.
Dessinez un beau cercle avec numpy