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
../_images/barraq_35_0.png

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.
../_images/barraq_38_0.png

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
../_images/barraq_52_1.png

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()
../_images/barraq_60_0.png

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")
../_images/barraq_66_0.png

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()
../_images/barraq_69_0.png

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.