作为一个有趣的家庭研究项目的一部分,我试图找到一种方法来减少/转换一首像音频信号的嗡嗡声(我们人们在听一首歌时感知的基本旋律).在我进一步描述我对此问题的尝试之前,我想提一下,虽然我在分析图像和视频方面有很多经验,但我对音频分析还是全新的.
谷歌搜索后,我发现了一堆旋律提取算法.给定一首歌的复音音频信号(例如.wav文件),它们输出音高轨道---在每个时间点他们估计主音调(来自歌手的声音或某些旋律生成乐器)并追踪主导音乐随着时间推移.
我读了几篇论文,他们似乎计算了这首歌的短时傅立叶变换,然后对频谱图进行了一些分析,以获得并跟踪主导音调.旋律提取只是我正在尝试开发的系统中的一个组件,所以我不介意使用任何可用的算法,只要它在我的音频文件上做得不错并且代码可用.由于我是新手,我很高兴听到有关哪些算法运行良好以及我在哪里可以找到其代码的任何建议.
我发现了两种算法:
我选择Melodia作为不同音乐类型的结果看起来相当令人印象深刻.请检查以查看其结果.你听到的每首音乐的嗡嗡声基本上都是我感兴趣的.
"对于任何一首任意歌曲来说,这都是嗡嗡声的产生,我想在这个问题中帮助你".
该算法(可用作鞋面插件)输出音高轨道--- [time_stamp,pitch/frequency] --- Nx2矩阵,其中第一列是时间戳(以秒为单位),第二列是主音调检测到相应的时间戳.下面显示的是从用紫色覆盖的算法获得的音高轨迹的可视化,其中歌曲的时域信号(上图)和频谱图/短时间 - 傅立叶.音调/频率的负值表示非浊音/非旋律片段的算法主导音调估计.因此,所有音高估计> = 0对应于旋律,其余对我来说并不重要.

现在我想将这个音轨转换回类似音频信号的嗡嗡声 - 正如作者在他们的网站上所说的那样.
下面是我写的MATLAB函数:
function [melSignal] = melody2audio(melody, varargin)
% melSignal = melody2audio(melody, Fs, synthtype)
% melSignal = melody2audio(melody, Fs)
% melSignal = melody2audio(melody)
%
% Convert melody/pitch-track to a time-domain signal
%
% Inputs:
%
% melody - [time-stamp, dominant-frequency]
% an Nx2 matrix with time-stamp in the
% first column and the detected dominant
% frequency at corresponding time-stamp
% …Run Code Online (Sandbox Code Playgroud) python matlab signal-processing pitch-tracking audio-analysis
我需要找到一个样本的频率,存储(在vb中)作为一个字节数组.样本是一个正弦波,已知频率,所以我可以检查),但数字有点奇怪,我的数学foo很弱.全系列值0-255.99%的数字在235到245的范围内,但有一些异常值降至0和1,其余1%则高达255.如何对此进行归一化以去除异常值(计算235-245间隔,因为它可能随着不同的样本而变化),以及如何计算过零点以获得频率?如果这个描述是垃圾,请道歉!
对于不熟悉Verizon的SongID程序的人来说,它是一个可通过Verizon的VCast网络下载的免费应用程序.它会在歌曲中的任何一点听一首歌10秒钟,然后将这些数据发送给一些全知的算法兽,将其咀嚼起来并送回所有ID3标签(艺术家,专辑,歌曲等......)
前两部分和最后一部分是直截了当的,但在录制声音发送后的处理过程中会发生什么?
我认为它必须采取声音文件(什么格式?),解析它(如何?用什么?)一些关键标识符(这些是什么?波函数的常规属性?相位/移位/幅度/等),并检查它针对数据库.
我在网上找到的关于它是如何工作的一切都像我上面输入的一样通用.
该服务基于先进的音频识别算法,结合了先进的音频指纹识别技术和大型歌曲数据库.上传音频文件时,音频引擎会对其进行分析.在分析期间,通过将音频"指纹"与音乐数据库进行比较来提取和识别其音频"指纹".在该识别过程完成时,在屏幕上显示关于具有匹配概率的歌曲的信息.
我在这里看过各种FFT问题,但我对部分实现感到困惑.我没有实时执行FFT,而是想离线执行.让我们说我有原始数据float[] audio.采样率为44100,因此audio[0] to audio[44099]将包含1秒的音频.如果我的FFT函数处理窗口(例如汉宁),我是否只需将整个audio缓冲区一次性放入函数中?或者,我是否必须将音频切换为4096(我的窗口大小)的块,然后将其输入FFT,然后在顶部执行窗口功能?
我是音频分析新手,但需要执行一项(看似)简单的任务。我有一个包含 16 位录音(单通道)且采样率为 44100 的字节数组。如何执行快速分析以获取任何给定时刻的音量?我需要计算一个阈值,因此如果它高于某个幅度(音量),则函数返回 true,否则返回 false。我以为我可以迭代字节数组并检查它的值,其中 255 是最响亮的,但这似乎不起作用,因为即使我不记录任何内容,背景噪音也会进入,并且一些数组充满了255. 任何建议都会很好。谢谢
我正在使用beat_trackLibrosa 的本机函数:
from librosa.beat import beat_track
tempo, beat_frames = beat_track(audio, sampling_rate)
Run Code Online (Sandbox Code Playgroud)
歌曲的原始节奏为 ,146 BPM而函数近似为73.5 BPM。虽然我明白73.5*2 ~ 148 BPM,但我们如何才能实现以下目标:
我正在使用 Python \xe2\x80\x94\xc2\xa0 计算一段音频的响度,可能是通过提取一段音频的峰值音量,或者可能使用更准确的测量(RMS?)。
\n\n做到这一点的最佳方法是什么?我看过pyaudio,但这似乎没有达到我想要的效果。看起来不错的是ruby-audio,因为这似乎已经sound.abs.max内置在其中。
输入音频将从持续时间约为 30 秒的各种本地 MP3 文件中获取。
\n我希望能够生成某种存储音频文件音量级别的文件.我对此非常灵活,但一个例子是每隔一秒显示音量的csv.我不需要这个数字那么精确.
你对如何处理这个问题有什么建议吗?我会很感激.
几天前,我遇到了这个关于FFT使用的答案
在答案中有一段这样的代码:
w = np.fft.fft(data)
freqs = np.fft.fftfreq(len(w))
Run Code Online (Sandbox Code Playgroud)
我在 numpy 文档(这里)中阅读了函数fftfreq,我发现它返回一个包含以下内容的数组:
f = [0, 1, ..., n/2-1, -n/2, ..., -1] / (d*n) if n is even
f = [0, 1, ..., (n-1)/2, -(n-1)/2, ..., -1] / (d*n) if n is odd
Run Code Online (Sandbox Code Playgroud)
在我的情况下,d var 等于 1 和n是偶数。
所以我的问题是:fftfreq 的真正目的是什么?
我想知道它是否是一种三角窗函数。
我需要在mp3文件中找到一个沉默.就那么简单.
例如:
我可以在Batch,VBS,Ruby或Python中尝试它(因为我需要练习,但我只知道Batch).我不知道音乐库和那些东西......
无论我是否需要第三方软件来完成CommandLine APPS这样的工作......
注意:沉默也可以在mp3文件的中间.例如在名为"Hidden tracks"的文件中:1首歌+ 1分钟的大沉默+另一首歌(全部只有1个mp3文件)所以我需要一些东西来搜索X selince进入整个文件,不仅接近结尾该文件...
注2:我需要在Windows中执行此操作.
有什么想法吗?