由於 VAD 的 onSpeechEnd()
可回傳 Voice Buffer,可直接透過 Voice Buffer 轉成 WAV 格式,不必再透過 Extendable Media Recorder。
Version
Voice Activity Detection for JavaScript 0.7
Vue 2.6
Template
App.vue
<template>
<div>
<main class="main">
<button @click="onTest">VAD Test</button>
</main>
</div>
</template>
<script>
import { MicVAD } from '@ricky0123/vad-web'
import { utils } from '@ricky0123/vad-web'
const FILE_NAME = 'sample.wav'
export default {
name: 'App',
data: () => ({
myVad: null,
}),
methods: {
async onTest() {
console.warn('onTest')
await this.initVad()
},
async initVad() {
this.myVad = await MicVAD.new({
async onSpeechStart() {
console.warn('VAD.onSpeechStart')
},
onSpeechEnd(audio) {
console.warn('VAD.onSpeechEnd')
let wavBuffer = utils.encodeWAV(audio, 1, 16000, 1, 16)
let blob = new Blob([wavBuffer])
let link = document.createElement('a')
link.href = URL.createObjectURL(blob)
link.download = FILE_NAME
link.click()
},
})
console.warn('VAD.start')
this.myVad.start()
},
},
}
</script>
Line 30
onSpeechEnd(audio) {
console.warn('VAD.onSpeechEnd')
let wavBuffer = utils.encodeWAV(audio, 1, 16000, 1, 16)
let blob = new Blob([wavBuffer])
let link = document.createElement('a')
link.href = URL.createObjectURL(blob)
link.download = FILE_NAME
link.click()
}
onSpeecEnd()
提供了audio
array,可由 VAD 內建的utils.encodeWAV()
將audio
array 轉成 WAV 格式
Conclusion
- 由 VAD 取得 voice buffer 還有另外一個好處,就是不會有一開始落字的問題,若透過 Extendable Media Recorder 取得 voice buffer,由於該套件啟動也需要時間,因此會發現一開始講話會有落字問題