TensorflowJS Speech从JavaScript中的wav文件获取频谱图

问题描述

TensorflowJS readme中的离线识别部分提到,我们需要“通过某种方式(例如,通过加载.wav文件中的数据或以编程方式合成频谱图)获取音频片段的频谱图”。

任何人都可以解释如何从javascript中的wav文件获取频谱图吗?我找不到办法。

为进一步说明,我将展示我的工作以及问题所在:

let buffer = fs.readFilSync('zero1.wav');
let input = wav.decode(buffer);

# To make size of input equal to 9976 as per the restrictions of TensorflowJS i.e. 
# (1,43,232): 1*43*232 = 9976 in size
input = input['channelData'][0].slice(1000,10976)
const x = tf.tensor(inp,[1].concat(recognizer.modelInputShape().slice(1)));
const output = await recognizer.recognize(x);

使用上述方法时(请注意,zero1.wav是从训练数据中获取文件,因此应提供高精度输出),我得到以下模糊输出-

enter image description here

这仅表示 recognizer.recognize()的输入不正确。

那么,我应该如何将wav文件转换为声谱图并将其输入到ognitor.recognize()?

如果需要任何说明,请告诉我。感谢您的帮助

解决方法

wav.decode(buffer)的输出是一个对象,其外观如下:enter image description here

此外,我需要对input ['channelData']进行切片,因为否则,会出现以下错误:enter image description here

,

https://js.tensorflow.org/api/latest/#signal.stft 您可以使用此 tensorflow 方法来计算频谱图。您需要做一点数学计算来计算参数,参考 Speech_command.recognizer 的参数。