区块链技术博客
www.b2bchain.cn

Python:对音乐文件执行FFT – python程序员分享

本文介绍了Python:对音乐文件执行FFT – python程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我试图对我创建的歌曲(wav格式的音频文件,大约3分钟)进行FFT,以防万一它是相关的。

ffmpeg -i "$1" -vn -ab 128k -ar 44100 -y -ac 1 "${1%.webm}.wav" 

其中$1是webm文件的名称。

这是应该显示给定文件的FFT的代码:

import numpy as np import matplotlib.pyplot as plt  # presume file already converted to wav. file = os.path.join(temp_folder, file_name)  rate, aud_data = scipy.io.wavfile.read(file)  # wav file is mono. channel_1 = aud_data[:]  fourier = np.fft.fft(channel_1)  plt.figure(1) plt.plot(fourier) plt.xlabel('n') plt.ylabel('amplitude') plt.show() 

问题是,它永远存在。花费了这么长时间,我什至无法显示输出,因为我有足够的时间来研究和撰写这篇文章,但仍然没有完成。

我认为文件太长,因为

print (aud_data.shape) 

输出(9218368,),但这似乎是一个现实问题,所以我希望有一种方法可以某种方式获取音频文件的FFT。

我究竟做错了什么?谢谢。

编辑

这个问题的更好表达是:音乐处理中的FFT是否有用?例如2件相似。

正如评论中指出的那样,我的简单方法太慢了。

谢谢。

python大神给出的解决方案

为了大大加快分析的fft部分,您可以将数据零填充至2的幂:

import numpy as np import matplotlib.pyplot as plt  # rate, aud_data = scipy.io.wavfile.read(file) rate, aud_data = 44000, np.random.random((9218368,))  len_data = len(aud_data)  channel_1 = np.zeros(2**(int(np.ceil(np.log2(len_data))))) channel_1[0:len_data] = aud_data  fourier = np.fft.fft(channel_1) 

这是使用上述方法绘制一些正弦波的傅立叶变换的实部的示例:

import numpy as np import matplotlib.pyplot as plt  # rate, aud_data = scipy.io.wavfile.read(file) rate = 44000 ii = np.arange(0, 9218368) t = ii / rate aud_data = np.zeros(len(t)) for w in [1000, 5000, 10000, 15000]:     aud_data += np.cos(2 * np.pi * w * t)  # From here down, everything else can be the same len_data = len(aud_data)  channel_1 = np.zeros(2**(int(np.ceil(np.log2(len_data))))) channel_1[0:len_data] = aud_data  fourier = np.fft.fft(channel_1) w = np.linspace(0, 44000, len(fourier))  # First half is the real component, second half is imaginary fourier_to_plot = fourier[0:len(fourier)//2] w = w[0:len(fourier)//2]  plt.figure(1)  plt.plot(w, fourier_to_plot) plt.xlabel('frequency') plt.ylabel('amplitude') plt.show() 

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:’我的名字是乔。 I’mWorkerInAAAinc”变成…

我编写了以下函数,其中传递了x,y的值:def check(x, y): print(type(x)) print(type(y)) print(x) print(y) if x == y: print "Yes" 现在当我打电话check(1.00000000000000001, 1.0000000000000002)它正在打印:&lt…

This question already has answers here: How do I watch a file for changes? (23个答案) 3年前关闭。 我是python的新手,但是我尝试创建一个自动化过程,其中我的代码将侦听目录中的新文件条目。例如,某人可以手动将zip文件复制到一个特定的文件夹中,并且我希望我的代码能够在文件完全…

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Python:对音乐文件执行FFT – python程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们