aboutsummaryrefslogtreecommitdiff
path: root/beepemu-pyaudio
blob: f0d33470e362f3d619f1e6003e96df50ed64cbd8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/python

import math
import os
import sys
import time
import pyaudio

p = pyaudio.PyAudio()
sample_rate=44100
stream = p.open(
    format=pyaudio.paInt16,
    channels=1,
    rate=sample_rate,
    output=True
)
stream.start_stream()

i = 1
f = 0
l = 0
while i < len(sys.argv):
    if sys.argv[i] == '-f':
        i += 1
        f = float(sys.argv[i])
    elif sys.argv[i] == '-l':
        i += 1
        l = float(sys.argv[i])/1000
    elif sys.argv[i] == '-D':
        i += 1
        time.sleep(float(sys.argv[i])/1000)
    if f != 0 and l != 0:
        print(f, l)
        # https://stackoverflow.com/questions/974071/python-library-for-playing-fixed-frequency-sound
        num_samples = int(sample_rate * l)
        rest_frames = num_samples % sample_rate
        s = lambda i: 0.25 * math.sin(2 * math.pi * f * i / sample_rate)
        samples = (int(s(i) * 0x7F + 0x80) for i in range(num_samples))
        # write several samples at a time
        for buf in zip( *([samples] * sample_rate) ):
            stream.write(bytes(buf))
        # fill remainder of frameset with silence
        stream.write(b'\x80' * rest_frames)
        f = 0
        l = 0
    i += 1