Qaṣīda/Ibtihāl par ʿAlī al-Barrāq (1891-1981, Kairouan)¶
Les commandes ci-dessous sont une introduction à l’utilisation pratique du package music22. Il s’adresse à des utilisateurs sans connaissance préalable de la programmation, mais qui ont pris connaissance des premières étapes de l’utilisation de Python et ont installé le package music22.
L’explication musicologique et les commentaires liés à cette méthode d’analyse ont été présentés lors de la rencontre sur les maqām-s et ṭubūʿ-s qui a eu lieu à l’université du Kaslik (Liban) le 19 juillet 2015. Le texte de la présentation (en arabe) est en cours de publication.
L’enregistrement utilisé ici fait partie du premier volume de l’Initiation à la Musique Tunisienne (Snoussi, 1963/R-2003).
On se propose d’analyser un chant soufi interprété par ʿAlī al-Barrāq [1] . Son fichier sonore P0.wav
se trouve dans le dossier ayant pour chemin (path) /Users/anas/AUDIO/Barraq/
. Il est segmenté en six fichiers (P1.wav
-P6.wav
) placés également dans le même dossier.
[1] | Il s’agit d’une qaṣidā/ibtihāl : ʿomrī ʿalayka tašawwuqan qaḍḍaytuhu (عمري عليك تشوّقا قضّيته). |
Pour ce tutoriel, nous procédons comme suit :
- Présentation des commandes préliminaires;
- Écoute des des phrases segmentées;
- Présentation des commandes pour l’analyse d’une seule mélodie (la première phrase);
- Présentation des commandes pour l’analyse et la comparaison de plusieurs phrases (les six phrases qui composent l’extrait)
Importation du module modalis¶
import music22.modalis
Le commandes suivantes ne sont nécessaires que lors de l’utilisation d’un notebook IPython/Jupyter (https://jupyter.org/)
# Pour que l'affichage des graphiques s'effectue dans le Notebook.
%matplotlib inline
# Pour intégrer du code html au notebook.
# Il nous sert ici à intégrer (avec la balise <iframe>) des fichiers sonores placés dans une base de données sonores Telemeta.
from IPython.display import HTML
Écoute de la totalité de l’enregistrement segmenté en six phrases¶
La segmentation du fichier a été réalisée manuellement (avec un logiciel d’édition sonore) en six phrases :
عُمْرِي عَلَيْكَ تَشَـوُّقًا قَضَّيْتُهُ وَعَزِيزُ صَبْرِي فِي هَوَاكَ أَهَنْتُهُ
وَجَعَلْتُ أَبْذُلُ فِيكَ دُرَّ مَدَامِعِي حَتَّى افْتَقَرْتُ إِلَى العَقِيقِ بَذَلْتُهُ
وَجَعَلْتُ أَبْذُلُ فِيكَ دُرَّ مَدَامِعِي حَتَّى افْتَقَرْتُ إِلَى العَقِيقِ بَذَلْتُهُ
قَـلْبِي الذِي لَا زَالَ فِيكَ مُتَيَّمًا لَوْ كَانَ يُنْزَعُ بِاليَمِينِ لَنَزَعْتُهُ
قَـلْبِي الذِي لَا زَالَ فِيكَ مُتَيَّمًا لَوْ كَانَ يُنْزَعُ بِاليَمِينِ لَنَزَعْتُهُ (بذلته)
لَوْ كُنْتَ تَنْهَانِي عَنِ المَاءِ الذِي فِيهِ حَيَاةُ النَّفْسِ مَا سَوَّغْتُهُ
Analyse de la première phrase¶
Création de l’instance¶
On procèdera premièrement par la création d’une instance (« objet ») que nous nommons barraq. La création de l’instance se fait en indiquant le path du fichier à la classe melodia du module modalis du package music22.
path = "/Users/anas/AUDIO/Barraq/P1.wav"
barraq = music22.modalis.melodia(path)
Instance created with the audio file : P1.wav
Instance created with the txt file : P1.txt
La création de l’instance analyse systématiquement les fréquences fondamentales (voir la section analyse des fréquences fondamentales f0) et les enregistre dans un fichier .txt.
Paramètres mélodiques principaux¶
Avec la création de l’instance, certaines données sont automatiques analysées. On peut les obtenir en faisant appel aux attributs de l’instance :
barraq.xmin # la fréquence minimale, en Hertz
99.712000000000003
barraq.xmax # la fréquence maximale
410.53899999999999
barraq.mode # le mode : en termes statistiques, la fréquence la plus présente
array([ 244.107])
barraq.tonique
166.466
Pour plus de détails concernant l’analyse de la tonique, voir le présentation de la détection de la tonique.
Dessiner la courbe mélodique¶
Pour afficher la courbe mélodique, on peut utiliser la méthode .plot(). La tonique détectée est automatiquement affichée. On peut juger visuellement de la pertinance de la tonique détectée.
barraq.plot() # Les paranthèses sont nécessaires
Calculer et afficher la courbe PDF (Probability Density Function) avec ses pics¶
Pour afficher les fréquences les plus probables, on utilise la méthode .pdf_show().
barraq.pdf_show() # Les parenthèses sont nécessaires.
Les valeurs de la PDF sont stockées dans l’attribut barraq.pdf
Obtenir l’échelle¶
Les données de l’échelle sont stockées dans l’attribut .scale.
barraq.scale
[('243.486973948', ('165.15', '3/2', '-', '10.94')),
('201.402805611', ('82.74', '6/5', '+', '3.56')),
('324.649298597', ('290.09', '2/1', '-', '10.94')),
('278.557114228', ('223.59', '3/2*10/9', '+', '1.74')),
('375.751503006', ('353.58', '2/1*9/8', '+', '1.39'))]
Les fréquences sont indiquées par ordre d’importance (première colonne). Ensuite sont indiquées : 1. l’intervalles que forme ces fréquences avec la tonique détectée (par défaut, en savart); 2. l’intervalle épimoriques le plus proche de cet intervalles, 3. est-il plus grand ou plus petit que l’intervalle épimorique le plus proche ?; 4. la distance qui les sépare (par défaut, en savart).
Par exemple, dans cette phrase, la fréquence la plus probable est la fréquence 243 Hz. Elle forme avec la tonique l’intervalle 165.15 savarts. Cet intervalle est plus petit que l’intervalle épimorique le plus proche 3/2 de 10.94 savarts.
On peut obtenir les intervalles en cent. Il suffit de modifier l’unité de mesure en faisant appel au module diastema :
import music22.diastema
music22.diastema.set_unit('cent')
Unit is now set to : cent
Il est nécessaire de calculer de nouveau l’échelle avec la méthode get_scale(), avant d’appeler l’attribut .scale
barraq.get_scale()
barraq.scale
[('243.486973948', ('658.34', '3/2', '+', '43.61')),
('201.402805611', ('329.83', '6/5', '+', '14.19')),
('324.649298597', ('1156.39', '2/1', '+', '43.61')),
('278.557114228', ('891.29', '3/2*10/9', '+', '6.94')),
('375.751503006', ('1409.46', '2/1*9/8', '+', '5.55'))]
(BUG à corriger : en cent les signes + et - ne sont pas pris en considération).
Dessiner la courbe mélodique en intégrant les intervalles calculés¶
Pour dessiner la courbe mélodique en prenant en considération le calcul des pics intervalliques et l’échelle, il suffit de faire de nouveau appel à la méthode .plot() en indiquant l’argument peaks=”Yes” :
music22.diastema.set_unit('savart')
barraq.get_scale()
barraq.plot(peaks="Yes")
Unit is now set to : savart
Analyse et comparaison d’un ensemble de mélodies¶
Création de l’instance¶
La gestion de plusieurs mélodies/phrases s’effectue à travers la classe melodies du module modalis.
path = "/Users/anas/AUDIO/Barraq/"
Barraq = music22.modalis.melodies(path) # Création de l'instance _melodies_ du module modalis
Reading the content of : /Users/anas/AUDIO/Barraq/
Instance created with the audio file : P0.wav
Instance created with the txt file : P0.txt
/Users/anas/AUDIO/Barraq/P0.wav appended
Instance created with the audio file : P0.wav
Instance created with the txt file : P0.txt
Instance created with the audio file : P1.wav
Instance created with the txt file : P1.txt
/Users/anas/AUDIO/Barraq/P1.wav appended
Instance created with the audio file : P1.wav
Instance created with the txt file : P1.txt
Instance created with the audio file : P2.wav
Instance created with the txt file : P2.txt
/Users/anas/AUDIO/Barraq/P2.wav appended
Instance created with the audio file : P2.wav
Instance created with the txt file : P2.txt
Instance created with the audio file : P3.wav
Instance created with the txt file : P3.txt
/Users/anas/AUDIO/Barraq/P3.wav appended
Instance created with the audio file : P3.wav
Instance created with the txt file : P3.txt
Instance created with the audio file : P4.wav
Instance created with the txt file : P4.txt
/Users/anas/AUDIO/Barraq/P4.wav appended
Instance created with the audio file : P4.wav
Instance created with the txt file : P4.txt
Instance created with the audio file : P5.wav
Instance created with the txt file : P5.txt
/Users/anas/AUDIO/Barraq/P5.wav appended
Instance created with the audio file : P5.wav
Instance created with the txt file : P5.txt
Instance created with the audio file : P6.wav
Instance created with the txt file : P6.txt
/Users/anas/AUDIO/Barraq/P6.wav appended
Instance created with the audio file : P6.wav
Instance created with the txt file : P6.txt
Les fichiers contenant les fréquences fondamentales (.txt) sont stockés dans un dossier f0 créé dans le dossier principal.
Affichage des courbes PDF-s¶
Afficher toutes les courbes PDF-s avec la méthode .pdf_show() :
Barraq.pdf_show()
Obtenir l’échelle d’une mélodie¶
On peut obtenir l’échelle d’une phrase en indiquant son numéro :
Barraq.melodies[2].scale
[('241.482965932', ('187.95', '3/2', '+', '11.86')),
('201.402805611', ('109.13', '5/4', '+', '12.22')),
('301.603206413', ('284.50', '3/2*5/4', '+', '11.50')),
('321.643286573', ('312.44', '2/1', '+', '11.41')),
('279.559118236', ('251.53', '3/2*6/5', '-', '3.74')),
('364.729458918', ('367.03', '2/1*6/5', '-', '13.18'))]
Dessiner une ligne mélodie avec l’échelle calculée¶
et afficher sa courbe mélodique :
Barraq.melodies[5].plot(peaks="Yes")
Matrice des distances / classement hiérarchique¶
La méthode .matrix() donne la matice des similarités, le classement hiérarchique et le dendogramme :
Barraq.matrix()
On peut lire que la phrase P3 est la plus éloignée des autres phrases et plus particulièrement de la phrase P4. La phrase qui contient les caractétistiques proches de l’ensemble du fichier (P0) est la phrase P2.