Я хочу создавать звуки оборотов двигателя (аналогичные приложению RevHeadz на android / apple), используя python. Есть ли библиотека или способ сделать это? Я пробовал увеличивать частоту образца аудиофайла по мере увеличения оборотов, но я не знаю, как изменить частоту аудиофайла на лету (достаточно быстро, чтобы он казался непрерывным). Любые предложения приветствуются!
Код для того, что я уже пробовал -
import sounddevice as sd
import soundfile as sf
import curses
import time
screen = curses.initscr() # initialize a terminal screen for you
curses.noecho() # don't show what input was entered
curses.cbreak() #character break -> don't wait for enter to accept input
screen.keypad(True)
screen.scrollok(True)
data, fs = sf.read('engine_start.wav', dtype='float32')
sd.play(data, fs)
sd.wait()
filename = 'engine_short.wav'
# Extract data and sampling rate from file
data, fs = sf.read(filename, dtype='float32')
sd.play(data, fs, loop = True)
#status = sd.wait() # Wait until file is done playing
class ecu:
def __init__(self, frequency):
self.fs = 1
def speedUp(self):
if (self.fs + 0.1 <= 2):
self.fs += 0.1
def slowDown(self):
if (self.fs - 0.1 >= 0.5):
self.fs -= 0.1
newECU = ecu(fs)
while True:
char = screen.getch()
if char == 113:
screen.addstr("Exiting...\n")
curses.echo()
curses.nocbreak()
screen.keypad(False)
curses.endwin() #close application
exit() # q
elif char == curses.KEY_UP:
if (newECU.fs + 0.005 <= 2.0):
newECU.fs += 0.005
value = "UP: " + str(newECU.fs) + "\n"
sd.play(data, fs * newECU.fs, loop = True)
screen.addstr(value)
time.sleep(0.100)
elif char == curses.KEY_DOWN:
if (newECU.fs - 0.005 >= 1.0):
newECU.fs -= 0.005
value = "DOWN: " + str(newECU.fs) + "\n"
sd.play(data, fs * newECU.fs, loop = True)
screen.addstr(value)
time.sleep(0.100)
elif char == 115:
value = "Current Speed: " + str(newECU.fs) + "\n"
screen.addstr(value)