簡體   English   中英

使用AudioBufferSource時Javascript Web音頻API AnalyserNode不起作用

[英]Javascript Web Audio API AnalyserNode Not Working when using AudioBufferSource

我正在嘗試構建我正在研究的VAD算法的“離線”基准版本。 在在線版本中,我使用createMediaStreamSource輸入到分析器節點,它工作得很好。 在脫機版本中,我想加載和拆分錄制的音頻文件,因此我正在使用xhr將文件加載為ArrayBuffer,然后拆分它(這樣它將模擬音頻流),並將其用作源createBufferSource。

這是分割audioBuffer的代碼:

let audio_dur = audioBuffer.duration;

  let segments_num = Math.ceil(audio_dur / segment_dur);
  let segment_length = Math.ceil(audioBuffer.length / segments_num);
  segmentsArr = new Array(segments_num);

  let AudioData = new Float32Array(audioBuffer.length);
  AudioData = audioBuffer.getChannelData(0);


  for (let i = 0; i <= segments_num-1; i++){
    segmentsArr[i] = AudioData.slice(i*segment_length,(i+1)*segment_length-1);
  }

然后,將其連接到分析器的部分:

const analyser = audioCtx.createAnalyser();
analyser.minDecibels = min_decibels;
analyser.fftSize = fft_size;

const T_data = new Float32Array(analyser.fftSize);
const F_data = new Uint8Array(analyser.frequencyBinCount);

let segments_num = segmentsArr.length;
let segment_length = segmentsArr[1].length;

var cur_Buffer = audioCtx.createBuffer(1, segment_length, audioCtx.sampleRate);

for (let segment_ind = 0; segment_ind <= segments_num-1; segment_ind++) {
  let cur_segment = segmentsArr[segment_ind];
  cur_Buffer.copyToChannel(cur_segment,0,0);

  let cur_source = audioCtx.createBufferSource();
  cur_source.loop = false;
  cur_source.buffer = newBuffer;

  cur_source.connect(analyser);

  analyser.getByteFrequencyData(F_data); // get current data
  analyser.getFloatTimeDomainData(T_data); // get current data
  ...

然后代碼繼續。

問題是:從分析儀返回的時間數據和頻率數據始終為空。

詢問前:1. minDecibels為-100Db(最低)。 2. segmentArr不為空,我可以使用創建AudioBufferSource並將其連接到音頻目標的完全相同的方法逐段播放。

回答:感謝@cwilso,問題是我沒有為每個新源都使用cur_source.start ,非常感謝。

從這段代碼中很難確切看到它是如何連接的以及代碼是如何開始的。

1)您正在緩沖區源節點上調用start(),對嗎? 2)您正在調用getByteFrequencyData()等啟動之后發生嗎? 3)您是否確實聽到了通過目的地播放的緩沖塊?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM