From 778fe31c3814f5576fcff9c79b93562930dbf17e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pascal=20Eng=C3=A9libert?= Date: Thu, 27 Feb 2025 00:41:31 +0100 Subject: [PATCH] Initial commit --- fugue1.mid | Bin 0 -> 6725 bytes level1.py | 11 + level2.py | 18 + level3.py | 22 ++ level4.py | 42 +++ level5.py | 70 ++++ loop.py | 29 ++ mario.mid | Bin 0 -> 2745 bytes pub/level1.py | 13 + pub/level2.py | 8 + pub/level3.py | 21 ++ pub/level4.py | 18 + pub/level5.py | 13 + pub/level6.py | 13 + pub/synth.py | 237 +++++++++++++ pub/tutorial.pdf | Bin 0 -> 79364 bytes reunion.mid | Bin 0 -> 2534 bytes sheet | 4 + stage/__pycache__/synth.cpython-311.pyc | Bin 0 -> 13280 bytes stage/level1.py | 11 + stage/level2.py | 12 + stage/level3.py | 25 ++ stage/level4.py | 25 ++ stage/level5.py | 27 ++ stage/level6.py | 48 +++ stage/synth.py | 237 +++++++++++++ synthlib.py | 246 ++++++++++++++ test2.mid | Bin 0 -> 109 bytes tetris2.mid | Bin 0 -> 2223 bytes tuto/makefile | 7 + tuto/tutorial-head.html | 33 ++ tuto/tutorial.html | 427 ++++++++++++++++++++++++ tuto/tutorial.md | 232 +++++++++++++ tuto/tutorial.pdf | Bin 0 -> 79364 bytes zelda.mid | Bin 0 -> 39285 bytes 35 files changed, 1849 insertions(+) create mode 100644 fugue1.mid create mode 100644 level1.py create mode 100644 level2.py create mode 100644 level3.py create mode 100644 level4.py create mode 100644 level5.py create mode 100644 loop.py create mode 100644 mario.mid create mode 100644 pub/level1.py create mode 100644 pub/level2.py create mode 100644 pub/level3.py create mode 100644 pub/level4.py create mode 100644 pub/level5.py create mode 100644 pub/level6.py create mode 100644 pub/synth.py create mode 100644 pub/tutorial.pdf create mode 100644 reunion.mid create mode 100644 sheet create mode 100644 stage/__pycache__/synth.cpython-311.pyc create mode 100644 stage/level1.py create mode 100644 stage/level2.py create mode 100644 stage/level3.py create mode 100644 stage/level4.py create mode 100644 stage/level5.py create mode 100644 stage/level6.py create mode 100644 stage/synth.py create mode 100644 synthlib.py create mode 100644 test2.mid create mode 100644 tetris2.mid create mode 100755 tuto/makefile create mode 100644 tuto/tutorial-head.html create mode 100644 tuto/tutorial.html create mode 100644 tuto/tutorial.md create mode 100644 tuto/tutorial.pdf create mode 100644 zelda.mid diff --git a/fugue1.mid b/fugue1.mid new file mode 100644 index 0000000000000000000000000000000000000000..db1a26d824f13e409c306beae51733080adf596a GIT binary patch literal 6725 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 literal 0 HcmV?d00001 diff --git a/level1.py b/level1.py new file mode 100644 index 0000000..659f9e0 --- /dev/null +++ b/level1.py @@ -0,0 +1,11 @@ +""" +Niveau 1 +Jouer des sons +""" + +import synthlib, math + +sound_encoder = synthlib.SoundEncoder() +for i in range(13): + for t in range(4000): + sound_encoder.write_sample(math.sin(t/16000*440*2**(i/12)*2*math.pi)) diff --git a/level2.py b/level2.py new file mode 100644 index 0000000..aa0df43 --- /dev/null +++ b/level2.py @@ -0,0 +1,18 @@ +""" +Niveau 2 +Jouer une mélodie +""" + +import synthlib, math + +music = [ + (1, 0), + (1, 2), + (2, 4) +] + +sound_encoder = synthlib.SoundEncoder() +for note in music: + for t in range(note[0]*4000): + sound_encoder.write_sample(math.sin(t/16000*440*2**(note[1]/12)*2*math.pi)) + diff --git a/level3.py b/level3.py new file mode 100644 index 0000000..cc5c363 --- /dev/null +++ b/level3.py @@ -0,0 +1,22 @@ +""" +Niveau 3 +Jouer des accords + +Ne pas introduire le facteur d'amplitude avant d'avoir entendu le résultat sans lui +""" + +import synthlib, math + +music = [ + (1, [-9]), + (1, [-5]), + (1, [-2]), + (3, [-9, -5, -2]) +] + +sound_encoder = synthlib.SoundEncoder() +for note in music: + for t in range(note[0]*6000): + sound_encoder.write_sample(sum([0.3*math.sin(t/16000*440*2**(i/12)*2*math.pi) for i in note[1]])) + + diff --git a/level4.py b/level4.py new file mode 100644 index 0000000..7808444 --- /dev/null +++ b/level4.py @@ -0,0 +1,42 @@ +""" +Niveau 4 +Jouer des accords + +Ne pas introduire le facteur d'amplitude avant d'avoir entendu le résultat sans lui +""" + +import synthlib, math, sys + +music = synthlib.midi() + +active = {} +wait = 0 +tt = 0 +t = 0 +loop = True + +sound_encoder = synthlib.SoundEncoder() +while loop: + if wait == 0: + while True: + event = music[tt] + tt += 1 + if event.type == synthlib.Note: + if event.velocity == 0: + if event.number in active: + active.pop(event.number) + sys.stderr.write("pop "+str(event.number)+"\n") + else: + active[event.number] = event.velocity + sys.stderr.write(str(event.velocity)+" "+str(event.number)+" ("+str(len(active))+")\n") + elif event.type == synthlib.Wait: + wait = int(event.value*8000) + break + elif event.type == synthlib.End: + loop = False + break + else: + wait -= 1 + + sound_encoder.write_sample(sum([active[number]*math.sin(t/16000*440*2**(number/12)*2*math.pi) for number in active])/max(1,len(active))) + t += 1 diff --git a/level5.py b/level5.py new file mode 100644 index 0000000..6abd981 --- /dev/null +++ b/level5.py @@ -0,0 +1,70 @@ +""" +Niveau 5 +Nouveaux instruments +""" + +import synthlib, math, sys + +rate = 44100 + +def sine(t, f): + return math.sin(t/rate*f*2*math.pi) + +def cosine(t, f): + return math.cosin(t/rate*f*2*math.pi) + +def sine2(t, f): + return math.atan(math.sin(t/rate*f*2*math.pi)) + +def sine3(t, f): + return (sine(t,f) - sine2(t,f))*math.pi + +def sine4(t, f): + return (cosine(t,f) - sine3(t,f))*2 + +polynome = [32, 30, 8, 4, 2, 1] +lpolynome = len(polynome) +spolynome = sum(polynome) +def polynomial(t, f): + return sum(j*math.sin(t/rate*f*2*math.pi*i) for i,j in enumerate(polynome)) / spolynome + +music = synthlib.midi() + +active = {} +wait = 0 +tt = 0 +t = 0 +loop = True + +sound_encoder = synthlib.SoundEncoder(env={ + "sampling": rate, + "signed": True, + "verbose": False, + "bits": 32, + "msbfirst": True, + "tempo": 130 +}) +while loop: + if wait == 0: + while True: + event = music[tt] + tt += 1 + if event.type == synthlib.Note: + if event.velocity == 0: + if event.number in active: + active.pop(event.number) + else: + active[event.number] = event.velocity + #sys.stderr.write(str(event.velocity)+"\n") + elif event.type == synthlib.Wait: + wait = int(event.value*rate/2) + break + elif event.type == synthlib.End: + loop = False + break + else: + wait -= 1 + + sound_encoder.write_sample(sum([active[number]*polynomial(t, 440*2**(number/12)) for number in active])/max(1,len(active))) + t += 1 + diff --git a/loop.py b/loop.py new file mode 100644 index 0000000..1e51d38 --- /dev/null +++ b/loop.py @@ -0,0 +1,29 @@ +import synthlib, math, sys + +rate = 44100 + +# freq is multiplied by factor every period +def sine(t, period, decay, factor, full_period): + tt = (t + decay) % full_period + if tt == 0: + volume = 0 + elif tt <= full_period/2: + volume = tt/(full_period/2) + else: + volume = (full_period-tt)/(full_period/2) + freq_factor = 27.5*factor**(tt/period) + return volume**2*math.sin(tt*freq_factor/rate*2*math.pi) + +nb = 3 + +sound_encoder = synthlib.SoundEncoder(env={ + "sampling": rate, + "signed": True, + "verbose": False, + "bits": 32, + "msbfirst": True, + "tempo": 130 +}) +for t in range(rate*16): + sound_encoder.write_sample(sum([sine(t, rate, i*rate/nb*4, 2, rate*4) for i in range(nb)])/nb) + diff --git a/mario.mid b/mario.mid new file mode 100644 index 0000000000000000000000000000000000000000..c273142335e67543ce56ae6615370ea00511522c GIT binary patch literal 2745 zcmeHIL2lDP6n$e=P~`+&pvFs9aDZmv;-t3Xxc*VS03jBU5~+n!6VqzsrEkzXZ~>0M zQMgHXGh@=}0?8-{A(4$|{>=FQH_z`s=jG)Rz!NAa^*t}^55V9HHit(Scb`^um@n$9 zDtuK}pI?OK}eaPQ)Fb$z`EXLsCxeQ*#Q9b)q)VCHYn zaX%BJ5`2BS3 znxcvAN)vI2&`dZ?pv+4N)S2irsEO!_JvWR^*>*UCDmWBSbDo<+<)U-5rVBJYKv2q| zn2Mg7Y}%Cn>jg)mM}`B!Qs<)2e*(=!X9g&#?Km5Y9(NaY$Vmh*{pc3`vz3CG=n~); z@aD>!lXe}W>7TO)!giercrF9RqDiYVwK)?oz**)MOi)4kj7_l?;%^$^1o$g zm18>G)-9~{HO>H?Q9AV}ru*7qV%m>3iJZY4piTZdaBfXsrCZZe+aXW;^_?gATJm>) z8y!vAfXf9;oC7p@Z|>F&25uOknCtKl!#C(GrwnK pos: + return sys.argv[pos] + return default + +class Encoder: + def __init__(self, fp=None, fp_log=sys.stderr): + self.fp = fp if fp == None or fp.mode == "wb" else os.fdopen(fp.fileno(), 'wb') + self.fp_log = fp_log + + self.sampling = 16000 + self.signed = True + self.verbose = False + self.bits = 16 + self.msbfirst = True + + def write(self, amplitude): + if self.fp == None: + aplay = subprocess.Popen([ + "aplay", + "-r", + str(self.sampling), + "-f", + ("S" if self.signed else "U") + str(self.bits) + "_" + ("LE" if self.msbfirst else "BE") + ], stdin=subprocess.PIPE, stderr=self.fp_log) + self.fp = aplay.stdin + + smax = 2**(self.bits-self.signed)-1 + if self.signed: + v = int(amplitude*smax) + w = v + s = v < 0 + v = abs(v) + if s: + v = smax-v + v |= s << (self.bits-1) + else: + v = int((amplitude*smax+smax)/2) + w = v + + if self.msbfirst: + i = 0 + while i < self.bits: + if self.fp.write(bytes([(v>>i)&255])) > 1: + self.fp_log.write(str(v)) + if self.verbose: + self.fp_log.write(bin((v>>i)&255)[2:].zfill(8)) + i += 8 + else: + i = self.bits + while i > 0: + i -= 8 + self.fp.write(bytes([(v>>i)&255])) + if self.verbose: + self.fp_log.write(bin((v>>i)&255)[2:].zfill(8)) + + if self.verbose: + self.fp_log.write(" "+"0"*(self.bits-len(bin(v))+2)+bin(v)[2:]+" "+str(v)+" "+str(w)+"\n") + +class Event: + def __init__(self, type): + self.type = type + +class Wait(Event): + def __init__(self, value): + Event.__init__(self, Wait) + self.value = value + + def dict(self): + return { + "type": "wait", + "number": self.value, + } + +class End(Event): + def __init__(self): + Event.__init__(self, End) + + def dict(self): + return { + "type": "end" + } + +class Note(Event): + def __init__(self, number, velocity, channel=0, track=0): + Event.__init__(self, Note) + self.number = number + self.velocity = velocity + self.channel = channel + self.track = track + + def dict(self): + return { + "type": "note", + "number": self.number, + "velocity": self.velocity, + "channel": self.channel + } + +def midi_events(): + if len(sys.argv) < 2: + raise ValueError("Il faut donner le nom du fichier: python3 "+sys.argv[0]+" fichier.mid") + return read_midi(sys.argv[1], getarg(2, 130)) + +_midi = None +_midi_active = {} +_midi_wait = 0 +_midi_tt = 0 +_midi_loop = True +def midi2(): + global _midi, _midi_active, _midi_wait, _midi_tt, _midi_loop + if _midi == None: + _midi = midi_events() + + if _midi_loop: + if _midi_wait == 0: + while True: + event = _midi[_midi_tt] + _midi_tt += 1 + if event.type == Note: + if event.velocity == 0: + if (event.number, event.track) in _midi_active: + _midi_active.pop((event.number, event.track)) + else: + _midi_active[(event.number, event.track)] = event.velocity + elif event.type == Wait: + _midi_wait = int(event.value*8000) + break + elif event.type == End: + _midi_loop = False + break + else: + _midi_wait -= 1 + + return [[idx[0], idx[1], _midi_active[idx]] for idx in _midi_active] + +""" +Lit le fichier MIDI donné en argument de la commande. +Retourne, pour chaque échantillon, la liste des notes sous la forme [piste, note, amplitude]. +""" +class Midi: + def __init__(self, sampling=16000): + self.sampling = sampling + + def __iter__(self): + self.active = {} + self.wait = 0 + self.tt = 0 + self.loop = True + self.events = midi_events() + return self + + def __next__(self): + if self.loop: + if self.wait == 0: + while True: + event = self.events[self.tt] + self.tt += 1 + if event.type == Note: + if event.velocity == 0: + if (event.track, event.number) in self.active: + self.active.pop((event.track, event.number)) + else: + sys.stderr.write("Piste="+str(event.track)+" Note="+str(event.number)+" Force="+str(event.velocity)+"\n") + self.active[(event.track, event.number)] = event.velocity + elif event.type == Wait: + self.wait = int(event.value*self.sampling/2) + break + elif event.type == End: + self.loop = False + break + else: + self.wait -= 1 + + return [[idx[0], idx[1], self.active[idx]] for idx in self.active] + raise StopIteration + +def read_midi(filename, tempo): + mid = mido.MidiFile(filename) + result = [] + tracks = [0 for i in mid.tracks] + tempo = [tempo for i in mid.tracks] + wait = [None for i in mid.tracks] + end = [False for i in mid.tracks] + t = 0 + loop = True + while loop: + loop = False + + # Find the first events + first = [] + firstt = None + for i, track in enumerate(mid.tracks): + if end[i]: + continue + if wait[i] == None: + wait[i] = track[tracks[i]].time/tempo[i]/4 + + if firstt == None or wait[i] < firstt: + firstt = wait[i] + first = [i] + elif wait[i] == firstt: + first.append(i) + + if firstt > 0: + result.append(Wait(firstt)) + + # Play the first events + for i, track in enumerate(mid.tracks): + if end[i]: + continue + loop = True + msg = track[tracks[i]] + if i in first: + # Play event + if msg.type == "set_tempo": + tempo[i] = 6e7/msg.tempo + elif msg.type == "note_on": + result.append(Note(msg.note-50, msg.velocity/100, msg.channel, i)) + elif msg.type == "end_of_track": + result.append(End()) + end[i] = True + + # Find next event + tracks[i] += 1 + wait[i] = None + else: + wait[i] -= firstt + + if not (False in end): + loop = False + + return result diff --git a/pub/tutorial.pdf b/pub/tutorial.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ec61dc969037e1333255423fd7b181d6c3ddff51 GIT binary patch literal 79364 zcmdSCbyQVd*FKB_2HnygKtPZ>9N^F(B`u9~cc*kpcS=fkHzFV<-AK1cx0E2@cYsG9 zykBm|^T#*FZ-B@?d!ISyTGy&Q*R|(bn^b~NfEq}{00#un0n9WF;n>;XXk`qnjdcJ| z&woP6K-oZ9LzzKYLK#5mKp8^;pd_H|Ay@Pv*GwtkXn8GlG_1`mFJ)gt89}aFLzzJ2 zE_BSHw4rn%8gx)JP(Ubp$X}+5PY^8$OEYa7EuAYhNr*52iUIN!Gvq(`mr(;VQ$7uA zNG|wT>FMYh>FDXfbaeDA^i0p_faG*^

n6oNzj(+822SUC+C{xekDq-_H7lv^7K@ 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

u)#WLV;d^*aco0PQfM$^G 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 ZT3TsYSpD)!z+u2Li$O&tEF*&PzX05V%d-Fg literal 0 HcmV?d00001 diff --git a/reunion.mid b/reunion.mid new file mode 100644 index 0000000000000000000000000000000000000000..c23643e43eb5cf4b40a35f6e0137341ff565ddca GIT binary patch literal 2534 zcma)8-EJCJ5dPNLCTSH^sjXBaMO7iE=ex__o>;c436O<)x)_^jSI)hHP44~5y)r>)D&7i&trBF313RRNDUcdG?=DUJ@ ziPN<6vAPTFBdJpAd@7mBL}x}<1RY!kC5FUWzV`1tvA#YZ%)Be5^hm%F&Jj~gbW>1$Ekinuj7 zd#XvairVk$pEogQt4Q%7@v>V!aJVe4LzOOW!2}K4#6$cvG<>jsK2^F(#R^fe&;^+^ zBr(f&nSvXa1(PN=fewp4kbN>$RGczKJSi%gNS4JBU%4Fdc|AZmfCP$ntImUT7+2m@ z0#t)v4|(GUn*OTpRWpFEF5^j4%d~9qp0%~uxByLKOuS84)c`t2JfSm9_+S`T0?@D+ z=pkf2+7>x)`hw;zV-u|b;!|*SA`^?b6<)Tg!bB!2x$2p$Jy_iUJ(V?{bOFlkBOD$@ zv$pPq-$%Ev!Lm19Sgirt1Jnlbq@}yi9HKLfo2;yZRYeyk{Lv?v*G6cJ&>EpTTK0?% z4A2;(HAZ`k-dI0S9Y&?~kI_9w|2UrLOz4~D9i3x7e2DHt^dCmEA*|6Pnh|Ip7{Tg4 zLpLlApB2Z?&b}T3W2#`?3o#0#**#+tVo1Tb(7zXA5W)}RNe>vnIt+0X#?3?E2&*J! z`3_jgyZ`*gofM}1Fw+h*z3^p%(8vqX>h`DoAkz*qz2I#Z-OCF@D?J$U1}BDVF4dB? zj@;_W%XJdaxeO^E`0`O(KI}=nR)^=qYvV_zyGX+ghY-B7@6a<|4U8RRh$QRPKz+uL1z)|?)u)xi=1rQeT6MI(9q#$RzRJc5tgGGIu#X%m{rnp&gseVdB z-mpMXOCy?@*QVEne(W56ZWQ%F^7M-2E)m@TzDvf{%bM?!%eP=QZ$W=z$c&*yk&zRS z=SfbdGMi_f;zLc5C%#V-pAVvG9*H!SX)VnNlJ8&jW}V7)Sc|&?l?4_|rD_-tHf)p1 zO(ZucZLoaC)3yIrdG`mfFJczFp#?2B(iIN&69%^K%|bWsA-Qid6i=g*0w~m?aP_x_^Fpx=0Q~aD>L0gA|*%xsij|Wz9r5U?3_3`*m-gC zuw8Ln*cEXqutgk!T@|MayDpwDUR%7bI9=F1@rL3IVUNTa!5)h_tgRS{NIfftB}zs@+U$y%&1mwGU9pdmx~v|hw^4RLBocKnjGaq$yaVS8k3Pq>_Ne$MisuHP~o4X0Xb%VsIgOd@9Ho>||Uq1SvcgIv-UP?5?ft z>#m)O8kfU6Psb<1JJs_SCqj|fPB}cO>^!5K8d0WW>S-tu8V~Oz-#aF!4cB;Bg(hV$ zw17-kHUrS8B~JKrHZ5N2pY6{aSmYXWT;r14mtLFcNUzT^YYJkO*7^uaQlkjUp*-qG zTOs8`DomlIfRxZ-_6!*}793+hTIgXOC1uz}D9sr{Z)`L!h2?=!i~mp*>kw)e;NwG} zheVwveJI`}eFoCZAkk*3%p~d9X4Te0g%3$OYfCTJq^Mi)`H2;kXs0|RsSykBBm=SX zyr3kExyltK7Gi=G;~*wlF&<)WD~2V>yu%a;xEyp17|exJ542Y(YN+o)H6#bU1~&oZ zFc@I6YfOqy0{dNK5s-qo!HiA9_vA=4K5mFgXks!NiH#dBB{CihONKBNmQTf%u)&>* zsEQ#@D5u6EvZ8_zaY{HkCO1O+@>&22(xa`dO-5`CabzSCi>M~n?cHSl`=er+SXwil}FF;=L-#BGH@HN1j_T8wSi;3xZ_7sq@<+)N1o%7X+@Hm;Xs zL7rNj;}R_~s>Kru>sq{Y&PwFo8H=+rBXKcW;+NI6c{y%dsk zl1;#Pog5-X-b*8!pzg z8U}y|^d)%`AY&`qM{Mjg{U^ycBP0cTFD9n)T}Uerj>`J2PuqvOz7hdkg#^%E@+V+r z9;cl>J7bc!v|>L8eOUZ@N*@;gK^m6P%h@W8(o$8%NPhJjwB24VjcwcUceX5fBl)MO1;XL6mZsZ#sE7(3M7DztJC|=-Pk-}Y)K)O0;wUhOHPrxAZ?KPf5w&n2lOk^ z<4(%KX^j02DUzzBYCCn+&I;dDhZH!u=8WO2gn0#3ai-(@S#_674Vjfyq}DTJ`YEOO zWtc$UQVo`Mrqe|G5e-;7VDO>IXlOdYY?t8~Gw4Bse%qi&4CakqgW2B;77wqeQUuf> zyuz~l0PTPWFnuYReEkDXSVxqd;Ze??nv~uf6;+mT zlE_U6S`gp@VQ_C9eyf+LNBKF7vyqr;u%S~>^MV{v!v=q9S`905Gs!#!`0xqP%TXEC zM^KboG2Km+vU(oyM1Fzdod{ht=qZD~V9<&|M-)U9R4)lc|H^wHCE+itUeXuX=H^qx_BOH?s$CzFzdZ zd|eMI0FM!9dx`-nP?tWgbT?IiTAk}sGyw-);U6-b2ry$KG6e*gkDu}++k*hAPr@(S4Iwhqe z3-r~qy4a+%P+jZ#HB>pAk**FbbnCti*&5xuQ5QP$LPx3X`_T8vA{Aiwm|dADey~2Z zz94vKFI<_qJTw3H!jUX}eJH#8`fCgO^oA|@hAp}f%nQNWJ&VHjoUok?;46O3BEM!{ zS?IbpH8-X6t$DsR$G2iLNkEm~<1E#)aPIoSY{&I)U;F;t_p|4+a#qeaZvCq9g~i4f z?$qdwyYr2^b-p{#cjx%-0>`InF7;_WMK9&?A`ub8CqP@#H#-eO0kn^N(2#1d3IZ=@ z4_)cM+&|yB(7tfw`lc*J9Tbzp4*(`Hvg|6S9Bvzr2C?ea(QM?z;M|R zU0{XTm%d`_7uovE&_c(8dSm)0bw3%rQ}gjVpT6^P^QX=FhVDB@^bLFUrWf^w7k|#) z?fI$ebJyK-cjdeC=N`Rb{}->^=~e{Vc?#sHw^x2=xFZUWBSl=erQ;4 z7|tCZ(Hll|_Psp&UatHvvWS3*1~CbP0@|ms&_sA-#PE!afNgv}ir>DGk#pxmQ8PzI zg(Po5umJ&1sgEhrfH}tkn2G?_MoKvVK(l^@#^&sSo39lqk!f5G>VpiTvpO`}$5uz- zu>!747#@N3dN6;S#a`JZ|NB%AXEND`2KYpQ2 zZnk<5zYu&E9;E|7g?>ebX6k@tD}Y%aYpqTnT!8IcMUy@NIf(@-aRzrZ6mb%XgDQkb zL!_<>upF{wx|b8kJ4vZnrxcu9JTN7Y$k-kUsE|w|b7ZV0C0>O*gP#gT&s#))4U$$8 z-H+H>H1EYS?Eqj$%?MX^T;7qXpI3FJCC{|vn3h5n?uWK&@FQdzwPTMMkx{OJ4{*T% zmK7scVr~!_8ZfvE&>;u{%7EdDou4=rmV>m6*nLbB@ldeU(l(EiBBN@;O_0RT!;qz* zBGjn+-kO5HCOur_Sr1pFOu%xcfPBoaDj;t{O?jD=AgN>o2jNk60kBI6!!#5r3y2&8 zU9AMB&|o8@@K~Wto=3k^XxQGE%X{4Y+)vKuAmk{Z#CL$$T~(lT2nTM*-QC z5D^9B`5<rU+{vJ5huDf3!J{FZZ-3=ILcwSucO(}Huq1Y9g~btN#lij6q9 zisQoY2uWgF3V7ltVu_!KlQ{I07~DWy4HJuR6fLfDu(0z$-%vvda=yOcx@nZZbX;*7u-|lBy{!P{#{Z zb?F&UVd-em&70xp#2mB5r|Y{?kc(v+R*EUw;WNWe?t5IT2Smuc17bHYAw^>+A5 zJ1Tf%%0Weop%h@nS?0fY_TyBnAPd5P9E7@wt%sv+;HXyHq&Nt@+!hVD#o`lf()qTr z$mr=vSpIg~Gj>cwBzY^e@c=m)6v#fyH1u#|YIxp3mE0@KaoKRo z;gB=}6(R;d7LA8g;?!QYkQrVqFcL<~OOcUpr{Pg>x;eexJ&RmJj%!#FYjbtq`A7Ck z@m|fBUcK)1djopiur40Yi^p@!@g=clzGH67Lf72$AD#d4JGXmo%Rf4K^Q69EcYece zUF^<_-8s6O2+EK{NI2+_2+1~JhjYa$JGte6-LZKKDtrQu8A1+=Mt-Ea$~hncWq0^5 z-3~pcij^`IX3tRebcsc`PY71EibGUI3$PSQj`mT=w;TgjfBPWS>I1$lp&MgVv}a3U zijp_m<5`=ymCF!!>QmZs3LQ;*hC}HoRwU&lpXtn%MK?7&Eo=? zR5*i&$h3%j7xY1&!_q-XsDtMbF25gAh0GUp~YJ(?u zkVy=?LNc$T@%Uu<8x3RFH5-X3~JTSzXB-jRa~I_S0Q?S$(sP=Vo>6GB@X?sZ;Hh;40sad|ZSvW%0G*v(JT z>#suoJpIiy`&H(Qg~V!_T^@sMa2HMCiprX2o)+YKJ(U#)~Po@E(Ay@n>xo;h3Is{Kd8nh55qDTQX}zLSxrnr zK2a0zRqjNXy&Xv4>Ox+ea6`c^&~ZAG;JQGF7|}y=li6>TfjW z{q5S@P*6JxhdA`56Zl3Y@0pht#ipFtgle~Sp=;3%Dz&BHtxmrL8sC@mbl$H2v^nSL zhCiH?q`iMx^+6Tr{N`-_qP5sr<>a`mt#KSX5sd%}t!s*Phb_IWNdL zK`x*rp{cX)gDvrTw&7+A+7iOfoUjwElC2+ci=LL8r^T`*Zf@7t?7TzkYr6E>UHRHw znlu|JxV&azcF_YvX-1>MOn$flX!NAGkpjXTo;?hv#Q?tVmt_Vd<8J-uP^VY-^yVRz z?OhTZa!dn}lmQT0To;0_RUMPKTFK}PTDJX@6-+~L4ITvrOS69H!)``DmL0fU3>a}1 zsBUD|6seVfAVnH>*ej??h;rNu3*Hr&wDucg6}6aLwusFz<8XsRqGu_%2V$wn|P3cFV1E8 zAa(Nn6EKn)?~D&_ig+t3UZ&H5ByUf#HozN`K5($v%2sMs6v$QDUIG<@sTQzJR5wYu z5n&nwiqF|k(sLH_K^~T+&v=sFaeBs`9$rzN@Ir1#y0g~Cku*^PNw0I%G?h+5|9t6g z#Kt7MdOf?BCFyat;f&GLH>P*t>GUR?d@5~c{7G-p4aU!{q`zV&N$!$K6@WWP{))+j z6h|Hq)qcTI!&|EH(o@G>SD_x%w9G5XhxZpC1==L8!Cfr+ap#&4z0_nWST(sS{k*d&vGRlrJm@iRfDNNtP zFK5}L2RHuZvgv=9grsYV#=B$YJiGH*5|6;D2ORr*TuzW|kI)n=qN5me*t=08)D>arp$cLEk>=fkO zKNHJK*g8_ObVE}91~mHztW%a%q2h!ba7)|+^E$TOqO7x02f;} z=7o*WJnzzKz}&-Z??Y-EQw`>!wyEf%ynd~-;H}a&FV!|L9JukC>A1nGH}wQuI<1A^ z5{b*5YM&hgJBITYI3HN0sjk`aO#S7!7B2+qGJW8zKAaD<<^vts-rMarU)2NKZXeMD zJG6svOXbjgmk%x)#kAN0w{YZ!klnnvc1v#U7BFTr?dhXhU%?+p9ngBUUUGLQEoAmC zitBRXx&r6E^2X&iz>Iry_D${0C--@8Ds*`mJV>nj%FCBup0Cf0U2B&w^m>HMKQe<(-(X7xW_ba&+39p&n~ukD%Jqx0+X{JI>!4qYXKK)ZK< zM=#K}=EIEw;l_a^>Vjen@Z4XWyb4HEg*I5KOrR50( zF$7Tr=MWI1n27#Jt4j+>A$M)PP&CqbiWF>frX^$%zqML>TyOkid=OLy(u4Jtdu;faR>U@Z) zk1JWV0W7%^V4INoxRTYz(tB`}CE%gJZ^jp@YBbmp1~gB>>(fM-PMW94tfSFqYJ+=O d=tb9d=CF3>vMY^g;tptRF{|%?u7AXJ# literal 0 HcmV?d00001 diff --git a/stage/level1.py b/stage/level1.py new file mode 100644 index 0000000..ecb88e1 --- /dev/null +++ b/stage/level1.py @@ -0,0 +1,11 @@ +""" +Niveau 1 +Jouer un son +""" + +import synth + +encoder = synth.Encoder() +for t in range(64000): + #encoder.write(math.sin(t/16000*400)) + encoder.write(t/16000*400%1) diff --git a/stage/level2.py b/stage/level2.py new file mode 100644 index 0000000..2ff7887 --- /dev/null +++ b/stage/level2.py @@ -0,0 +1,12 @@ +""" +Niveau 2 +Jouer des notes +""" + +import synth +import math + +encoder = synth.Encoder() +for note in range(13): + for t in range(16000): + encoder.write(math.sin(t/16000 * 220 * 2**(note/12) * 2*math.pi)) diff --git a/stage/level3.py b/stage/level3.py new file mode 100644 index 0000000..af34a9d --- /dev/null +++ b/stage/level3.py @@ -0,0 +1,25 @@ +""" +Niveau 3 +Jouer une mélodie +""" + +import synth +import math + +music = [ + [1, 4], + [1, 3], + [1, 4], + [1, 3], + [1, 4], + [1, -1], + [1, 2], + [1, 0], + [2, -3] +] + +encoder = synth.Encoder() +for note in music: + for t in range(note[0]*3000): + encoder.write(math.sin(t/16000 * 440 * 2**(note[1]/12) * 2*math.pi)) + diff --git a/stage/level4.py b/stage/level4.py new file mode 100644 index 0000000..f6d15d4 --- /dev/null +++ b/stage/level4.py @@ -0,0 +1,25 @@ +""" +Niveau 4 +Jouer des accords +""" + +import synth +import math + +music = [ + [2, [5, 9]], + [2, [4, 8]], + [1, [-12]], + [1, [0, 2, 4]], + [1, [-10]], + [1, [2, 4, 6]], +] + +encoder = synth.Encoder() + +for chord in music: + for t in range(chord[0]*4000): + total = 0 + for note in chord[1]: + total = total + math.sin(t/16000 * 440 * 2**(note/12) * 2*math.pi) + encoder.write(total * 0.3) diff --git a/stage/level5.py b/stage/level5.py new file mode 100644 index 0000000..13a15f9 --- /dev/null +++ b/stage/level5.py @@ -0,0 +1,27 @@ +""" +Niveau 5 +Jouer une partition +""" + +import synth +import math + +music = synth.Midi(32000) + +encoder = synth.Encoder() +encoder.sampling = 32000 + +instruments = [ + lambda t, f: math.sin(t * f * 2*math.pi), + lambda t, f: math.sin(t * f * 2*math.pi) + math.sin(t * f * 4*math.pi)/2, + lambda t, f: math.sin(t * f * 2*math.pi) + math.sin(t * f * 4*math.pi)/2, + lambda t, f: t * f % 1 - 0.5, +] + +t = 0 +for notes in music: + total = 0 + for note in notes: + total = total + instruments[note[0]](t/32000, 440 * 2**(note[1]/12)) * note[2] + encoder.write(total * 0.3) + t = t + 1 diff --git a/stage/level6.py b/stage/level6.py new file mode 100644 index 0000000..5678bcd --- /dev/null +++ b/stage/level6.py @@ -0,0 +1,48 @@ +""" +Niveau 6 +Filtre audio +""" + +import synth +import math +import random + +music = synth.Midi(32000) + +encoder = synth.Encoder() +encoder.sampling = 32000 + +instruments = [ + lambda t, f: round(math.sin(t * f * 2*math.pi)) + random.random() * 0.3, + lambda t, f: math.sin(t * f * 2*math.pi), + lambda t, f: math.sin(t * f * 2*math.pi)*0.6 + math.sin(t * f * 4*math.pi)*0.3 + math.sin(t * f * 8*math.pi)*0.1, + lambda t, f: math.sin(t * f * 2*math.pi) + math.sin(t * f * 4*math.pi)/2, + lambda t, f: t * f % 1 - 0.5, +] + +delay1 = [0] * 1000 +delay2 = [0] * 3000 +delay3 = [0] * 5000 +phaser = [0] * 50 + +t = 0 +for notes in music: + total = 0 + for note in notes: + total = total + instruments[note[0]](t/32000, 440 * 2**(note[1]/12)) * note[2] + + total = total * (math.sin(t/32000 * 20 * 2*math.pi)/8+7/8) + total += delay1.pop(0) * 0.1 + total += delay2.pop(0) * 0.3 + total += delay3.pop(0) * 0.4 + delay1.append(total) + delay2.append(total) + delay3.append(total) + + lfo = math.sin(t/32000 * 0.2 * 2*math.pi) + phaser.append(total) + phaser.pop(0) + total += phaser[int((lfo/2+0.5)*(len(phaser)-1))] + + encoder.write(total * 0.1) + t = t + 1 diff --git a/stage/synth.py b/stage/synth.py new file mode 100644 index 0000000..aca2d7c --- /dev/null +++ b/stage/synth.py @@ -0,0 +1,237 @@ +#!/usr/bin/python3 + +import sys, os, subprocess, mido + +def getarg(pos, default): + if len(sys.argv) > pos: + return sys.argv[pos] + return default + +class Encoder: + def __init__(self, fp=None, fp_log=sys.stderr): + self.fp = fp if fp == None or fp.mode == "wb" else os.fdopen(fp.fileno(), 'wb') + self.fp_log = fp_log + + self.sampling = 16000 + self.signed = True + self.verbose = False + self.bits = 16 + self.msbfirst = True + + def write(self, amplitude): + if self.fp == None: + aplay = subprocess.Popen([ + "aplay", + "-r", + str(self.sampling), + "-f", + ("S" if self.signed else "U") + str(self.bits) + "_" + ("LE" if self.msbfirst else "BE") + ], stdin=subprocess.PIPE, stderr=self.fp_log) + self.fp = aplay.stdin + + smax = 2**(self.bits-self.signed)-1 + if self.signed: + v = int(amplitude*smax) + w = v + s = v < 0 + v = abs(v) + if s: + v = smax-v + v |= s << (self.bits-1) + else: + v = int((amplitude*smax+smax)/2) + w = v + + if self.msbfirst: + i = 0 + while i < self.bits: + if self.fp.write(bytes([(v>>i)&255])) > 1: + self.fp_log.write(str(v)) + if self.verbose: + self.fp_log.write(bin((v>>i)&255)[2:].zfill(8)) + i += 8 + else: + i = self.bits + while i > 0: + i -= 8 + self.fp.write(bytes([(v>>i)&255])) + if self.verbose: + self.fp_log.write(bin((v>>i)&255)[2:].zfill(8)) + + if self.verbose: + self.fp_log.write(" "+"0"*(self.bits-len(bin(v))+2)+bin(v)[2:]+" "+str(v)+" "+str(w)+"\n") + +class Event: + def __init__(self, type): + self.type = type + +class Wait(Event): + def __init__(self, value): + Event.__init__(self, Wait) + self.value = value + + def dict(self): + return { + "type": "wait", + "number": self.value, + } + +class End(Event): + def __init__(self): + Event.__init__(self, End) + + def dict(self): + return { + "type": "end" + } + +class Note(Event): + def __init__(self, number, velocity, channel=0, track=0): + Event.__init__(self, Note) + self.number = number + self.velocity = velocity + self.channel = channel + self.track = track + + def dict(self): + return { + "type": "note", + "number": self.number, + "velocity": self.velocity, + "channel": self.channel + } + +def midi_events(): + if len(sys.argv) < 2: + raise ValueError("Il faut donner le nom du fichier: python3 "+sys.argv[0]+" fichier.mid") + return read_midi(sys.argv[1], float(getarg(2, 80))) + +_midi = None +_midi_active = {} +_midi_wait = 0 +_midi_tt = 0 +_midi_loop = True +def midi2(): + global _midi, _midi_active, _midi_wait, _midi_tt, _midi_loop + if _midi == None: + _midi = midi_events() + + if _midi_loop: + if _midi_wait == 0: + while True: + event = _midi[_midi_tt] + _midi_tt += 1 + if event.type == Note: + if event.velocity == 0: + if (event.number, event.track) in _midi_active: + _midi_active.pop((event.number, event.track)) + else: + _midi_active[(event.number, event.track)] = event.velocity + elif event.type == Wait: + _midi_wait = int(event.value*8000) + break + elif event.type == End: + _midi_loop = False + break + else: + _midi_wait -= 1 + + return [[idx[0], idx[1], _midi_active[idx]] for idx in _midi_active] + +""" +Lit le fichier MIDI donné en argument de la commande. +Retourne, pour chaque échantillon, la liste des notes sous la forme [piste, note, amplitude]. +""" +class Midi: + def __init__(self, sampling=16000): + self.sampling = sampling + + def __iter__(self): + self.active = {} + self.wait = 0 + self.tt = 0 + self.loop = True + self.events = midi_events() + return self + + def __next__(self): + if self.loop: + if self.wait == 0: + while True: + event = self.events[self.tt] + self.tt += 1 + if event.type == Note: + if event.velocity == 0: + if (event.track, event.number) in self.active: + self.active.pop((event.track, event.number)) + else: + sys.stderr.write("Piste="+str(event.track)+" Note="+str(event.number)+" Force="+str(event.velocity)+"\n") + self.active[(event.track, event.number)] = event.velocity + elif event.type == Wait: + self.wait = int(event.value*self.sampling/2) + break + elif event.type == End: + self.loop = False + break + else: + self.wait -= 1 + + return [[idx[0], idx[1], self.active[idx]] for idx in self.active] + raise StopIteration + +def read_midi(filename, tempo): + mid = mido.MidiFile(filename) + result = [] + tracks = [0 for i in mid.tracks] + tempo = [tempo for i in mid.tracks] + wait = [None for i in mid.tracks] + end = [False for i in mid.tracks] + t = 0 + loop = True + while loop: + loop = False + + # Find the first events + first = [] + firstt = None + for i, track in enumerate(mid.tracks): + if end[i]: + continue + if wait[i] == None: + wait[i] = track[tracks[i]].time/tempo[i]/4 + + if firstt == None or wait[i] < firstt: + firstt = wait[i] + first = [i] + elif wait[i] == firstt: + first.append(i) + + if firstt > 0: + result.append(Wait(firstt)) + + # Play the first events + for i, track in enumerate(mid.tracks): + if end[i]: + continue + loop = True + msg = track[tracks[i]] + if i in first: + # Play event + if msg.type == "set_tempo": + tempo[i] = 6e7/msg.tempo + elif msg.type == "note_on": + result.append(Note(msg.note-50, msg.velocity/100, msg.channel, i)) + elif msg.type == "end_of_track": + result.append(End()) + end[i] = True + + # Find next event + tracks[i] += 1 + wait[i] = None + else: + wait[i] -= firstt + + if not (False in end): + loop = False + + return result diff --git a/synthlib.py b/synthlib.py new file mode 100644 index 0000000..768b94c --- /dev/null +++ b/synthlib.py @@ -0,0 +1,246 @@ +#!/usr/bin/python3 + +import sys, os, mido + +DEFAULT_ENV = { + "sampling": 16000, + "signed": True, + "verbose": False, + "bits": 16, + "msbfirst": True, + "tempo": 130 +} + +FP = sys.stdout + +class SoundEncoder: + def __init__(self, env=DEFAULT_ENV, fp=sys.stdout, fp_log=sys.stderr): + self.env = env + self.fp = fp if fp.mode == "wb" else os.fdopen(fp.fileno(), 'wb') + self.fp_log = fp_log + + def write_sample(self, amplitude): + smax = 2**(self.env["bits"]-self.env["signed"])-1 + if self.env["signed"]: + v = int(amplitude*smax) + w = v + s = v < 0 + v = abs(v) + if s: + v = smax-v + v |= (s<<(self.env["bits"]-1)) + else: + v = int((amplitude*smax+smax)/2) + w = v + + if self.env["msbfirst"]: + i = 0 + while i < self.env["bits"]: + if self.fp.write(bytes([(v>>i)&255])) > 1: + self.fp_log.write(str(v)) + b = bin((v>>i)&255)[2:] + if self.env["verbose"]: + self.fp_log.write("0"*(8-len(b))+b) + i += 8 + else: + i = self.env["bits"] + while i > 0: + i -= 8 + self.fp.write(bytes([(v>>i)&255])) + b = bin((v>>i)&255)[2:] + if self.env["verbose"]: + self.fp_log.write("0"*(8-len(b))+b) + + if self.env["verbose"]: + self.fp_log.write(" "+"0"*(self.env["bits"]-len(bin(v))+2)+bin(v)[2:]+" "+str(v)+" "+str(w)+"\n") + +class Event: + def __init__(self, type): + self.type = type + +class Wait(Event): + def __init__(self, value): + Event.__init__(self, Wait) + self.value = value + + def dict(self): + return { + "type": "wait", + "number": self.value, + } + +class End(Event): + def __init__(self): + Event.__init__(self, End) + + def dict(self): + return { + "type": "end" + } + +class Note(Event): + def __init__(self, number, velocity, channel=0, track=0): + Event.__init__(self, Note) + self.number = number + self.velocity = velocity + self.channel = channel + self.track = track + + def dict(self): + return { + "type": "note", + "number": self.number, + "velocity": self.velocity, + "channel": self.channel + } + +def midi(): + return from_midi3(sys.argv[1]) + +def from_midi(filename, env=DEFAULT_ENV): + result = [] + t = 0 + tempo = env["tempo"] + mid = mido.MidiFile(filename) + for i, track in enumerate(mid.tracks): + for msg in track: + if msg.type == "set_tempo": + tempo = 6e7/msg.tempo + elif msg.type == "note_on": + if msg.time != 0: + result.append(Wait(msg.time/tempo/4)) + result.append(Note(msg.note-50, msg.velocity/100, msg.channel)) + elif msg.type == "end_of_track": + result.append(Wait(msg.time/tempo/4)) + result.append(End()) + return result + +def from_midi2(filename, env=DEFAULT_ENV): + mid = mido.MidiFile(filename) + result = [] + tracks = [0 for i in mid.tracks] + tempos = [env["tempo"] for i in mid.tracks] + wait = [None for i in mid.tracks] + end = [True for i in mid.tracks] + t = 0 + loop = True + while loop: + loop = False + for i, track in enumerate(mid.tracks): + if end[i]: + loop = True + continue + if wait[i] == None: + wait[i] = track[tracks[i]].time/tempos[i]/4 + #result.append(Wait(track[tracks[i]].time/tempo/4)) + if wait[i] <= 0: + msg = track[tracks[i]] + if t > 0: + result.append(Wait(t)) + t = 0 + if msg.type == "set_tempo": + tempos[i] = 6e7/msg.tempo + elif msg.type == "note_on": + result.append(Note(msg.note-50, msg.velocity/100, msg.channel, i)) + elif msg.type == "end_of_track": + result.append(End()) + end[i] = False + tracks[i] += 1 + if len(track) > tracks[i]: + wait[i] = track[tracks[i]].time/tempos[i]/4 + + else: + wait[i] -= 1 + + print(t) + t += 1 + print(result) + exit() + return result + +def from_midi3(filename, env=DEFAULT_ENV): + mid = mido.MidiFile(filename) + result = [] + tracks = [0 for i in mid.tracks] + tempo = [env["tempo"] for i in mid.tracks] + wait = [None for i in mid.tracks] + end = [False for i in mid.tracks] + t = 0 + loop = True + while loop: + loop = False + + # Find the first events + first = [] + firstt = None + for i, track in enumerate(mid.tracks): + if end[i]: + continue + if wait[i] == None: + wait[i] = track[tracks[i]].time/tempo[i]/4 + + if firstt == None or wait[i] < firstt: + firstt = wait[i] + first = [i] + elif wait[i] == firstt: + first.append(i) + + if firstt > 0: + result.append(Wait(firstt)) + + # Play the first events + for i, track in enumerate(mid.tracks): + if end[i]: + continue + loop = True + msg = track[tracks[i]] + if i in first: + # Play event + if msg.type == "set_tempo": + tempo[i] = 6e7/msg.tempo + elif msg.type == "note_on": + result.append(Note(msg.note-50, msg.velocity/100, msg.channel, i)) + elif msg.type == "end_of_track": + result.append(End()) + end[i] = True + + # Find next event + tracks[i] += 1 + wait[i] = None + else: + wait[i] -= firstt + + if not (False in end): + loop = False + + ### + """loop = False + for i, track in enumerate(mid.tracks): + if end[i]: + loop = True + continue + if wait[i] == None: + wait[i] = track[tracks[i]].time/tempo[i]/4 + #result.append(Wait(track[tracks[i]].time/tempo/4)) + if wait[i] <= 0: + msg = track[tracks[i]] + if t > 0: + result.append(Wait(t)) + t = 0 + if msg.type == "set_tempo": + tempo[i] = 6e7/msg.tempo + elif msg.type == "note_on": + result.append(Note(msg.note-50, msg.velocity/100, msg.channel, i)) + elif msg.type == "end_of_track": + result.append(End()) + end[i] = False + tracks[i] += 1 + if len(track) > tracks[i]: + wait[i] = track[tracks[i]].time/tempo[i]/4 + + else: + wait[i] -= 1 + + print(t) + t += 1""" + return result diff --git a/test2.mid b/test2.mid new file mode 100644 index 0000000000000000000000000000000000000000..114cdeac1a5b1220f63b48343c54a82c5c4781a1 GIT binary patch literal 109 zcmeYb$w*;fU|?flWME``;2Tnu4djJ0{EuK^VUplr_#epxs*LLl=gF5FrqW<`4Tyl6K_ce-ZSt&{U1gc5 zg#I?YIkU@>TuxLKRCc~p4>(rRw$VA2jO&UDab1xyuCwbdIiR?s4mBexJgj7QKGE-X z%L$$7CI#%3;*Jt6+O;4ySJ+NZX{@K_16Xrh-gd?%nywk5N4oVAZ_&&SRjEm;1Qd*G zk190a16vf#&>q=GXiFrNZ3C=sMkJkMcUb+p#D# nk;ys}<>m4p?=z#DNH4M>Yc|Z*nnnYOWM2({7NT$$B`fwDD|I_b literal 0 HcmV?d00001 diff --git a/tuto/makefile b/tuto/makefile new file mode 100755 index 0000000..7fb0f6f --- /dev/null +++ b/tuto/makefile @@ -0,0 +1,7 @@ +all: tutorial.pdf + +tutorial.pdf: tutorial.html + wkhtmltopdf -s A4 --footer-center "[page] / [topage]" --footer-font-name "Libertinus Sans" --footer-font-size 11 --header-left "[subsection]" --header-right "[title] par Pascal Engélibert, 2025, CC BY-SA 4.0" --header-font-name "Libertinus Sans" --header-font-size 11 --margin-top 20mm --footer-spacing 7 --header-spacing 7 --margin-bottom 20mm tutorial.html tutorial.pdf + +tutorial.html: tutorial.md tutorial-head.html + pandoc tutorial.md -o tutorial.html --self-contained -M title="Tutoriel Python" --highlight-style pygments -H tutorial-head.html || exit 1 diff --git a/tuto/tutorial-head.html b/tuto/tutorial-head.html new file mode 100644 index 0000000..a2e4e43 --- /dev/null +++ b/tuto/tutorial-head.html @@ -0,0 +1,33 @@ + diff --git a/tuto/tutorial.html b/tuto/tutorial.html new file mode 100644 index 0000000..a7e6642 --- /dev/null +++ b/tuto/tutorial.html @@ -0,0 +1,427 @@ + + + + + + + Tutoriel Python + + + + +

+

Tutoriel Python

+
+

Tutoriel Python

+

Terminal

+

Ouvrir un terminal : CTRL+ALT+T ou le bouton noir en bas de +l’écran.

+

Commandes :

+
    +
  • ls : lister les +fichiers et dossiers
  • +
  • cd mondossier : changer de +dossier
  • +
  • cd .. : aller dans le dossier parent
  • +
  • mkdir mondossier : créer le dossier
  • +
  • python3 monfichier.py : lancer le fichier Python
  • +
  • mv ancien nouveau : déplacer ou renommer un fichier ou +dossier
  • +
  • cp ancien nouveau : copier un fichier
  • +
+

Raccourcis clavier :

+
    +
  • CTRL+C : arrêter la commande
  • +
  • Tab : compléter automatiquement le nom de fichier
  • +
  • flèche haut/bas : historique des commandes
  • +
+

Valeurs, variables, affichage

+

Afficher des valeurs avec print :

+
print(42)
+print(10, 20, 30)
+print("On peut écrire du texte.")
+print("Voici un nombre :", 123, ".")
+

Utiliser des variables :

+
annee = 2025
+print("Nous sommes en", annee)
+

Faire des calculs :

+
annee = 2025
+futur = annee + 10
+print("Dans 10 ans, nous serons en", futur)
+futur = futur + 5
+print("Dans 15 ans, nous serons en", futur)
+

Il y a d’autres opérateurs :

+
    +
  • + : addition
  • +
  • - : soustraction
  • +
  • * : multiplication
  • +
  • / : division
  • +
  • % : modulo (reste de la division)
  • +
  • ** : puissance
  • +
+

Faire des choix

+

Si (if) une valeur est vraie, alors je fais quelque chose :

+
if True:
+    print("True signifie vrai")
+    print("Donc ce code est toujours exécuté")
+if False:
+    print("False signifie faux")
+    print("Donc ce code n'est jamais exécuté")
+
+prix = 150
+if prix > 100:
+    print("C'est trop cher !")
+    prix = 100
+

Il y a d’autres comparateurs :

+
    +
  • == : égal
  • +
  • != : différent
  • +
  • < : inférieur
  • +
  • > : supérieur
  • +
  • <= : inférieur ou égal
  • +
  • >= : supérieur ou égal
  • +
+

Sinon (else), je fais autre chose :

+
if 6*7 == 42:
+    print("bien !")
+else:
+    print("oups")
+

On peut aussi enchaîner plusieurs else if :

+
if nombre > 0:
+    print("le nombre est strictement positif")
+elif nombre < 0:
+    print("le nombre est strictement négatif")
+else:
+    print("le nombre est nul")
+

Boucle for

+

On peut exécuter un code un nombre donné de fois :

+
print("Je vais compter de 0 à 9 !")
+for i in range(10):
+    print(i)
+
+print("Je vais compter de 1 à 10 !")
+for i in range(1, 11):
+    print(i)
+

Listes

+

Une liste est plusieurs valeurs entre crochets.

+

On peut ajouter un élément à la fin avec append, et +coller deux listes avec +.

+
fruits = []
+print("C'est vide :", fruits)
+fruits.append("pomme")
+fruits.append("kiwi")
+fruits = fruits + ["abricot", "orange"]
+

La boucle for exécute un code pour chaque élément de la +liste, dans l’ordre.

+
for fruit in fruits:
+    print("Ceci est un fruit :", fruit)
+

On peut lire un élément donné du tableau (la numérotation commence à +0) :

+
file = ["Toto", "Titi", "Tata", "Tutu"]
+print("La deuxième personne dans la file est", file[1])
+

On peut changer la valeur d’un élément de la liste :

+
file[2] = "Anne Onyme"
+

On peut aussi faire des listes de listes :

+
stock = [
+    ["patates", 52],
+    ["poireaux", 20],
+    ["carottes", 40]
+]
+for element in stock:
+    print("Nombre de", element[0], ":", element[1])
+

Pour avoir à la fois l’indice (le numéro) de l’élément, et l’élément +:

+
planetes = ["Mercure", "Vénus", "Terre", "Mars"]
+for i in range(len(planetes)):
+    print("La planète numéro", i+1, "se nomme", planetes[i])
+

On peut retirer un élément avec pop.

+
planetes = ["Lune", "Jupiter", "Saturne"]
+# Oups, la Lune n'est pas une planète.
+print("Je retire", planetes.pop(0), "de la liste.")
+

On peut agrandir une liste en répétant un élément un nombre donné de +fois :

+
zeros = [0] * 1000
+print("Mille zéros !", zeros)
+

Fonctions mathématiques

+
    +
  • max(a, b) : donne le plus grand nombre entre a et +b
  • +
  • min(a, b) : donne le plus petit nombre entre a et +b
  • +
  • max(liste) : donne la valeur maximum de la liste
  • +
  • min(liste) : donne la valeur minimum de la liste
  • +
  • sum(liste) : donne la somme de tous les éléments de la +liste
  • +
  • int(nombre) : partie entière (enlève les chiffres après +la virgule)
  • +
  • round(nombre) : arrondit au plus proche
  • +
  • abs(nombre) : valeur absolue (distance à zéro)
  • +
+

Pour avoir des fonctions plus avancées, il faut importer le module +math au début du fichier :

+
import math
+
    +
  • math.pi : 3.1415926…
  • +
  • math.sin(x) : sinus
  • +
  • math.cos(x) : cosinus
  • +
  • math.floor(x) : arrondit à l’inférieur
  • +
  • math.ceil(x) : arrondit au supérieur
  • +
+

Aléatoire

+

Il faut importer le module random au début du fichier +:

+
import random
+
    +
  • random.random() : nombre (à virgule) aléatoire entre 0 +et 1
  • +
  • random.randint(100, 200) : nombre (entier) aléatoire +entre 100 (inclus) et 200 (inclus)
  • +
  • random.choice(liste) : choisit un élément au hasard +dans la liste
  • +
+

Fonctions anonymes

+ + diff --git a/tuto/tutorial.md b/tuto/tutorial.md new file mode 100644 index 0000000..f275208 --- /dev/null +++ b/tuto/tutorial.md @@ -0,0 +1,232 @@ +# Tutoriel Python + +## Terminal + +Ouvrir un terminal : CTRL+ALT+T ou le bouton noir en bas de l'écran. + +Commandes : + +* `ls` : **l**i**s**ter les fichiers et dossiers +* `cd mondossier` : **c**hanger de **d**ossier +* `cd ..` : aller dans le dossier parent +* `mkdir mondossier` : créer le dossier +* `python3 monfichier.py` : lancer le fichier Python +* `mv ancien nouveau` : déplacer ou renommer un fichier ou dossier +* `cp ancien nouveau` : copier un fichier + +Raccourcis clavier : + +* `CTRL+C` : arrêter la commande +* `Tab` : compléter automatiquement le nom de fichier +* flèche haut/bas : historique des commandes + +## Valeurs, variables, affichage + +Afficher des valeurs avec `print` : + +```python +print(42) +print(10, 20, 30) +print("On peut écrire du texte.") +print("Voici un nombre :", 123, ".") +``` + +Utiliser des variables : + +```python +annee = 2025 +print("Nous sommes en", annee) +``` + +Faire des calculs : + +```python +annee = 2025 +futur = annee + 10 +print("Dans 10 ans, nous serons en", futur) +futur = futur + 5 +print("Dans 15 ans, nous serons en", futur) +``` + +Il y a d'autres opérateurs : + +* `+` : addition +* `-` : soustraction +* `*` : multiplication +* `/` : division +* `%` : modulo (reste de la division) +* `**` : puissance + +## Faire des choix + +Si (if) une valeur est vraie, alors je fais quelque chose : + +```python +if True: + print("True signifie vrai") + print("Donc ce code est toujours exécuté") +if False: + print("False signifie faux") + print("Donc ce code n'est jamais exécuté") + +prix = 150 +if prix > 100: + print("C'est trop cher !") + prix = 100 +``` + +Il y a d'autres comparateurs : + +* `==` : égal +* `!=` : différent +* `<` : inférieur +* `>` : supérieur +* `<=` : inférieur ou égal +* `>=` : supérieur ou égal + +Sinon (else), je fais autre chose : + +```python +if 6*7 == 42: + print("bien !") +else: + print("oups") +``` + +On peut aussi enchaîner plusieurs else if : + +```python +if nombre > 0: + print("le nombre est strictement positif") +elif nombre < 0: + print("le nombre est strictement négatif") +else: + print("le nombre est nul") +``` + +## Boucle for + +On peut exécuter un code un nombre donné de fois : + +```python +print("Je vais compter de 0 à 9 !") +for i in range(10): + print(i) + +print("Je vais compter de 1 à 10 !") +for i in range(1, 11): + print(i) +``` + +## Listes + +Une liste est plusieurs valeurs entre crochets. + +On peut ajouter un élément à la fin avec `append`, et coller deux listes avec `+`. + +```python +fruits = [] +print("C'est vide :", fruits) +fruits.append("pomme") +fruits.append("kiwi") +fruits = fruits + ["abricot", "orange"] +``` + +La boucle `for` exécute un code pour chaque élément de la liste, dans l'ordre. + +```python +for fruit in fruits: + print("Ceci est un fruit :", fruit) +``` + +On peut lire un élément donné du tableau (la numérotation commence à 0) : + +```python +file = ["Toto", "Titi", "Tata", "Tutu"] +print("La deuxième personne dans la file est", file[1]) +``` + +On peut changer la valeur d'un élément de la liste : + +```python +file[2] = "Anne Onyme" +``` + +On peut aussi faire des listes de listes : + +```python +stock = [ + ["patates", 52], + ["poireaux", 20], + ["carottes", 40] +] +for element in stock: + print("Nombre de", element[0], ":", element[1]) +``` + +Pour avoir à la fois l'indice (le numéro) de l'élément, et l'élément : + +```python +planetes = ["Mercure", "Vénus", "Terre", "Mars"] +for i in range(len(planetes)): + print("La planète numéro", i+1, "se nomme", planetes[i]) +``` + +On peut retirer un élément avec `pop`. + +```python +planetes = ["Lune", "Jupiter", "Saturne"] +# Oups, la Lune n'est pas une planète. +print("Je retire", planetes.pop(0), "de la liste.") +``` + +On peut agrandir une liste en répétant un élément un nombre donné de fois : + +```python +zeros = [0] * 1000 +print("Mille zéros !", zeros) +``` + +## Fonctions mathématiques + +* `max(a, b)` : donne le plus grand nombre entre a et b +* `min(a, b)` : donne le plus petit nombre entre a et b +* `max(liste)` : donne la valeur maximum de la liste +* `min(liste)` : donne la valeur minimum de la liste +* `sum(liste)` : donne la somme de tous les éléments de la liste +* `int(nombre)` : partie entière (enlève les chiffres après la virgule) +* `round(nombre)` : arrondit au plus proche +* `abs(nombre)` : valeur absolue (distance à zéro) + +Pour avoir des fonctions plus avancées, il faut importer le module `math` au début du fichier : + +```python +import math +``` + +* `math.pi` : 3.1415926... +* `math.sin(x)` : sinus +* `math.cos(x)` : cosinus +* `math.floor(x)` : arrondit à l'inférieur +* `math.ceil(x)` : arrondit au supérieur + +## Aléatoire + +Il faut importer le module `random` au début du fichier : + +```python +import random +``` + +* `random.random()` : nombre (à virgule) aléatoire entre 0 et 1 +* `random.randint(100, 200)` : nombre (entier) aléatoire entre 100 (inclus) et 200 (inclus) +* `random.choice(liste)` : choisit un élément au hasard dans la liste + +## Fonctions anonymes + + + + + + + diff --git a/tuto/tutorial.pdf b/tuto/tutorial.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ec61dc969037e1333255423fd7b181d6c3ddff51 GIT binary patch literal 79364 zcmdSCbyQVd*FKB_2HnygKtPZ>9N^F(B`u9~cc*kpcS=fkHzFV<-AK1cx0E2@cYsG9 zykBm|^T#*FZ-B@?d!ISyTGy&Q*R|(bn^b~NfEq}{00#un0n9WF;n>;XXk`qnjdcJ| z&woP6K-oZ9LzzKYLK#5mKp8^;pd_H|Ay@Pv*GwtkXn8GlG_1`mFJ)gt89}aFLzzJ2 zE_BSHw4rn%8gx)JP(Ubp$X}+5PY^8$OEYa7EuAYhNr*52iUIN!Gvq(`mr(;VQ$7uA zNG|wT>FMYh>FDXfbaeDA^i0p_faG*^

n6oNzj(+822SUC+C{xekDq-_H7lv^7K@ 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

u)#WLV;d^*aco0PQfM$^G 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 ZT3TsYSpD)!z+u2Li$O&tEF*&PzX05V%d-Fg literal 0 HcmV?d00001 diff --git a/zelda.mid b/zelda.mid new file mode 100644 index 0000000000000000000000000000000000000000..8dfb8e2aa8fea09fbbac9dc7f5692e772d384934 GIT binary patch literal 39285 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 literal 0 HcmV?d00001