Le langage python et la musique

On peut utiliser le langage python pour construire des applications musicales qui créent des fichiers .mid à partir de tablatures écrites dans des fichiers de texte.

Logiciels qui utilisent les modules musicpy et midiutil de python

Vous trouverez des exemples de fonctions qui traitent un langage proche du langage abc pour les tablatures dans le fichier moduletabla.txt

Liste alphabétique des fonctions du module moduletabla

moduletabla.txt pour le traitement des tablatures en langage python

Vous pouvez utiliser ce module si vous avez installé une version de python sur votre PC.

Téléchargement de python

Pour pouvoir utiliser ce module dans la console python,copiez puis collez le fichier moduletabla.txt dans un fichier que vous appelerez moduletabla.py

Vous aurez besoin des modules musicpy et midiutil que vous installerez avec la commande pip

Sous DOS, vous exécuterez pip install midiutil et pip install musicpy

Vous utiliserez les fonctions du module moduletabla.py pour créer des petits fichiers .mid pour le travail de l'harmonie.

Vous trouverez la liste de ces fonctions dans la page :

Description des fonctions du module moduletabla.py

Exemples d'applications qui utilisent le module moduletabla.py

Logiciels construits avec le module music21 de python

On peut construire un logiciel analogue à abc2midi.exe pour windows, qui crée un fichier .mid à partir d'un fichier .abc

Pour cela, après avoir installé python sur votre PC, tapez sous DOS, la commande :

pip install music21

Consultez le fichier helpmusic21.txt pour connaitre l'origine de ce module.

helpmusic21.txt

Copiez le fichier rythme.txt dans un répertoire de votre PC

Fichier source rythme.txt

Lancez la commande :

python rythme.txt

Vous retrouverez dans le répertoire où vous avez placé rythme.txt, le fichier tabla.mid qui contient un rythme blues.

Exemples de codes avec le module musicpy

On peut utiliser le module musicpy pour traiter les notes, les accords, la batterie...

Fichier musicpy2.txt : Exemples de codes avec le module musicpy

Si vous n'arrivez pas à télécharger le fichier musicpy2.txt, copiez le code ci-dessous :

Les exemples sont indépendants les uns des autres.

On n'a pas figuré les indentations de 4 espaces des conditions else que vous rajouterez si vous voulez tout copier.

#https://github.com/Rainbow-Dreamer/musicpy/wiki/musicpy-composition-code-examples-part-1

#https://github.com/Rainbow-Dreamer/musicpy/wiki/musicpy-composition-code-examples-part-2

import musicpy

from musicpy import *

print("Entrez un nombre entre 0 et 21 :")

i=input()

i=int(i)

if i==0 :

c = get_chord('D', 'm7', intervals=1)*2 + get_chord('E', 'maj9', intervals=0).reverse()

'K[l:1/4;i:n;v:80]'

play(c, 100)

elif i==1 :

a = C('Cm7',4,1,1/8) @ [1,3,4,2.1,4.1] | 3/8

piano = a * 4 | (a - 3) * 4

bass = (chord('C2, C2, G2, C2, A#2, C2, C3, C2') * 4) % (1/8, 1/8)

bass += (bass - 3)

play(P([piano, bass], [1, 34], 165, [0, 0]) * 2)

elif i==2 :

a = C('Cm9',4,1,1/8) @ [1,3,5,2.1,4.1] | 3/8

piano = a * 4 | (a + 3) * 4

bass = (chord('C2, C2, G2, C2, A#2, C2, C3, C2') * 4) % (1/8, 1/8)

bass += (bass + 3)

import random

drum = concat([chord(random.choice(['D2','E2','G2'])) for i in range(64)]) % (1/8, 1/8)

play(P([piano, bass, drum], [1, 34, 1], 500, [0, 0, 0], channels=[1,2,9]) * 2)

elif i==3 :

a = C('Cm9',2,1/4,1/8) @ [1,3,5,2.1,4.1] | 3/8

piano = a * 4 | (a + 3) * 4

bass = (chord('C2, C2, G2, C2, A#2, C2, C3, C2') * 4) % (1/8, 1/8)

bass += (bass + 3)

import random

drum = concat([chord(random.choice(['D2','E2','G2'])) for i in range(64)]) % (1/8, 1/8)

play(P([piano, bass, drum], [31, 34, 1], 25, [0, 0, 0], channels=[1,2,9]) * 8)

elif i==4 :

a = C('Caug9') @ [1,3,5,2.1,4.1,5.1] % (1, 1/8) | 1/4

bass = chord('C2, A#1') % (1, 1) * 4

piano = (a | a - 2) * 4

string = C('Caug9', 4) % (1, 0)

string |= string - 2

string.set_volume(60)

play(P([piano, bass, string * 4], [9, 34, 49], 80, [0, 0, 0]))

elif i==5 :

guitar = C('CM7',4, 1)^2 | C('G7sus', 3, 1)^2 | C('A7sus', 3, 1)^2 | C('FM7', 3, 1)^2

play((guitar%(1/4, 1/8) * 2)-database.octave, 100, instrument=25)

elif i==6 :

guitar = (C('CM7',4, 1/4, 1/8)^2 | C('G7sus', 3, 1/4, 1/8)^2

| C('A7sus', 3, 1/4, 1/8)^2 | C('Em7', 3, 1/4, 1/8)^2 |

C('FM7', 3, 1/4, 1/8)^2 | C('CM7', 4, 1/4, 1/8)@1 |

C('AbM7', 3, 1/4, 1/8)^2 | C('G7sus', 3, 1/4, 1/8)^2)

play((guitar * 2)-database.octave, 100, instrument=25) elif i==7 :

rule = lambda x: x @ [1, 3, 4, 2.1, 3.1, 4, 1.1, 3.1] % (1/4, 1/8)

rule2 = lambda x: x @ [1, 3, 4, 2.1, 3.1, 4, 2.1, 3.1] % (1/4, 1/8)

a = (rule(C('Cmaj7',4)) | rule(C('Fmaj7',3)) |

rule2(C('G7, b9, omit 5',3)) |

rule(C('Bdim7',3)) |

rule(C('Am7', 3)) |

rule2(C('D7', 3) ^ 2) |

rule2(C('FmM7', 3) ^ 2) |

rule2(C('G7,#5', 3)))

play(a * 2, 150, instrument=5)

elif i==8 :

a = (C('Cmaj7') | C('D7') | C('Fmaj7',3) | C('Cmaj7/-3')) % (1, 1/4) * 4

b_duration = [3/4, 1/8, 1/8, 3/4, 1/8, 1/8, 1/4, 1/4, 1/2, 1/2, 1/2]

b_interval = b_duration

b = (chord('G5, F5, E5, F5, E5, D5, E5, D5, C5, B4, G4')

% (b_duration, b_interval)) * 2

song = build([a, 5, 0],

[b, 49, 4],

bpm=165)

play(song)

elif i==9 :

a = (C('Cmaj7') | C('D7') | C('Fmaj7',3) | C('Cmaj7/-3')) % (1, 1/4) * 4

b_duration = [3/4, 1/8, 1/8, 3/4, 1/8, 1/8, 1/4, 1/4, 1/2, 1/2, 1/2]

b_interval = b_duration

b = (chord('G5, F5, E5, F5, E5, D5, E5, D5, C5, B4, G4')

% (b_duration, b_interval))

cmajor = scale('C5', 'major')

b_harmony = (chord([cmajor(cmajor.names().

index(i.name))[1]-database.octave for i in b])

% (b_duration, b_interval))

b_harmony.set_volume(80)

b &= b_harmony

b *= 2

song = build([a, 5, 0],

[b, 49, 4],

bpm=165)

play(song)

elif i==10 :

a = (C('Cmaj7') | C('D7') | C('Fmaj7',3) | C('Cmaj7/-3')) % (1, 1/4) * 4

b = chord('G5[3/4;3/4], F5[.8;.8], E5[.8;.8], F5[3/4;3/4], E5[.8;.8], D5[.8;.8], E5[.4;.4], D5[.4;.4], C5[.2;.2], B4[.2;.2], G4[.2;.2]') * 2

song = build([a, 5, 0],

[b, 49, 4],

bpm=165)

play(song)

elif i==11 :

a = C('CM9') @ [1,3,5,2.1,4.1,5.1] % (1, 1/8) | 1/4

bass = chord('C2, A#1') % (1, 1) * 4

piano = (a | a - 2) * 4

string = C('CM9', 4) % (1, 0)

string |= string - 2

string.set_volume(50)

play(P([piano, bass, string * 4], [9, 34, 49], 80, [0, 0, 0]))

elif i==12 :

play((get_chord_by_interval('D#4', [5,7,10,7,5], 1/2, 1/8)*3 + get_chord_by_interval('F4', [1,0,-4], 1/2, 1/8)) * 3, 150)

elif i==13 :

a = C('Am7') % (1/8, 0)

play(a * 4 | (a + 2) * 4 | get_chord(a[0] + 3, 'maj7').set(interval=1/8), bpm=80)

elif i==14 :

a = C('Dmaj7') % (1/4,1/4) | C('Cmaj7') | C('Fadd9',3) | C('D#maj7',4) | (C('Dmaj7',3)/-2) % (5/4,)

b = chord('F#5, G5, A5, B5, G5', 1/8, 1/8)

play(a & b, 140, instrument=1)

elif i==15 :

a = C('Amaj7') @ 2 * 4 | C('G#m7') @ 2 * 4 | C('Gmaj7') @ 2 * 4 | C('F#m7') @ 2 * 4

play(a | a % (1/4, 1/4), 165, instrument=9) elif i==16 :

a = (C('Bmaj9',3)/[2,3,4,1,5]) % (1/8,1/8)

b = (C('Bmaj9',3)/[2,3,4,1,5,2]) % (1/8, 1/8)

q = a + ~a[1:-1]

q2 = b + ~b[3:-1]

t = (q + q2) * 2

adding = chord(['Bb5','Ab5','Gb5','Ab5']) % (1/2,1/2) * 2

t2 = t & adding

play(t2 + (t2 - 3), 100, instrument=47)

elif i==17 :

q = scale('C4', 'major')

r = q%(6451, 0.5/4, 0.3/4, 5)

r = [i.omit(5).inversion_highest(3) for i in r]

play(r*2, bpm=80, instrument=47)

elif i==18 :

q = scale('C4', 'major')

r = q%(6451, 0.5/4, 0.3/4, 5)

r = [i.omit(7).inversion_highest(2) for i in r]

play(r*2, bpm=80, instrument=47)

elif i==19 :

a = C('Baug9', 4) @ [2, 3, 4, 1.1, 5, 1.1, 4, 3] % (1/8,1/8)

b = C('BmM9', 4) @ [2, 3, 4, 1.1, 5, 2.1, 5, 1.1] % (1/8,1/8)

part1 = (a + b)*2

part2 = (C('Baug9',4, 1, 0) | C('BmM9',4, 1, 0)) * 2

part2.set_volume(80)

play(P([part1, part2], [26,49], 100, [0,0]))

elif i==20 :

a = chord('C2, G1, C2, Ab1, Bb1, G1', [15/8,1/8,2,2,1.5,3/4], [15/8,1/8,2,2,1.5,3/4])

b = C('Cm', 5, 1/8) | 1/4 | C('Bb', 4, 1/8) | 1/4 | C('Ab', 4, 1/8) | 1/4 | C('Bb', 4, 1/2) | 3/8

b2 = C('Cm', 5, 1/8) | 1/4 | C('Bb', 4, 1/8) | 1/4 | C('Abmaj7', 4, 1/8) | 1/4 | C('Gsus', 4, 3/4) | 1/8

c = (b * 3) | b2

a2 = chord('C2',1/8,1/8)*32 + chord('Ab1',1/8,1/8)*16 + chord('Bb1',1/8,1/8)*12 + chord('G1',1/8,1/8)*4

play(piece([a, c, a2 * 2, c * 2], [1, 81, 34, 81], 130, [0, 1/4, 8, 33/4]))

elif i==21 :

a = get_chord('B4','maj9').sort([2,3,4,1,5])

b = get_chord('B4','maj9').sort([2,3,4,1,5,2])

q = a + a[1:-1].reverse_chord()

q2 = b + b[3:-1].reverse_chord()

play((q.set(1/8,1/8) + q2.set(1/8,1/8))*2, 100, instrument=50)

Installez le module musicpy en utilisant pip install musicpy

Le programme contient une vingtaine d'exemples que vous pouvez choisir pour construire des fichiers temp.mid

Les fichiers ci-dessous correspondent à ces exemples :

Fichier temp0.mid

Fichier temp1.mid

Fichier temp2.mid

Fichier temp3.mid

Fichier temp4.mid

Fichier temp5.mid

Fichier temp6.mid

Fichier temp7.mid

Fichier temp8.mid

Fichier temp9.mid

Fichier temp10.mid

Fichier temp11.mid

Fichier temp12.mid

Fichier temp13.mid

Fichier temp14.mid

Fichier temp15.mid

Fichier temp16.mid

Fichier temp17.mid

Fichier temp18.mid

Fichier temp19.mid

Fichier temp20.mid

Fichier temp21.mid

Si vous voulez cons truire par vous- même des exemples musicaux avec le module musicpy, consultez le fichier d'aide ci-dessous :

Fichier helpmusicpy.txt

Retour dans la page index du site studyvoxmusi