Skip to content

Commit 2b25805

Browse files
committed
Audio
1 parent d2c3ec8 commit 2b25805

File tree

2 files changed

+26
-26
lines changed

2 files changed

+26
-26
lines changed

README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2763,16 +2763,16 @@ def write_to_wav_file(filename, float_samples, nchannels=1, sampwidth=2, framera
27632763
#### Saves a sine wave to a mono WAV file:
27642764
```python
27652765
from math import pi, sin
2766-
frames_f = (sin(i * 2 * pi * 440 / 44100) for i in range(100000))
2767-
write_to_wav_file('test.wav', frames_f)
2766+
samples_f = (sin(i * 2 * pi * 440 / 44100) for i in range(100000))
2767+
write_to_wav_file('test.wav', samples_f)
27682768
```
27692769

27702770
#### Adds noise to a mono WAV file:
27712771
```python
27722772
from random import random
27732773
add_noise = lambda value: value + (random() - 0.5) * 0.03
2774-
frames_f = (add_noise(f) for f in read_wav_file('test.wav'))
2775-
write_to_wav_file('test.wav', frames_f)
2774+
samples_f = (add_noise(f) for f in read_wav_file('test.wav'))
2775+
write_to_wav_file('test.wav', samples_f)
27762776
```
27772777

27782778

@@ -2786,15 +2786,15 @@ from itertools import chain, repeat
27862786
F = 44100
27872787
P1 = '71♪,69,,71♪,66,,62♪,66,,59♪,,,'
27882788
P2 = '71♪,73,,74♪,73,,74,,71,,73♪,71,,73,,69,,71♪,69,,71,,67,,71♪,,,'
2789-
get_pause = lambda seconds: repeat(0, int(seconds * F))
2790-
sin_f = lambda i, hz: math.sin(i * 2 * math.pi * hz / F)
2791-
get_wave = lambda hz, seconds: (sin_f(i, hz) for i in range(int(seconds * F)))
2792-
get_hz = lambda key: 8.176 * 2 ** (int(key) / 12)
2793-
parse_note = lambda note: (get_hz(note[:2]), 0.25 if '' in note else 0.125)
2794-
get_frames = lambda note: get_wave(*parse_note(note)) if note else get_pause(0.125)
2795-
frames_f = chain.from_iterable(get_frames(n) for n in f'{P1}{P1}{P2}'.split(','))
2796-
frames_b = b''.join(struct.pack('<h', int(f * 30000)) for f in frames_f)
2797-
simpleaudio.play_buffer(frames_b, 1, 2, F)
2789+
get_pause = lambda seconds: repeat(0, int(seconds * F))
2790+
sin_f = lambda i, hz: math.sin(i * 2 * math.pi * hz / F)
2791+
get_wave = lambda hz, seconds: (sin_f(i, hz) for i in range(int(seconds * F)))
2792+
get_hz = lambda key: 8.176 * 2 ** (int(key) / 12)
2793+
parse_note = lambda note: (get_hz(note[:2]), 0.25 if '' in note else 0.125)
2794+
get_samples = lambda note: get_wave(*parse_note(note)) if note else get_pause(0.125)
2795+
samples_f = chain.from_iterable(get_samples(n) for n in f'{P1}{P1}{P2}'.split(','))
2796+
samples_b = b''.join(struct.pack('<h', int(f * 30000)) for f in samples_f)
2797+
simpleaudio.play_buffer(samples_b, 1, 2, F)
27982798
```
27992799

28002800

index.html

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2351,15 +2351,15 @@
23512351
</code></pre></div>
23522352

23532353
<div><h3 id="examples-1">Examples</h3><div><h4 id="savesasinewavetoamonowavfile">Saves a sine wave to a mono WAV file:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">from</span> math <span class="hljs-keyword">import</span> pi, sin
2354-
frames_f = (sin(i * <span class="hljs-number">2</span> * pi * <span class="hljs-number">440</span> / <span class="hljs-number">44100</span>) <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">100000</span>))
2355-
write_to_wav_file(<span class="hljs-string">'test.wav'</span>, frames_f)
2354+
samples_f = (sin(i * <span class="hljs-number">2</span> * pi * <span class="hljs-number">440</span> / <span class="hljs-number">44100</span>) <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">100000</span>))
2355+
write_to_wav_file(<span class="hljs-string">'test.wav'</span>, samples_f)
23562356
</code></pre></div></div>
23572357

23582358

23592359
<div><h4 id="addsnoisetoamonowavfile">Adds noise to a mono WAV file:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">from</span> random <span class="hljs-keyword">import</span> random
23602360
add_noise = <span class="hljs-keyword">lambda</span> value: value + (random() - <span class="hljs-number">0.5</span>) * <span class="hljs-number">0.03</span>
2361-
frames_f = (add_noise(f) <span class="hljs-keyword">for</span> f <span class="hljs-keyword">in</span> read_wav_file(<span class="hljs-string">'test.wav'</span>))
2362-
write_to_wav_file(<span class="hljs-string">'test.wav'</span>, frames_f)
2361+
samples_f = (add_noise(f) <span class="hljs-keyword">for</span> f <span class="hljs-keyword">in</span> read_wav_file(<span class="hljs-string">'test.wav'</span>))
2362+
write_to_wav_file(<span class="hljs-string">'test.wav'</span>, samples_f)
23632363
</code></pre></div>
23642364

23652365
<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>
@@ -2368,15 +2368,15 @@
23682368
F = <span class="hljs-number">44100</span>
23692369
P1 = <span class="hljs-string">'71♪,69,,71♪,66,,62♪,66,,59♪,,,'</span>
23702370
P2 = <span class="hljs-string">'71♪,73,,74♪,73,,74,,71,,73♪,71,,73,,69,,71♪,69,,71,,67,,71♪,,,'</span>
2371-
get_pause = <span class="hljs-keyword">lambda</span> seconds: repeat(<span class="hljs-number">0</span>, int(seconds * F))
2372-
sin_f = <span class="hljs-keyword">lambda</span> i, hz: math.sin(i * <span class="hljs-number">2</span> * math.pi * hz / F)
2373-
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)))
2374-
get_hz = <span class="hljs-keyword">lambda</span> key: <span class="hljs-number">8.176</span> * <span class="hljs-number">2</span> ** (int(key) / <span class="hljs-number">12</span>)
2375-
parse_note = <span class="hljs-keyword">lambda</span> note: (get_hz(note[:<span class="hljs-number">2</span>]), <span class="hljs-number">0.25</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">0.125</span>)
2376-
get_frames = <span class="hljs-keyword">lambda</span> note: get_wave(*parse_note(note)) <span class="hljs-keyword">if</span> note <span class="hljs-keyword">else</span> get_pause(<span class="hljs-number">0.125</span>)
2377-
frames_f = chain.from_iterable(get_frames(n) <span class="hljs-keyword">for</span> n <span class="hljs-keyword">in</span> <span class="hljs-string">f'<span class="hljs-subst">{P1}</span><span class="hljs-subst">{P1}</span><span class="hljs-subst">{P2}</span>'</span>.split(<span class="hljs-string">','</span>))
2378-
frames_b = <span class="hljs-string">b''</span>.join(struct.pack(<span class="hljs-string">'&lt;h'</span>, int(f * <span class="hljs-number">30000</span>)) <span class="hljs-keyword">for</span> f <span class="hljs-keyword">in</span> frames_f)
2379-
simpleaudio.play_buffer(frames_b, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, F)
2371+
get_pause = <span class="hljs-keyword">lambda</span> seconds: repeat(<span class="hljs-number">0</span>, int(seconds * F))
2372+
sin_f = <span class="hljs-keyword">lambda</span> i, hz: math.sin(i * <span class="hljs-number">2</span> * math.pi * hz / F)
2373+
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)))
2374+
get_hz = <span class="hljs-keyword">lambda</span> key: <span class="hljs-number">8.176</span> * <span class="hljs-number">2</span> ** (int(key) / <span class="hljs-number">12</span>)
2375+
parse_note = <span class="hljs-keyword">lambda</span> note: (get_hz(note[:<span class="hljs-number">2</span>]), <span class="hljs-number">0.25</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">0.125</span>)
2376+
get_samples = <span class="hljs-keyword">lambda</span> note: get_wave(*parse_note(note)) <span class="hljs-keyword">if</span> note <span class="hljs-keyword">else</span> get_pause(<span class="hljs-number">0.125</span>)
2377+
samples_f = chain.from_iterable(get_samples(n) <span class="hljs-keyword">for</span> n <span class="hljs-keyword">in</span> <span class="hljs-string">f'<span class="hljs-subst">{P1}</span><span class="hljs-subst">{P1}</span><span class="hljs-subst">{P2}</span>'</span>.split(<span class="hljs-string">','</span>))
2378+
samples_b = <span class="hljs-string">b''</span>.join(struct.pack(<span class="hljs-string">'&lt;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)
2379+
simpleaudio.play_buffer(samples_b, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, F)
23802380
</code></pre></div></div>
23812381

23822382

0 commit comments

Comments
 (0)