使用linux或python查找mp3声音样本的时间戳

小豆蔻

我慢慢地致力于这哪里会是非常有用的,如果该计算机可以找到一个项目,其中在发生某种样本的MP3文件。我将这个问题限制为一个相当准确的音频片段,而不仅仅是同一乐队在不同唱片中的歌曲中的合唱,这将成为某种机器学习问题。我正在考虑,如果它没有添加噪音并且来自同一文件,那么应该可以在不进行机器学习的情况下找到发生它的时间,就像grep可以在文本文件中找到出现单词的行一样。

如果您没有mp3播放器,可以解决公共领域的网络上可用音乐的问题,因此没有人抱怨:

curl https://web.archive.org/web/20041019004300/http://www.navyband.navy.mil/anthems/ANTHEMS/United%20Kingdom.mp3 --output godsavethequeen.mp3

一分钟长:

exiftool godsavethequeen.mp3 | grep Duration
Duration                        : 0:01:03 (approx)

现在切出30到33秒之间的时间(该时间段会拉啦啦啦..):

ffmpeg -ss 30 -to 33 -i godsavethequeen.mp3 gstq_sample.mp3

文件夹中的两个文件:

$ ls -la
-rw-r--r-- 1 cardamom cardamom   48736 Jun 23 00:08 gstq_sample.mp3
-rw-r--r-- 1 cardamom cardamom 1007055 Jun 22 23:57 godsavethequeen.mp3

由于某种原因,exiftool似乎高估了样本的持续时间:

$ exiftool gstq_sample.mp3 | grep Duration
Duration                        : 6.09 s (approx)

..但我想它只是像它告诉你的那样近似。

这是什么之后:

$ findsoundsample gstq_sample.mp3 godsavethequeen.mp3
start 30 end 33

如果它是bash脚本或python解决方案,即使使用某种python库,也很高兴。有时,如果您使用了错误的工具,则该解决方案可能会起作用,但看上去却很糟糕,因此无论哪种工具都更合适。这是一分钟的mp3,完全没有考虑过性能,而是想要一些可伸缩性,例如在半小时内找到十秒钟。

在尝试自己解决此问题时,一直在寻找以下资源:

如何使用Python和Gracenote识别音乐样本?

https://github.com/craigfrancis/audio-detect

https://madmom.readthedocs.io/en/latest/introduction.html

在Python中读取* .wav文件

https://github.com/aubio/aubio

aubionset 是一个很好的候选人

https://willdrevo.com/fingerprinting-and-audio-recognition-with-python/

侦探眼

正如Carson答案所建议的,一旦将文件转换为.wav格式,音频处理就会变得容易得多。

您可以在阅读python中的mp3时使用Wernight答案

ffmpeg -i godsavethequeen.mp3 -vn -acodec pcm_s16le -ac 1 -ar 44100 -f wav godsavethequeen.wav
ffmpeg -i gstq_sample.mp3 -vn -acodec pcm_s16le -ac 1 -ar 44100 -f wav gstq_sample.wav

然后,找到样本的位置主要是获得源(在这种情况下)与样本之间的互相关函数的峰值godsavethequeen.wav以寻找(gstq_sample.wav)的问题。从本质上讲,这将找到样本看起来最像源中对应部分的偏移。可以使用python使用来完成scipy.signal.correlate

扔一个小的python脚本来做就是这样:

import numpy as np
import sys
from scipy.io import wavfile
from scipy import signal

snippet = sys.argv[1]
source  = sys.argv[2]

# read the sample to look for
rate_snippet, snippet = wavfile.read(snippet);
snippet = np.array(snippet, dtype='float')

# read the source
rate, source = wavfile.read(source);
source = np.array(source, dtype='float')

# resample such that both signals are at the same sampling rate (if required)
if rate != rate_snippet:
  num = int(np.round(rate*len(snippet)/rate_snippet))
  snippet = signal.resample(snippet, num)

# compute the cross-correlation
z = signal.correlate(source, snippet);

peak = np.argmax(np.abs(z))
start = (peak-len(snippet)+1)/rate
end   = peak/rate

print("start {} end {}".format(start, end))

请注意,为方便起见,我进行了检查以确保两个.wav文件具有相同的采样率(并根据需要重新采样),但是当您使用.mp3格式将它们转换时,也可以选择确保它们始终相同。对...的-ar 44100论点ffmpeg

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ac#控制台应用程序中播放mp3声音

来自分类Dev

在flutter_local_notifications中添加mp3声音

来自分类Dev

播放星号中的mp3声音文件

来自分类Dev

正确播放mp3声音的正确方法作为通知

来自分类Dev

Android:如何播放Mp3声音作为通知?

来自分类Dev

WPF应用程序到mp3声音文件的相对路径

来自分类Dev

如何在android中无间隙地循环播放mp3声音文件

来自分类Dev

如何在android中无间隙地循环播放mp3声音文件

来自分类Dev

每1分钟自动播放一次mp3声音

来自分类Dev

程序,时间表声音(mp3,wav)

来自分类Dev

将声音插入mp3音轨

来自分类Dev

使用Python的MP3的封面大小

来自分类Dev

如何使用 Python 计算从网站下载 mp3 需要多长时间?

来自分类Dev

自定义滑块AS3声音搜索

来自分类Dev

Python:如何将mp3块解码为PCM样本?

来自分类Dev

如何使用NAudio从mp3中获取音频样本数据

来自分类Dev

如何使用NAudio从mp3中获取音频样本数据

来自分类Dev

使用ffmpeg将flac转换为“立体声mp3”而不是“联合立体声”

来自分类Dev

使用Lame将mp3从单声道转换为立体声

来自分类Dev

如何将文本产生的声音保存为mp3或python中的wave

来自分类Dev

使用Swift在iOS中播放mp3时无声音

来自分类Dev

查找流(mp3)信息(持续时间,比特率)

来自分类Dev

如何提高mp3语音文件的声音质量?

来自分类Dev

如何规范mp3文件中的声音

来自分类Dev

用vbscript播放声音文件(MP3)

来自分类Dev

如何提高mp3语音文件的声音质量?

来自分类Dev

Kalarm播放ogg声音警报,但不播放mp3

来自分类Dev

获取 MP3 的时间流逝。

来自分类Dev

如何使用python命名mp3的元数据?

Related 相关文章

热门标签

归档