@omnimedia/omnitool
Version:
open source video processing tools
29 lines (23 loc) • 819 B
text/typescript
import {Driver} from "../../../../driver/driver.js"
export async function prepAudio(driver: Driver, source: Blob) {
const arrayBuffer = await source.arrayBuffer()
const audioCTX = new AudioContext({sampleRate: 16000})
try {
const audioData = await audioCTX.decodeAudioData(arrayBuffer)
let audio: Float32Array
if (audioData.numberOfChannels === 2) {
const SCALING_FACTOR = Math.sqrt(2)
const left = audioData.getChannelData(0)
const right = audioData.getChannelData(1)
audio = new Float32Array(left.length)
for (let i = 0; i < audioData.length; ++i)
audio[i] = (SCALING_FACTOR * (left[i] + right[i])) / 2
} else {
audio = audioData.getChannelData(0)
}
const duration = await driver.getAudioDuration(source)
return {audio, duration}
} finally {
await audioCTX.close()
}
}