问题描述
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是从训练数据中获取的文件,因此应提供高精度输出),我得到以下模糊输出-
这仅表示 recognizer.recognize()的输入不正确。
那么,我应该如何将wav文件转换为声谱图并将其输入到ognitor.recognize()?
如果需要任何说明,请告诉我。感谢您的帮助
解决方法
wav.decode(buffer)的输出是一个对象,其外观如下:
此外,我需要对input ['channelData']进行切片,因为否则,会出现以下错误:
https://js.tensorflow.org/api/latest/#signal.stft 您可以使用此 tensorflow 方法来计算频谱图。您需要做一点数学计算来计算参数,参考 Speech_command.recognizer 的参数。