Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python从fft频谱创建声音文件?_Python_Audio_Signal Processing - Fatal编程技术网

如何使用Python从fft频谱创建声音文件?

如何使用Python从fft频谱创建声音文件?,python,audio,signal-processing,Python,Audio,Signal Processing,假设我有一个1s长的声音文件(file1.wav)。 我可以通过via阅读 from scipy.io import wavfile samplerate, data = wavfile.read("file1.wav") 然后,我可以通过以下方式对其进行傅里叶变换: from scipy.fft import fft yf=fft(data) 现在让我们假设我有另一个文件2,其中也包含一个声音,它的持续时间与文件1不同(它可能还有另一个采样器) 现在我想创建一个与文件2

假设我有一个1s长的声音文件(file1.wav)。 我可以通过via阅读

from scipy.io import wavfile
samplerate, data = wavfile.read("file1.wav")
然后,我可以通过以下方式对其进行傅里叶变换:

from scipy.fft import fft
yf=fft(data)
现在让我们假设我有另一个文件2,其中也包含一个声音,它的持续时间与文件1不同(它可能还有另一个采样器)

现在我想创建一个与文件2一样长的频谱yf声音,并将两者相加


我如何从文件1中使用samplerate和文件2中的持续时间计算声音,以便能够将两者相加?

听起来这里的基本问题是“如何将音频拉伸/压缩到另一个持续时间”。这是一项不平凡的任务,没有一种银弹方法在所有情况下都能很好地工作。见维基百科。它关系到你操作的是哪种音频:语音、音乐还是其他什么

一个不错的起点是基于波形相似性的同步重叠加法或WSOLA算法。执行WSOLA的一种方法是免费使用其“节奏”效果:

更改音频播放速度,但不更改其音调。此效果使用WSOLA算法。音频被切分为若干段,然后在时域中移动,并在通过“最小二乘法”测量确定的波形最相似的点处重叠(交叉褪色)

示例用法:

sox infile.wav outfile.wav tempo -s 1.1
其中
1.1
表示“加速10%”,而
-s
配置为语音(其他选项为
-m
用于音乐或
-l
用于通用“线性”处理)。除此之外,还有其他选择,以了解更多细节

(旁注:一个相关的问题是在不改变持续时间的情况下改变音高。SoX也可以做到这一点;请参阅“音高”和“弯曲”效果。)

如果您想在Python中执行时间拉伸,那么有一个封装SoX的库。Python中的另一种可能性是,它实现了WSOLA和其他一些时间拉伸方法。

我研究过:但这里不能自由选择输出文件的大小。