VScode 在第 12 和 22 行显示错误。这是代码。
from scipy.io import wavfile
import numpy as np
def change_pitch(input_file, output_file, semitones, nsemitones):
# Read the .wav file
sample_rate, data = wavfile.read(input_file)
# Define the pitch shift factor
pitch_factor = 2 ** (semitones / nsemitones)
# Apply pitch shift
shifted_data = np.interp( np.arange(0, len(data), pitch_factor),np.arange(0, len(data)),data).astype(data.dtype)
# Write the modified data to a new .wav file
wavfile.write(output_file, sample_rate, shifted_data)
#Test usage
input_file = "rhodes.wav"
output_file = "output.wav"
semitones_to_change = 10 # Change this value according to your requirement
nsemitones = 12
change_pitch(input_file, output_file, semitones_to_change, nsemitones)
以下是错误:
File "C:\Users\hp\OneDrive\Bureau\useless fucking MIDi\python.py", line 12, in change_pitch
shifted_data = np.interp( np.arange(0, len(data), pitch_factor),np.arange(0, len(data)),data).astype(data.dtype)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
line 22, in <module>
change_pitch(input_file, output_file, semitones_to_change, nsemitones)
ValueError: object too deep for desired array
我想将“rhodes.wav”的频率更改为 c4 而不是 d3
作者在这里。 wav 文件的频道过多。您需要从立体声转换为单声道,或者为每个通道制作一个。要从立体声转换为单声道,您需要在第 6 行之后添加此代码。
if len(data.shape) > 1:
data = data.mean(axis=1)
但是,如果你想对每个通道进行移动,则需要创建一个 for i in range[1,len(data)] 循环,然后使用
合并它们导入波 def组合_wav_文件(输出文件,输入文件): 使用wave.open(input_files[0],'rb')作为wave_file: params = wave_file.getparams() 将wave.open(output_file[0],'wb') 作为wave_file: 参数 = 输出.setparams(参数) 对于 input_files 中的文件: 将wave.open(file, 'rb') 作为wave_file: 数据 = wave_file.readframes(wave_file.getnframes) 输出.writeframes(数据) 我希望这有帮助。