所以我目前正试图在没有加速的情况下推销wav-File。 我正在使用Scipy和Numpy来获取Wave文件的原始数据,并尝试在原始数据中添加+2左右,我在创建新文件后收到的是一个完全混乱的Wave-File。
以下是我现在所得到的:
from scipy.io.wavfile import read as wavr
from scipy.io.wavfile import write as wavw
import numpy as np
rate, data = wavr('hit.wav')
idk = data[:]
R = []
L = []
for thing in idk:
old1 = thing[0] + 2.0
old2 = thing[1] + 2.0
R.append(old1)
L.append(old2)
print(len(L))
print(len(R))
Right= np.array(R)
Left= np.array(L)
help = np.column_stack((Right,Left))
print(rate)
wavw("copied.wav",44100,help)
也许我目前的尝试在任何情况下都是假的,如果是这样,你们可以告诉我该怎么做以实现我的目标
答案 0 :(得分:3)
亲爱的,你遇到了大麻烦(我已经去过那里)。
首先,我认为所有的wav文件都使用了不会超过某个阈值的浮点数,比如值介于-1和1之间。所以,当你添加&#34时,只需+ 2&#34 ;在你的文件中,你实际上是在使一切都饱和。
然后,你有一些关于音乐理论的错误。你可能知道声音是波浪。更准确地说,当你录制440Hz音符(音乐家用来调音乐器的A4音符)时,你得到的是正弦波(like this one)每秒振荡440次。更重要的是,它可以以0为中心,但声音不会有任何不同(这意味着在波浪中增加或删除一个常数是没有意义的;你唯一能做的就是让它饱和信号)。
因此,要更改声音的音高,您必须修改其频率:每秒振荡的次数。在音乐中,这被称为vocoder。它背后的理论已经很硬了;它来自一个名为信号处理的科学领域。更准确地说,(相位)声码器使用:
我可以继续玩下去,但我想你明白了这一点:任何接触声音频率的东西(比如音调)都充满了沉重的数学。信号处理是一个非常有趣的领域,但很难深入研究它。如果你有足够的数学技能,你可以在网上查看一些课程Stanford's。如果您只是想使用音乐和代码,请使用现有工具,而不是原始数据(我想到Processing或existing python libraries)。
如果你想用wav文件做一些简单的练习,尝试修改音量或速度(但要注意它会修改音高)。对于卷,您必须乘以(不添加)常量到文件的每个样本。对于速度,您可以从两个中删除一个样本以使音频速度提高两倍,或者增加波阵列的大小,并找到一个很好的解决方案,在每个现有样本之间放置相关样本(零?前一个样本?尝试出来的东西!)。
祝你好运!