javascript - 错误: Mismatch in sampling rate: Expected: 16000; Actual: 48000. Tensorflow js抛出错误

标签 javascript python tensorflow tensorflow.js spectrogram

我想以 16000Hz 录制音频并获取它的频谱图。我的模型接受 [null.1998.101] 的输入。我无法用 javascript 实现它

    const mic = await tf.data.microphone({
    fftSize: 256,
    columnTruncateLength: 101,
    numFramesPerSpectrogram: 1998 ,
    sampleRateHz:16000,
    includeSpectrogram: true,
    includeWaveform: true
});

const audioData = await mic.capture();
console.log(audioData)
const spectrogramTensor = audioData.spectrogram;
console.log(spectrogramTensor)
spectrogramTensor.print();
const waveformTensor = audioData.waveform;
waveformTensor.print();
mic.stop(); 

我的模型是触发词检测。 在 Python 中,我使用了以下代码。

def graph_spectrogram(wav_file):
rate, data = get_wav_info(wav_file)
print(data)
print(len(data))
nfft = 200 # Length of each window segment
fs = 8000 # Sampling frequencies
noverlap = 120 # Overlap between windows
nchannels = data.ndim
if nchannels == 1:
    pxx, freqs, bins, im = plt.specgram(data, nfft, fs, noverlap = noverlap)
elif nchannels == 2:
    pxx, freqs, bins, im = plt.specgram(data[:,0], nfft, fs, noverlap = noverlap)
return pxx

最佳答案

浏览器有一个默认且固定的录音采样率值。以下将输出浏览器的频率速率。

new window.AudioContext().sampleRate

抛出错误是因为16000与浏览器采样率不匹配。目前无法从浏览器更改录音的采样率。 可以做的是

  • 使用频率训练模型
  • 将张量 reshape (或切片)为模型 inputShape
  • 录制音频并对其重新采样(使用此 answer ),并从音频录制中创建一个张量(使用此 answer
  • 虽然我没有尝试过,但似乎采样率的值来自操作系统的设置。更改它将使录音具有正确的采样率。在Linux上,可以在/etc/pulse/daemon.conf文件中设置记录频率

关于javascript - 错误: Mismatch in sampling rate: Expected: 16000; Actual: 48000. Tensorflow js抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61475803/

相关文章:

javascript - 动态显示数据库中的单个产品的最佳方法是什么?

javascript - 函数作用域和变量进/出所述函数

tensorflow - 如何在 python 中解析 toco 生成的文件 (.tflite)?

tensorflow - 如何使用 tf.matmul 执行高效的稀疏矩阵乘法?

c# - 在 C# 中使用 javascript 不起作用

python - scipy.optimize on pandas dataframe

python - 解码 Unicode 字符串;这是什么意思,我该如何避免呢?

python - 无法点击带有 Selenium 的按钮

tensorflow - tf.Session() 和 tf.InteractiveSession() 有什么区别?

javascript - 如何使用模态框单独加载文本?