错误:采样率不匹配:预期:16000;实际:48 000。张量流误差

2024-04-18 23:15:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想录制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

Tags: 模型truedataawaitfsprintwavconst
1条回答
网友
1楼 · 发布于 2024-04-18 23:15:39

浏览器具有音频录制采样率的默认值和固定值。下面将输出浏览器的frequency速率

new window.AudioContext().sampleRate

引发错误的原因是16000与浏览器采样率不匹配。当前无法从浏览器更改音频录制的采样率。 可以做的是

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

相关问题 更多 >