mirror of
https://git.exozy.me/a/Never-Gonna-Give-Beep-Up
synced 2024-11-22 14:17:29 +00:00
47 lines
1.2 KiB
Plaintext
47 lines
1.2 KiB
Plaintext
|
#!/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
|