首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何判断两段音频的相似性?

如何判断两段音频的相似性?
EN

Stack Overflow用户
提问于 2022-09-13 09:09:29
回答 1查看 31关注 0票数 0

我想实现一个相似的歌唱评分功能来确定两个音频的相似性,但我不知道如何简单的实现,看了很多github项目,更多的提到是simhash,但我觉得类似的音频可能不是很好,所以在这里征求意见。

EN

回答 1

Stack Overflow用户

发布于 2022-09-14 10:58:37

一种方法是使用自相关来查找音频段中存在的频率。

这方面有许多实现。例如:鱼腥草、枕叶、矮胖等。

这是一个非常松散和草率的实现,可以让您了解没有libs的算法:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import math

'''
create a test signal
'''

sr = 44100 #hz
freq = 200 #hz
duration = 0.1 #sec
signal = [math.sin(x * (math.pi * 2 * freq) * (1 / sr)) for x in range(0, int(sr * duration))]

'''
compute the auto correlation at a given frequency
'''
def auto_correlation(signal, freq, sr):
  sample_delay = int (sr / freq) 
  score = 0

  for i in range(0, len(signal) - sample_delay):
    score += signal[i] * signal[i + sample_delay]

  return score / len(signal)

'''
iterate over frequency spectrum and test the autocorrelation
'''
start_freq = 150
end_freq = 1000

scores = []
for freq in range(start_freq, end_freq):
  scores.append(auto_correlation(signal, freq, sr))
  
max_index = scores.index(max(scores))
print("estimated frequency : {} hz".format(max_index + start_freq))

plt.ylabel("correlation")
plt.xlabel("frequency Hz")
plt.plot([x + start_freq for x in range(len(scores))], scores)

然后,您可以迭代通过音频文件,测试段的主导频率和比较分数。

另一种可能是通过计算音频文件的FFT来实现这一点,并对它们进行比较。如果您在python领域,librosa是一个很好的库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73700345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档