更改音符 [.wav] 的音高,无需拉伸或延长音符

问题描述 投票:0回答:1

可能已经有这个问题的答案,或类似的问题,但找不到我要找的东西;我正在寻找的概念在概念上很简单;

我有一个吉他音符(E2 或空 E 弦)的 wav 文件,并希望根据半音的增加来提高其音高。例如:向上 5 个半音将是空 A 弦或 A2。使用 python,我假设必须有一个库可以做到这一点,但到目前为止我无法弄清楚如何在不缩短文件的情况下提高

E2.wav
文件的音调;音符移动/音调越高,相应的声音就越短。

我使用的是一个软件包,但我看到人们在谈论

librosa
。我没有脚本作为代码示例发布,因为我想将其重写为更简单的函数。目标是能够有一个函数,无论音符移动到什么音高,都可以输出
.wav
秒长度的
x

对于看起来像

[0,5,10,15,20,24]
的音符序列,我们每
.wav
秒就会得到 5 个
x
,长度对应于
E2, A2, D2, G2, B2, E3

python audio signal-processing librosa pitch-shifting
1个回答
0
投票

(基于这个答案

Librosa 显然存在一些边界问题,但还算有效

import librosa.effects
import matplotlib.pyplot as plt
import numpy as np
test_signal = np.sin(2 * np.pi * 10 * np.linspace(0, 1, 16000, endpoint=False))
test_signal_pitch_shifted = librosa.effects.pitch_shift(test_signal, sr=16000, n_steps=4)

fig, axes = plt.subplots(2)
axes[0].plot(test_signal)
axes[0].plot(test_signal_pitch_shifted)

axes[1].plot(np.abs(np.fft.fft(test_signal)))
axes[1].plot(np.abs(np.fft.fft(test_signal_pitch_shifted)))
plt.show()

(由于某些原因我无法添加图片,一些服务器错误,稍后会尝试)

© www.soinside.com 2019 - 2024. All rights reserved.