37 lines
995 B
Python
Executable File
37 lines
995 B
Python
Executable File
#! /usr/bin/env python3
|
|
|
|
from tones import SINE_WAVE, SAWTOOTH_WAVE, SQUARE_WAVE
|
|
from tones.mixer import Mixer
|
|
import csv
|
|
import sys
|
|
|
|
GROUP_DURATION = 1.0
|
|
SILENCE_DURATION = 0.2
|
|
CHANNELS = 2
|
|
|
|
tones = {}
|
|
with open('tones.csv', newline='') as csvfile:
|
|
reader = csv.DictReader(csvfile)
|
|
for row in reader:
|
|
tones[row['designator']] = float(row['frequency'])
|
|
|
|
code = sys.argv[1]
|
|
print(f"Generating tone for SELCAL {code}")
|
|
|
|
# Create mixer, set sample rate and amplitude
|
|
mixer = Mixer(44100, 1)
|
|
for i in range(CHANNELS):
|
|
mixer.create_track(i, SQUARE_WAVE)
|
|
|
|
groups = code.split("-")
|
|
for groupindex,group in enumerate(groups):
|
|
for channel,tone in enumerate(group):
|
|
mixer.add_tone(channel, frequency=tones[tone], duration=GROUP_DURATION)
|
|
|
|
if groupindex != len(groups) - 1:
|
|
for i in range(CHANNELS):
|
|
mixer.add_silence(i, duration=SILENCE_DURATION)
|
|
|
|
# Mix all tracks into a single list of samples and write to .wav file
|
|
mixer.write_wav(f'{code}.wav')
|