forked from Minki/OffiTracker
Updated to version 1.1
Changelog: - Added the ability to add a file as a parameter to allow for autocompletion to be used. - Program now keeps the channel open instead of opening a new one for each row
This commit is contained in:
parent
109ce3b3fe
commit
52c3ce5ac8
@ -1,3 +1,4 @@
|
|||||||
|
import sys
|
||||||
import csv
|
import csv
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import sounddevice as sd
|
import sounddevice as sd
|
||||||
@ -12,7 +13,7 @@ import sounddevice as sd
|
|||||||
# Duration = tone duration in ms
|
# Duration = tone duration in ms
|
||||||
# (c) 2024 mueller_minki, Feel free to modify or share.
|
# (c) 2024 mueller_minki, Feel free to modify or share.
|
||||||
|
|
||||||
def play_square_waves(frequencies, effects, duration, amplitude=1, noise_amplitude=0, sample_rate=44100):
|
def play_square_waves(output_stream, frequencies, effects, duration, amplitude=1, noise_amplitude=0, sample_rate=44100):
|
||||||
num_waves = len(frequencies)
|
num_waves = len(frequencies)
|
||||||
t = np.linspace(0, duration / 1000, int(sample_rate * duration / 1000), endpoint=False)
|
t = np.linspace(0, duration / 1000, int(sample_rate * duration / 1000), endpoint=False)
|
||||||
|
|
||||||
@ -26,7 +27,9 @@ def play_square_waves(frequencies, effects, duration, amplitude=1, noise_amplitu
|
|||||||
|
|
||||||
combined_wave = np.sum(waves, axis=0)
|
combined_wave = np.sum(waves, axis=0)
|
||||||
|
|
||||||
sd.play(combined_wave, sample_rate, blocking=True)
|
combined_wave = combined_wave.astype(np.float32)
|
||||||
|
|
||||||
|
output_stream.write(combined_wave)
|
||||||
|
|
||||||
def play_csv_file(file_path):
|
def play_csv_file(file_path):
|
||||||
with open(file_path, 'r') as csv_file:
|
with open(file_path, 'r') as csv_file:
|
||||||
@ -35,16 +38,16 @@ def play_csv_file(file_path):
|
|||||||
num_columns = len(header)
|
num_columns = len(header)
|
||||||
num_pairs = (num_columns - 1) // 2
|
num_pairs = (num_columns - 1) // 2
|
||||||
|
|
||||||
for row in csv_reader:
|
with sd.OutputStream(channels=1) as output_stream:
|
||||||
frequencies = [float(row[f'Frequency{i}']) for i in range(1, num_pairs + 1)]
|
for row in csv_reader:
|
||||||
effects = [float(row[f'Effect{i}']) for i in range(1, num_pairs + 1)]
|
frequencies = [float(row[f'Frequency{i}']) for i in range(1, num_pairs + 1)]
|
||||||
duration = float(row['Duration'])
|
effects = [float(row[f'Effect{i}']) for i in range(1, num_pairs + 1)]
|
||||||
|
duration = float(row['Duration'])
|
||||||
|
|
||||||
# Check if 'Noise' column exists in the CSV file
|
# Check if 'Noise' column exists in the CSV file
|
||||||
noise_amplitude = float(row.get('Noise', 0))
|
noise_amplitude = float(row.get('Noise', 0))
|
||||||
|
|
||||||
play_square_waves(frequencies, effects, duration, noise_amplitude=noise_amplitude)
|
|
||||||
|
|
||||||
|
play_square_waves(output_stream, frequencies, effects, duration, noise_amplitude=noise_amplitude)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print(' ')
|
print(' ')
|
||||||
@ -55,6 +58,10 @@ if __name__ == "__main__":
|
|||||||
print('/ | \ | | | | | | | | | \// __ \\\\ \___| <\ ___/| | \/')
|
print('/ | \ | | | | | | | | | \// __ \\\\ \___| <\ ___/| | \/')
|
||||||
print('\_______ /__| |__| |__| |____| |__| (____ /\___ >__|_ \\\\___ >__| ')
|
print('\_______ /__| |__| |__| |____| |__| (____ /\___ >__|_ \\\\___ >__| ')
|
||||||
print(' \/ \/ \/ \/ \/ ')
|
print(' \/ \/ \/ \/ \/ ')
|
||||||
csv_file_path = input("Choose a CSV file: ")
|
print(' Version 1.1')
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
csv_file_path = sys.argv[1]
|
||||||
|
else:
|
||||||
|
csv_file_path = input("Choose a CSV file: ")
|
||||||
play_csv_file(csv_file_path)
|
play_csv_file(csv_file_path)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user