我想使用 python 创建引擎转速声音(类似于 android/apple 上的 RevHeadz 应用程序)。有没有图书馆或方法可以做到这一点?我尝试随着转速的增加增加样本音频文件的频率,但我不知道如何动态更改音频样本的频率(足够快以至于它看起来是连续的)。任何建议都非常感谢!
我已经尝试过的代码 -
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)