通过python从音频文件中提取音频频谱

2023-11-26

抱歉,如果我提交重复的内容,但我想知道 python 中是否有任何库可以使您能够从音频文件中提取声谱。我希望能够获取音频文件并编写一个算法,该算法将返回一组数据 {TimeStampInFile;频率-幅度}。

我听说这通常称为节拍检测,但据我所知,节拍检测不是一种精确的方法,它仅适用于可视化,而我想对提取的数据进行操作,然后将其转换回音频文件。我不需要实时执行此操作。

我将不胜感激任何建议和推荐。


您可以使用 scipy 计算和可视化频谱和频谱图,对于此测试,我使用了以下音频文件:维涅什.wav

from scipy.io import wavfile # scipy library to read wav files
import numpy as np

AudioName = "vignesh.wav" # Audio File
fs, Audiodata = wavfile.read(AudioName)

# Plot the audio signal in time
import matplotlib.pyplot as plt
plt.plot(Audiodata)
plt.title('Audio signal in time',size=16)

# spectrum
from scipy.fftpack import fft # fourier transform
n = len(Audiodata) 
AudioFreq = fft(Audiodata)
AudioFreq = AudioFreq[0:int(np.ceil((n+1)/2.0))] #Half of the spectrum
MagFreq = np.abs(AudioFreq) # Magnitude
MagFreq = MagFreq / float(n)
# power spectrum
MagFreq = MagFreq**2
if n % 2 > 0: # ffte odd 
    MagFreq[1:len(MagFreq)] = MagFreq[1:len(MagFreq)] * 2
else:# fft even
    MagFreq[1:len(MagFreq) -1] = MagFreq[1:len(MagFreq) - 1] * 2 

plt.figure()
freqAxis = np.arange(0,int(np.ceil((n+1)/2.0)), 1.0) * (fs / n);
plt.plot(freqAxis/1000.0, 10*np.log10(MagFreq)) #Power spectrum
plt.xlabel('Frequency (kHz)'); plt.ylabel('Power spectrum (dB)');


#Spectrogram
from scipy import signal
N = 512 #Number of point in the fft
f, t, Sxx = signal.spectrogram(Audiodata, fs,window = signal.blackman(N),nfft=N)
plt.figure()
plt.pcolormesh(t, f,10*np.log10(Sxx)) # dB spectrogram
#plt.pcolormesh(t, f,Sxx) # Lineal spectrogram
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [seg]')
plt.title('Spectrogram with scipy.signal',size=16);

plt.show()

我测试了所有代码,它可以工作,你需要 numpy、matplotlib 和 scipy。

cheers

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过python从音频文件中提取音频频谱 的相关文章

随机推荐

  • jQuery $.post 和 json_encode 返回一个带有引号的字符串

    我正在使用 jQuery 的 post 调用 它返回一个带有引号的字符串 引号是由 json encode 行添加的 如何阻止添加引号 我在 post 通话中遗漏了什么吗 post getSale php function data con
  • 检查表是否存在[重复]

    这个问题在这里已经有答案了 我有一个桌面应用程序 其中嵌入了数据库 当我执行程序时 我需要检查特定的表是否存在 如果不存在则创建它 给定我的数据库的名为 conn 的 Connection 对象 我如何检查它 DatabaseMetaDat
  • JavaScript 执行连接到 mongoHQ shell 失败

    尝试直接访问 MongoHQ gt mongo mongodb heroku email protected 10046 myapp MongoDB shell version 2 4 3 connecting to mongodb her
  • 是否可以通过编程方式清除控制台历史记录?

    使用控制台应用程序时 在某个位置输入的所有内容的历史记录Console ReadLine 被储存了 当控制台提示输入某些内容时 按向上 向下光标将滚动浏览此历史记录 并且可以通过按 F7 查看整个历史记录 使用 C 是否有办法禁用此行为或清
  • 从 YouTube 网址获取持续时间

    我正在寻找一个函数 可以从 url 中提取视频的 YouTube 持续时间 我读了一些教程但不明白 我使用网址在我的网站上嵌入视频 并且我有一个提取缩略图的功能 我只想要类似的东西来获取持续时间 这是我如何获得拇指 function get
  • iOS:应用程序内购买管理多个自动续订订阅,具有升级和降级选项

    我们正在为 iPhone 开发一款 iOS 应用程序 该应用程序将具有免费功能 并且该应用程序将具有高级功能 其中有 4 个应用程序内购买自动续订订阅选项 如下所示 单月订阅 单年订阅 家庭包月 家庭每年订阅 我们将在应用程序内有一个商店屏
  • Flask 下载文件

    我正在尝试使用 Flask 创建一个网络应用程序 让用户上传文件并将其提供给另一个用户 现在 我可以将文件上传到上传文件夹正确 但我似乎找不到一种方法让用户下载回来 我将文件名存储到数据库中 我有一个为数据库对象提供服务的视图 我也可以删除
  • 在 Jenkins 从节点上运行的 Jenkinsfile 中执行 docker build 命令的最简单方法?

    我希望 Jenkinsfile 执行的操作的基本示例 node sh docker build t foo bar 看来我需要将 docker 安装到正在执行 Jenkinsfile 的 Jenkins 从属映像上 有一个简单的方法可以做到
  • 关闭来自服务器的 akka-http websocket 连接

    在我的场景中 客户端发送 再见 websocket 消息 我需要关闭之前在服务器端建立的连接 来自 akka httpdocs 通过从服务器逻辑取消传入连接 Flow 可以关闭连接 例如 通过将其下游连接到 Sink cancelled 将
  • contenteditable 无法在 IE 10 中工作

    我正在尝试创建客户端可编辑表 这是我的代码 它适用于 Chrome Firefox 但不适用于 IE 还有什么与 IE 脚本有关的吗
  • 如何使用java压缩文件夹本身

    假设我有以下目录结构 D reports january 假设一月份有两个 Excel 文件 分别为 A xls 和 B xls 有很多地方都写过如何使用压缩文件java util zip 但我想将 january 文件夹本身压缩到 rep
  • Base64 背景图像多行?

    是否可以放base64背景图像是多行而不是一长行 如果是这样 怎么办 我当前的主体 CSS 是 body background color FFFFFF background image url data image png base64
  • WPF:使用效果显示和隐藏 ItemsControl 中的项目

    我一直在使用这篇很棒的文章作为显示和隐藏具有过渡效果的元素的基础 它工作得非常巧妙 因为它可以让你绑定Visibility属性就像平常一样 然后定义当可见性发生变化时会发生什么 例如 设置其不透明度的动画或触发故事板 当您隐藏某个元素时 它
  • 如何向下滑动 div 然后 .fadeIn() 内容,反之亦然?

    Goal 当用户单击该按钮时 相关 div 将 滑下 stop 淡入内容 当用户再次单击该按钮时 div 将 fade out stop slide up 当前位置 这是一个示例 其中fadeIn and fadeOut发生在正确的时间 但
  • 如何检查我是否处于已检查的上下文中?

    我如何使用 C 代码知道我是否处于checked无论是否有上下文 都不会导致 捕获OverflowException 会带来性能损失吗 块之间的唯一区别是checked vs unchecked是编译器生成的用于基本值类型算术运算的IL指令
  • 使用 ISQL 执行脚本

    我正在创建一个简单的 isql 脚本 但它不起作用 我需要一些帮助来找出它出了什么问题 我需要连接到数据库并执行 SQL 文件 这是我的脚本 名为 script sql CONNECT localhost C Monde Servidor
  • 有 3 列的表。固定中心列宽度。如何在其他两列上共享宽度?

    我有一个 100 宽度的 3 列表格 中心列的宽度必须为 600 像素 如何在用完剩余空间的同时让另外两个宽度相等 table style width 100 tr td left td td style width 600px cente
  • 将复合语句放入 for 循环的条件中

    我有一个人为的例子来演示对特定功能的请求 我想知道是否有人有一个聪明的技巧来做到这一点 以下是一个经常遇到的问题 打印一系列数字 在它们之间打印一个空格 并在末尾打印一个回车符 但没有空格 显而易见的解决方案是使最后一个 或第一个 语句成为
  • 使用 OutVariable 创建 ArrayList

    我确信发生这种情况是有正当理由的 但我不知道它是什么 我有以下代码 Deleted Items 0 ParentNode RemoveChild Items 0 Write Output Deleted 如果我使用调用此代码 Do Some
  • 通过python从音频文件中提取音频频谱

    抱歉 如果我提交重复的内容 但我想知道 python 中是否有任何库可以使您能够从音频文件中提取声谱 我希望能够获取音频文件并编写一个算法 该算法将返回一组数据 TimeStampInFile 频率 幅度 我听说这通常称为节拍检测 但据我所