gpt4 book ai didi

python - 查找音频文件中的音效

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:20 24 4
gpt4 key购买 nike

我加载了 3 小时的 MP3 文件,每大约 15 分钟就会播放一次独特的 1 秒音效,这标志着新章节的开始。

是否可以识别每次播放此音效的时间,以便我可以记下时间偏移?

每次的声音效果都相似,但由于它是以有损文件格式编码的,因此会有少量变化。

时间偏移将存储在 ID3 Chapter Frame MetaData 中.

<小时/>

Example Source ,其中音效播放两次。

ffmpeg -ss 0.9 -i source.mp3 -t 0.95 Sample1.mp3 -acodec copy -y

ffmpeg -ss 4.5 -i source.mp3 -t 0.95 Sample2.mp3 -acodec copy -y

<小时/>

我对音频处理很陌生,但我最初的想法是提取 1 秒音效的样本,然后在 python 中使用 librosa 提取 floating point time series对于这两个文件,对 float 进行四舍五入,并尝试获得匹配。

import numpy
import librosa

print("Load files")

source_series, source_rate = librosa.load('source.mp3') # 3 hour file
sample_series, sample_rate = librosa.load('sample.mp3') # 1 second file

print("Round series")

source_series = numpy.around(source_series, decimals=5);
sample_series = numpy.around(sample_series, decimals=5);

print("Process series")

source_start = 0
sample_matching = 0
sample_length = len(sample_series)

for source_id, source_sample in enumerate(source_series):

if source_sample == sample_series[sample_matching]:

sample_matching += 1

if sample_matching >= sample_length:

print(float(source_start) / source_rate)

sample_matching = 0

elif sample_matching == 1:

source_start = source_id;

else:

sample_matching = 0

这不适用于上面的 MP3 文件,但适用于 MP4 版本 - 它能够找到我提取的样本,但只是那一个样本(并非全部 12 个样本)。

我还应该注意到,这个脚本只需要 1 分钟多一点的时间来处理 3 小时的文件(其中包括 237,426,624 个样本)。所以我可以想象,对每个循环进行某种平均会导致花费相当长的时间。

最佳答案

尝试在时域中直接匹配波形样本并不是一个好主意。 mp3 信号将保留感知属性,但频率分量的相位很可能会发生偏移,因此样本值将不匹配。

您可以尝试匹配效果和样本的音量包络。这不太可能受到 mp3 进程的影响。

首先,标准化您的样本,使嵌入效果与引用效果处于同一水平。通过使用时间范围内峰值的平均值,从效果和样本构建新的波形,这些时间范围刚好足以捕获相关特征。最好还是使用重叠框架。然后在时域中使用互相关。

如果这不起作用,那么您可以使用 FFT 分析每个帧,这将为您提供每个帧的特征向量。然后,您尝试查找效果中的特征序列与示例的匹配。类似于 https://stackoverflow.com/users/1967571/jonnor建议。 MFCC 用于语音识别,但由于您没有检测语音,FFT 可能还可以。

我假设效果本身播放(没有背景噪音),并且它以电子方式添加到录音中(而不是通过麦克风录制)。如果情况并非如此,问题就会变得更加困难。

关于python - 查找音频文件中的音效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60045949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com