Ошибка: несоответствие частоты дискретизации: ожидаемое: 16000; Фактическое значение: 48000. Tensorflow js ошибка метания - PullRequest
1 голос
/ 28 апреля 2020

Я хочу записать звук на частоте 16000 Гц и получить его спектрограмму. Моя модель принимает данные [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

1 Ответ

1 голос
/ 01 мая 2020

В браузере по умолчанию установлено фиксированное значение частоты дискретизации аудиозаписи. Следующее будет выводить скорость frequency браузера.

new window.AudioContext().sampleRate

Ошибка выдается, потому что 16000 не соответствует частоте выборки браузера. В настоящее время невозможно изменить частоту дискретизации аудиозаписи из браузера. Что можно сделать, это

  • , чтобы обучить модель, используя частоту
  • изменить (или нарезать) тензор к модели inputShape
  • записать аудио и выполнить повторную выборку (используя этот ответ ) и создайте тензор из аудиозаписи (используя этот ответ
  • Хотя я не пробовал, кажется, что значение Частота дискретизации определяется настройками операционной системы. При ее изменении запись будет иметь правильную частоту дискретизации. В linux частота записи может быть установлена ​​в файле /etc/pulse/daemon.conf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...