声音的哪些属性可以在代码中表示/计算?
Posted
技术标签:
【中文标题】声音的哪些属性可以在代码中表示/计算?【英文标题】:What properties of sound can be represented / computed in code? 【发布时间】:2010-07-29 18:45:28 【问题描述】:这首歌可能适合对音乐理论有一定了解的人。人类可以识别声音的某些特征,例如音高、频率等。基于这些属性,我们可以将一种声音与另一种声音进行比较,并得到一个衡量标准的可能性。例如,很容易区分钢琴的声音和吉他的声音,即使两者弹奏的是同一个音符。
如果我们以编程方式执行相同的过程,从两个音频样本开始,我们可以计算并使用声音的哪些属性进行比较?从技术角度来说,有没有流行的 API 来做这种事情?
P.S.:如果我在我的问题中犯了任何基本错误或者我听起来像一个完整的音乐菜鸟,请原谅我。这是因为我是一个完整的音乐菜鸟。
【问题讨论】:
对您的问题没有很好的答案,但“音色”是声音的“声音”(钢琴与吉他演奏相同音符)的术语,因此这可能是进一步调查的途径。此外,音高和频率是一回事(频率是一个更专业的术语,音高是一个更音乐的术语),因为它的价值。 【参考方案1】:有两组属性。
“频域”——特定样本中泛音的幅度。这是每个泛音的幅度。
“时域”——随时间变化的幅度样本序列。
您可以使用Fourier Transforms 在两者之间进行转换。
时域是声音的“本质”——一系列幅度。频域是我们“听到”的内容——一组确定乐器、和声和不和谐音的泛音和音高。
两者的混合——频率随时间变化——是对旋律的感知。
【讨论】:
【参考方案2】:The Echo Nest 具有易于使用的分析 api,可以找出您可能想了解的有关音乐的所有信息。
您可能会发现 the analyze documentation(警告,pdf 链接)很有帮助。
【讨论】:
【参考方案3】:声音的任何和所有属性都可以表示/计算——您只需要知道如何。其中一个更有趣的是光谱分析/光谱图(参见http://en.wikipedia.org/wiki/Spectrogram)。
【讨论】:
【参考方案4】:您想要的任何属性都可以在代码中进行测量或表示。你想要什么?
您想测试两个样品是否来自同一仪器吗?不同乐器的两个样本具有相同的音高?两个样本具有相同的幅度?一样的腐烂?那两个声音有相似的频谱质心?那两个样本是一样的吗?它们是相同的,但可能有一个已经回响或通过了过滤器?
【讨论】:
【参考方案5】:忽略所有您可能不熟悉的任意人为创造的术语,并考虑对现实进行更简单的描述。
声音,就像我们感知的任何其他事物一样,只是一种时空模式,在这种情况下,是“运动”……原子(空气粒子、钢琴弦等)的“运动”。物体的运动会导致空气的运动,从而在我们的耳朵中产生压力波,我们将其解释为声音。
在计算上,这很容易建模;然而,因为这种运动可以是任何模式——从剧烈的随机震动到高度规则的振荡——通常没有恒定的可识别“频率”,因为它通常不是一个完全规则的振荡。移动物体的形状、在其中回荡的波浪等等都会在空气中产生非常复杂的图案……就像你打一池水会看到的波浪一样。
问题归结为识别常见的运动模式和特征(以非常高的速度)。因为模式是任意的,所以您确实需要一个系统来学习常见的运动模式(即在计算机中以数字表示的运动)并将其分类到某种不同的概念桶中。
【讨论】:
以上是关于声音的哪些属性可以在代码中表示/计算?的主要内容,如果未能解决你的问题,请参考以下文章