56
56
57
57
< body >
58
58
< header >
59
- < aside > March 21 , 2025</ aside >
59
+ < aside > March 25 , 2025</ aside >
60
60
< a href ="https://gto76.github.io " rel ="author "> Jure Šorn</ a >
61
61
</ header >
62
62
@@ -2415,8 +2415,7 @@ <h3 id="format-2">Format</h3><div><h4 id="forstandardtypesizesandmanualalignment
2415
2415
< div > < h4 id ="playsthewavfile "> Plays the WAV file:</ h4 > < pre > < code class ="python language-python hljs "> < span class ="hljs-comment "> # $ pip3 install simpleaudio</ span >
2416
2416
< span class ="hljs-keyword "> from</ span > simpleaudio < span class ="hljs-keyword "> import</ span > play_buffer
2417
2417
< span class ="hljs-keyword "> with</ span > wave.open(< span class ="hljs-string "> 'test.wav'</ span > ) < span class ="hljs-keyword "> as</ span > file:
2418
- p = file.getparams()
2419
- frames = file.readframes(< span class ="hljs-number "> -1</ span > )
2418
+ frames, p = file.readframes(< span class ="hljs-number "> -1</ span > ), file.getparams()
2420
2419
play_buffer(frames, p.nchannels, p.sampwidth, p.framerate).wait_done()
2421
2420
</ code > </ pre > </ div >
2422
2421
@@ -2428,20 +2427,21 @@ <h3 id="format-2">Format</h3><div><h4 id="forstandardtypesizesandmanualalignment
2428
2427
</ code > </ pre > </ div >
2429
2428
2430
2429
< div > < h2 id ="synthesizer "> < a href ="#synthesizer " name ="synthesizer "> #</ a > Synthesizer</ h2 > < div > < h4 id ="playspopcornbygershonkingsley "> Plays Popcorn by Gershon Kingsley:</ h4 > < pre > < code class ="python language-python hljs "> < span class ="hljs-comment "> # $ pip3 install simpleaudio</ span >
2431
- < span class ="hljs-keyword "> import</ span > array, itertools < span class ="hljs-keyword "> as</ span > it, math, simpleaudio
2432
-
2433
- F = < span class ="hljs-number "> 44100</ span >
2434
- P1 = < span class ="hljs-string "> '71♩,69♪,,71♩,66♪,,62♩,66♪,,59♩,,,71♩,69♪,,71♩,66♪,,62♩,66♪,,59♩,,,'</ span >
2435
- P2 = < span class ="hljs-string "> '71♩,73♪,,74♩,73♪,,74♪,,71♪,,73♩,71♪,,73♪,,69♪,,71♩,69♪,,71♪,,67♪,,71♩,,,'</ span >
2436
- get_pause = < span class ="hljs-keyword "> lambda</ span > seconds: it.repeat(< span class ="hljs-number "> 0</ span > , int(seconds * F))
2437
- sin_f = < span class ="hljs-keyword "> lambda</ span > i, hz: math.sin(i * < span class ="hljs-number "> 2</ span > * math.pi * hz / F)
2438
- get_wave = < span class ="hljs-keyword "> lambda</ span > hz, seconds: (sin_f(i, hz) < span class ="hljs-keyword "> for</ span > i < span class ="hljs-keyword "> in</ span > range(int(seconds * F)))
2439
- get_hz = < span class ="hljs-keyword "> lambda</ span > note: < span class ="hljs-number "> 440</ span > * < span class ="hljs-number "> 2</ span > ** ((int(note[:< span class ="hljs-number "> 2</ span > ]) - < span class ="hljs-number "> 69</ span > ) / < span class ="hljs-number "> 12</ span > )
2440
- get_sec = < span class ="hljs-keyword "> lambda</ span > note: < span class ="hljs-number "> 1</ span > /< span class ="hljs-number "> 4</ span > < span class ="hljs-keyword "> if</ span > < span class ="hljs-string "> '♩'</ span > < span class ="hljs-keyword "> in</ span > note < span class ="hljs-keyword "> else</ span > < span class ="hljs-number "> 1</ span > /< span class ="hljs-number "> 8</ span >
2441
- get_samples = < span class ="hljs-keyword "> lambda</ span > note: get_wave(get_hz(note), get_sec(note)) < span class ="hljs-keyword "> if</ span > note < span class ="hljs-keyword "> else</ span > get_pause(< span class ="hljs-number "> 1</ span > /< span class ="hljs-number "> 8</ span > )
2442
- samples_f = it.chain.from_iterable(get_samples(n) < span class ="hljs-keyword "> for</ span > n < span class ="hljs-keyword "> in</ span > (P1+P2).split(< span class ="hljs-string "> ','</ span > ))
2443
- samples_i = array.array(< span class ="hljs-string "> 'h'</ span > , (int(f * < span class ="hljs-number "> 30000</ span > ) < span class ="hljs-keyword "> for</ span > f < span class ="hljs-keyword "> in</ span > samples_f))
2444
- simpleaudio.play_buffer(samples_i, < span class ="hljs-number "> 1</ span > , < span class ="hljs-number "> 2</ span > , F).wait_done()
2430
+ < span class ="hljs-keyword "> import</ span > itertools < span class ="hljs-keyword "> as</ span > it, math, array, simpleaudio
2431
+
2432
+ < span class ="hljs-function "> < span class ="hljs-keyword "> def</ span > < span class ="hljs-title "> play_notes</ span > < span class ="hljs-params "> (notes, bpm=< span class ="hljs-number "> 132</ span > , f=< span class ="hljs-number "> 44100</ span > )</ span > :</ span >
2433
+ get_pause = < span class ="hljs-keyword "> lambda</ span > n_beats: it.repeat(< span class ="hljs-number "> 0</ span > , int(n_beats * < span class ="hljs-number "> 60</ span > /bpm * f))
2434
+ sin_f = < span class ="hljs-keyword "> lambda</ span > i, hz: math.sin(i * < span class ="hljs-number "> 2</ span > * math.pi * hz / f)
2435
+ get_wave = < span class ="hljs-keyword "> lambda</ span > hz, n_beats: (sin_f(i, hz) < span class ="hljs-keyword "> for</ span > i < span class ="hljs-keyword "> in</ span > range(int(n_beats * < span class ="hljs-number "> 60</ span > /bpm * f)))
2436
+ get_hz = < span class ="hljs-keyword "> lambda</ span > note: < span class ="hljs-number "> 440</ span > * < span class ="hljs-number "> 2</ span > ** ((int(note[:< span class ="hljs-number "> 2</ span > ]) - < span class ="hljs-number "> 69</ span > ) / < span class ="hljs-number "> 12</ span > )
2437
+ get_nbeats = < span class ="hljs-keyword "> lambda</ span > note: < span class ="hljs-number "> 1</ span > /< span class ="hljs-number "> 2</ span > < span class ="hljs-keyword "> if</ span > < span class ="hljs-string "> '♩'</ span > < span class ="hljs-keyword "> in</ span > note < span class ="hljs-keyword "> else</ span > < span class ="hljs-number "> 1</ span > /< span class ="hljs-number "> 4</ span > < span class ="hljs-keyword "> if</ span > < span class ="hljs-string "> '♪'</ span > < span class ="hljs-keyword "> in</ span > note < span class ="hljs-keyword "> else</ span > < span class ="hljs-number "> 1</ span >
2438
+ get_samples = < span class ="hljs-keyword "> lambda</ span > n: get_wave(get_hz(n), get_nbeats(n)) < span class ="hljs-keyword "> if</ span > n < span class ="hljs-keyword "> else</ span > get_pause(< span class ="hljs-number "> 1</ span > /< span class ="hljs-number "> 4</ span > )
2439
+ samples_f = it.chain.from_iterable(get_samples(n) < span class ="hljs-keyword "> for</ span > n < span class ="hljs-keyword "> in</ span > notes.split(< span class ="hljs-string "> ','</ span > ))
2440
+ samples_i = array.array(< span class ="hljs-string "> 'h'</ span > , (int(fl * < span class ="hljs-number "> 5000</ span > ) < span class ="hljs-keyword "> for</ span > fl < span class ="hljs-keyword "> in</ span > samples_f))
2441
+ simpleaudio.play_buffer(samples_i, < span class ="hljs-number "> 1</ span > , < span class ="hljs-number "> 2</ span > , f).wait_done()
2442
+
2443
+ play_notes(< span class ="hljs-string "> '83♩,81♪,,83♪,,78♪,,74♪,,78♪,,71♪,,,,83♪,,81♪,,83♪,,78♪,,74♪,,78♪,,71♪,,,,'</ span >
2444
+ < span class ="hljs-string "> '83♩,85♪,,86♪,,85♪,,86♪,,83♪,,85♩,83♪,,85♪,,81♪,,83♪,,81♪,,83♪,,79♪,,83♪,,,,'</ span > )
2445
2445
</ code > </ pre > </ div > </ div >
2446
2446
2447
2447
@@ -2944,7 +2944,7 @@ <h3 id="format-2">Format</h3><div><h4 id="forstandardtypesizesandmanualalignment
2944
2944
2945
2945
2946
2946
< footer >
2947
- < aside > March 21 , 2025</ aside >
2947
+ < aside > March 25 , 2025</ aside >
2948
2948
< a href ="https://gto76.github.io " rel ="author "> Jure Šorn</ a >
2949
2949
</ footer >
2950
2950
0 commit comments