1

我想使用 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)
4

0 回答 0