{"ast":null,"code":"import { computeLPC, getPeaks, getFrequenciesFromLPC } from './lib/lpc.js';\nimport { expandArraySmoothly,\n// expandArraySmoothly(array, targetResolution int)\ngetMean,\n// getMean(array)\nupdateMagnitudes,\n// updateMagnitudes(newMMagArray, currentMagArray);\nnormalizeIfNecessary, createArrayWithSameValue } from './lib/spectroHelpers.js';\nconst SAMPLE_RATE = 44100;\nconst FRAME_SIZE = 512; // Number of audio samples used to generate LPC Coeffs.;\nconst MAX_LPC_FREQ = 4096; // hc needs a better understanding of this\nconst LPC_DISPLAY_RES = 64;\nconst EMPTY_WAVE_MAG = 0.3;\n\n// These fns are imported into WaveCanvas\n\n// ===================================================================\n// AUDIO SETUP FNS\n\n// initAudio Helper ------------------------------------\nconst convertToMono = (input, audioContextRef) => {\n  const splitter = audioContextRef.createChannelSplitter(2);\n  const merger = audioContextRef.createChannelMerger(2);\n  input.connect(splitter);\n  splitter.connect(merger, 0, 0);\n  splitter.connect(merger, 0, 1);\n  return merger;\n};\n\n// initAudio  ------------------------------------\nconst initAudio = (microphone, audioContextRef, analyser) => {\n  console.log('mic should be a MediaStreamAudioSourceNode');\n  console.log(microphone);\n  analyser.fftSize = FRAME_SIZE * 2;\n  const audioInput = convertToMono(microphone, audioContextRef);\n  const HIGH_PASS = 20;\n  const LOW_PASS = MAX_LPC_FREQ;\n  const highpass = audioContextRef.createBiquadFilter();\n  const lowpass = audioContextRef.createBiquadFilter();\n  highpass.type = \"highpass\";\n  highpass.frequency.value = HIGH_PASS;\n  lowpass.type = \"lowpass\";\n  lowpass.frequency.value = LOW_PASS;\n  audioInput.connect(highpass);\n  highpass.connect(lowpass);\n  lowpass.connect(analyser);\n  return analyser;\n};\n\n// ===================================================================\n// COEFF UPDATERS / Interval Loop \n\nconst updateCoeffsOffline = audioData => {\n  // UPDATES COEFFS DATA\n  let lpcCoeffs = computeLPC(audioData);\n  let lastReceivedCoeffs = lpcCoeffs.slice(0, lpcCoeffs.length - 1);\n  //   console.log(lastReceivedCoeffs);\n\n  return lastReceivedCoeffs;\n};\n\n// TODO: --------------------------------------------\nconst updateCoeffsWithVonage = function () {};\n\n// ===================================================================\n// MAGS & PEAKS FROM LPC \n// gets and shapes wave mag & peak data to be used in drawing sketch\n\nconst updateData = (drawData, lastReceivedCoeffs) => {\n  const DRAW_PEAK_THRESHOLD = 0.3;\n  const HIDE_WAVE_MAG_THRESHOLD = -1; // -1 means always animate wave, otherwise min energy.\n  const HIDE_WAVE_FRAME_THRESHOLD = 60;\n  let numFramesBelowMin = 0;\n  let mags = drawData.magnitudes;\n  let peaks = drawData.peaks;\n  let newMagnitudes = getFrequenciesFromLPC(lastReceivedCoeffs, LPC_DISPLAY_RES, MAX_LPC_FREQ, SAMPLE_RATE);\n\n  // ------------------------ Post LPC\n  newMagnitudes = expandArraySmoothly(newMagnitudes, 512);\n  // TODO perhaps move this after scaling. move 256 num to const.\n\n  // newMagnitudes = scale(newMagnitudes);\n\n  let magMean = getMean(newMagnitudes);\n  if (magMean < HIDE_WAVE_MAG_THRESHOLD) {\n    numFramesBelowMin += 1;\n    if (numFramesBelowMin > HIDE_WAVE_FRAME_THRESHOLD) {\n      newMagnitudes = createArrayWithSameValue(EMPTY_WAVE_MAG, newMagnitudes.length);\n    }\n  } else {\n    numFramesBelowMin = 0;\n  }\n  if (mags == 0) {\n    mags = newMagnitudes;\n  } else {\n    mags = updateMagnitudes(newMagnitudes, mags);\n  }\n  // console.log('mags after data update')\n  // console.log(magsRef.current)\n\n  if (magMean >= DRAW_PEAK_THRESHOLD) {\n    peaks = getPeaks(mags);\n  } else {\n    peaks = [];\n  }\n  mags = normalizeIfNecessary(mags);\n  drawData = {\n    magnitudes: mags,\n    peaks: peaks\n  };\n  return drawData;\n};\n\n// ===============================================\nexport { initAudio, updateData, updateCoeffsOffline, updateCoeffsWithVonage };","map":{"version":3,"names":["computeLPC","getPeaks","getFrequenciesFromLPC","expandArraySmoothly","getMean","updateMagnitudes","normalizeIfNecessary","createArrayWithSameValue","SAMPLE_RATE","FRAME_SIZE","MAX_LPC_FREQ","LPC_DISPLAY_RES","EMPTY_WAVE_MAG","convertToMono","input","audioContextRef","splitter","createChannelSplitter","merger","createChannelMerger","connect","initAudio","microphone","analyser","console","log","fftSize","audioInput","HIGH_PASS","LOW_PASS","highpass","createBiquadFilter","lowpass","type","frequency","value","updateCoeffsOffline","audioData","lpcCoeffs","lastReceivedCoeffs","slice","length","updateCoeffsWithVonage","updateData","drawData","DRAW_PEAK_THRESHOLD","HIDE_WAVE_MAG_THRESHOLD","HIDE_WAVE_FRAME_THRESHOLD","numFramesBelowMin","mags","magnitudes","peaks","newMagnitudes","magMean"],"sources":["D:/Project/UC_Trains_Voice/react-demo/src/gavt/Wave/waveAudio.js"],"sourcesContent":["import {computeLPC, getPeaks, getFrequenciesFromLPC} from './lib/lpc.js';\r\n\r\nimport {    expandArraySmoothly,  // expandArraySmoothly(array, targetResolution int)\r\n            getMean,              // getMean(array)\r\n            updateMagnitudes,     // updateMagnitudes(newMMagArray, currentMagArray);\r\n            normalizeIfNecessary,\r\n            createArrayWithSameValue\r\n} from './lib/spectroHelpers.js';\r\n\r\n\r\nconst SAMPLE_RATE = 44100;\r\nconst FRAME_SIZE = 512; // Number of audio samples used to generate LPC Coeffs.;\r\nconst MAX_LPC_FREQ = 4096;  // hc needs a better understanding of this\r\nconst LPC_DISPLAY_RES = 64;\r\nconst EMPTY_WAVE_MAG = 0.3;\r\n\r\n\r\n// These fns are imported into WaveCanvas\r\n\r\n\r\n// ===================================================================\r\n// AUDIO SETUP FNS\r\n\r\n// initAudio Helper ------------------------------------\r\nconst convertToMono = (input, audioContextRef) => {\r\n    const splitter = audioContextRef.createChannelSplitter(2);\r\n    const merger = audioContextRef.createChannelMerger(2);\r\n    input.connect(splitter);\r\n    splitter.connect(merger, 0, 0);\r\n    splitter.connect(merger, 0, 1);\r\n\r\n    return merger;\r\n};\r\n\r\n// initAudio  ------------------------------------\r\nconst initAudio = (microphone, audioContextRef, analyser) => { \r\n    \r\n    console.log('mic should be a MediaStreamAudioSourceNode')\r\n    console.log(microphone);\r\n\r\n    analyser.fftSize = FRAME_SIZE * 2;\r\n\r\n    const audioInput = convertToMono(microphone, audioContextRef);\r\n    const HIGH_PASS = 20;\r\n    const LOW_PASS = MAX_LPC_FREQ;\r\n\r\n    const highpass = audioContextRef.createBiquadFilter();\r\n    const lowpass = audioContextRef.createBiquadFilter();\r\n\r\n    highpass.type = \"highpass\";\r\n    highpass.frequency.value = HIGH_PASS;\r\n    lowpass.type = \"lowpass\";\r\n    lowpass.frequency.value = LOW_PASS;\r\n\r\n    audioInput.connect(highpass);\r\n    highpass.connect(lowpass);\r\n    lowpass.connect(analyser);\r\n\r\n    return(analyser)\r\n}\r\n\r\n// ===================================================================\r\n// COEFF UPDATERS / Interval Loop \r\n\r\nconst updateCoeffsOffline = (audioData, ) => { // UPDATES COEFFS DATA\r\n    let lpcCoeffs = computeLPC(audioData);\r\n    let lastReceivedCoeffs = lpcCoeffs.slice(0, lpcCoeffs.length - 1);\r\n    //   console.log(lastReceivedCoeffs);\r\n\r\n    return lastReceivedCoeffs\r\n}\r\n\r\n// TODO: --------------------------------------------\r\nconst updateCoeffsWithVonage = function () {}\r\n\r\n\r\n// ===================================================================\r\n// MAGS & PEAKS FROM LPC \r\n// gets and shapes wave mag & peak data to be used in drawing sketch\r\n\r\nconst updateData = (drawData, lastReceivedCoeffs) => {\r\n    const DRAW_PEAK_THRESHOLD = 0.3;\r\n    const HIDE_WAVE_MAG_THRESHOLD = -1; // -1 means always animate wave, otherwise min energy.\r\n    const HIDE_WAVE_FRAME_THRESHOLD = 60;\r\n    let numFramesBelowMin = 0;\r\n    let mags = drawData.magnitudes;\r\n    let peaks = drawData.peaks;\r\n\r\n    let newMagnitudes = getFrequenciesFromLPC(\r\n        lastReceivedCoeffs, \r\n        LPC_DISPLAY_RES,\r\n        MAX_LPC_FREQ,\r\n        SAMPLE_RATE\r\n    );\r\n\r\n    // ------------------------ Post LPC\r\n    newMagnitudes = expandArraySmoothly(newMagnitudes, 512); \r\n    // TODO perhaps move this after scaling. move 256 num to const.\r\n\r\n    // newMagnitudes = scale(newMagnitudes);\r\n\r\n    let magMean = getMean(newMagnitudes);\r\n\r\n    if (magMean < HIDE_WAVE_MAG_THRESHOLD) {\r\n    numFramesBelowMin += 1;\r\n    if (numFramesBelowMin > HIDE_WAVE_FRAME_THRESHOLD) {\r\n        newMagnitudes = createArrayWithSameValue(\r\n        EMPTY_WAVE_MAG,\r\n        newMagnitudes.length\r\n        );\r\n    }\r\n    } else {\r\n        numFramesBelowMin = 0;\r\n    }\r\n  \r\n    if (mags == 0) { \r\n        mags = newMagnitudes;\r\n    } else {\r\n        mags = updateMagnitudes(newMagnitudes, mags); \r\n    }\r\n    // console.log('mags after data update')\r\n    // console.log(magsRef.current)\r\n  \r\n    if (magMean >= DRAW_PEAK_THRESHOLD) {\r\n        peaks = getPeaks(mags);\r\n    } else {\r\n        peaks = [];\r\n    }\r\n  \r\n    mags = normalizeIfNecessary(mags);\r\n  \r\n    drawData = {\r\n      magnitudes: mags,\r\n      peaks: peaks\r\n    }\r\n    return drawData\r\n}\r\n\r\n\r\n// ===============================================\r\nexport { initAudio, updateData, updateCoeffsOffline, updateCoeffsWithVonage };\r\n\r\n\r\n\r\n\r\n\r\n\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}