Commit all testing programs

This commit is contained in:
Anthony Wang 2022-10-03 18:12:57 -04:00
parent ef083f3740
commit 80e92d1cab
No known key found for this signature in database
GPG Key ID: 42A5B952E6DD8D38
5 changed files with 151 additions and 6 deletions

View File

@ -1,9 +1,8 @@
#!/usr/bin/python
import math
import os
import sys
import time
from pysinewave import SineWave
i = 1
f = 0
@ -20,11 +19,8 @@ while i < len(sys.argv):
time.sleep(float(sys.argv[i])/1000)
if f != 0 and l != 0:
print(f, l)
s = SineWave(pitch_per_second=1000)
s.set_frequency(f)
s.play()
os.system(f'play -n synth {l} sawtooth {f} &')
time.sleep(l)
s.stop()
f = 0
l = 0
i += 1

46
beepemu-pyaudio Executable file
View File

@ -0,0 +1,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

30
beepemu-pysinewave Executable file
View File

@ -0,0 +1,30 @@
#!/usr/bin/python
import math
import sys
import time
from pysinewave import SineWave
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)
s = SineWave(pitch_per_second=1000)
s.set_frequency(f)
s.play()
time.sleep(l)
s.stop()
f = 0
l = 0
i += 1

26
beepemu-sox Executable file
View File

@ -0,0 +1,26 @@
#!/usr/bin/python
import os
import sys
import time
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)
os.system(f'play -n synth {l} sawtooth {f} &')
time.sleep(l)
f = 0
l = 0
i += 1

47
test.py Normal file
View File

@ -0,0 +1,47 @@
import math
from pyaudio import PyAudio, paUInt8
def generate_sine_wave(frequency, duration, volume=0.2, sample_rate=22050):
''' Generate a tone at the given frequency.
Limited to unsigned 8-bit samples at a given sample_rate.
The sample rate should be at least double the frequency.
'''
if sample_rate < (frequency * 2):
print('Warning: sample_rate must be at least double the frequency '
f'to accurately represent it:\n sample_rate {sample_rate}'
f'{frequency*2} (frequency {frequency}*2)')
num_samples = int(sample_rate * duration)
rest_frames = num_samples % sample_rate
pa = PyAudio()
stream = pa.open(
format=paUInt8,
channels=1, # mono
rate=sample_rate,
output=True,
)
# make samples
s = lambda i: volume * math.sin(2 * math.pi * frequency * 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)
stream.stop_stream()
stream.close()
pa.terminate()
generate_sine_wave(
# see http://www.phy.mtu.edu/~suits/notefreqs.html
frequency=440, # Hz, waves per second C6
duration=0.2, # seconds to play sound
volume=0.25, # 0..1 how loud it is
sample_rate=44100, # number of samples per second: 11025, 22050, 44100
)