Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每隔几毫秒获取mp3文件的音高_Javascript_Python_Mp3 - Fatal编程技术网

Javascript 每隔几毫秒获取mp3文件的音高

Javascript 每隔几毫秒获取mp3文件的音高,javascript,python,mp3,Javascript,Python,Mp3,因此,我尝试使用javascript或python(或其他任何可以做到这一点的工具)每隔几毫秒获取一个mp3文件的音高和音量。非常感谢您的帮助。基音与信号振幅的变化速度有关,因此需要在一段时间内计算,而不是在瞬间 我建议您将mp3解码为波形(有Python库可以将其放入numpy数组中),然后一次进行一部分,并执行以下操作: 在块上运行FFT(搜索numpy FFT)以查找频率内容。通常,特定音高的声音会有一个基频,也会有谐波含量,即基频整数倍的频率。此外,您可能有多个声音,因此将有多个基频,每

因此,我尝试使用javascript或python(或其他任何可以做到这一点的工具)每隔几毫秒获取一个mp3文件的音高和音量。非常感谢您的帮助。

基音与信号振幅的变化速度有关,因此需要在一段时间内计算,而不是在瞬间

我建议您将mp3解码为波形(有Python库可以将其放入numpy数组中),然后一次进行一部分,并执行以下操作:

  • 在块上运行FFT(搜索numpy FFT)以查找频率内容。通常,特定音高的声音会有一个基频,也会有谐波含量,即基频整数倍的频率。此外,您可能有多个声音,因此将有多个基频,每个基频都有自己的谐波。FFT将计算出有哪些频率,假设他阻塞,然后永远重复。不幸的是,信号的开始和结束振幅在块的开始和结束处不匹配,所以这个假设就像振幅突然跳变一样。这将导致FFT结果中出现伪影,因此,如果应用程序中存在问题,则需要在运行FFT之前查看窗口。这会在起点和终点衰减块,因此它们在零处对齐
  • 确定与要记录的基音相关的FFT峰值。例如,这可能是最高峰值。该峰值的频率是该块的基音
  • 取块的均方根(RMS)(来自原始阵列,而不是FFT)并将其用作体积的度量
  • 然后,您可以移动到下一个块并重复,因此,如果块大小为440个采样(44kHz采样率下为10ms),则将第一个块从0移到439,然后将下一个块从440移到879,以此类推


    如果您愿意,您也可以使用滑块,例如,每次将440个样本块向前移动44个样本,因此第一个样本块为0到439,下一个样本块为44到483。

    基音与信号振幅变化的速度有关,因此需要在一个时间块上计算,而不是在瞬间

    我建议您将mp3解码为波形(有Python库可以将其放入numpy数组中),然后一次进行一部分,并执行以下操作:

  • 在块上运行FFT(搜索numpy FFT)以查找频率内容。通常,特定音高的声音会有一个基频,也会有谐波含量,即基频整数倍的频率。此外,您可能有多个声音,因此将有多个基频,每个基频都有自己的谐波。FFT将计算出有哪些频率,假设他阻塞,然后永远重复。不幸的是,信号的开始和结束振幅在块的开始和结束处不匹配,所以这个假设就像振幅突然跳变一样。这将导致FFT结果中出现伪影,因此,如果应用程序中存在问题,则需要在运行FFT之前查看窗口。这会在起点和终点衰减块,因此它们在零处对齐
  • 确定与要记录的基音相关的FFT峰值。例如,这可能是最高峰值。该峰值的频率是该块的基音
  • 取块的均方根(RMS)(来自原始阵列,而不是FFT)并将其用作体积的度量
  • 然后,您可以移动到下一个块并重复,因此,如果块大小为440个采样(44kHz采样率下为10ms),则将第一个块从0移到439,然后将下一个块从440移到879,以此类推


    如果需要,也可以使用滑块,例如,每次将440个样本块向前推进44个样本,因此第一个块为0到439,下一个块为44到483。

    文件通常没有卷。你能更详细地描述一下你的问题吗。也许你正在浏览器中运行mp3文件?或者在服务器上,如果也可以使用python…我正在尝试将mp3文件转换为我自己的自定义文件类型,可以每隔几毫秒具有音调和振幅,以便有一种方法将音频导入到当前没有方法实现的平台中。我可以尝试使用midi,但对于复杂的音频和人类语言来说,这太不准确了。目前,这个问题没有试图亲自解决这个问题。因此,不打算提供开箱即用的编程解决方案。在询问我们之前,请尝试自己解决问题。文件通常没有卷。你能更详细地描述一下你的问题吗。也许你正在浏览器中运行mp3文件?或者在服务器上,如果也可以使用python…我正在尝试将mp3文件转换为我自己的自定义文件类型,可以每隔几毫秒具有音调和振幅,以便有一种方法将音频导入到当前没有方法实现的平台中。我可以尝试使用midi,但对于复杂的音频和人类语言来说,这太不准确了。目前,这个问题没有试图亲自解决这个问题。因此,不打算提供开箱即用的编程解决方案。在询问我们之前,请尝试自己解决问题。