mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-08 19:06:15 -08:00
69 lines
2.2 KiB
JavaScript
69 lines
2.2 KiB
JavaScript
/* global Artplayer, artplayerPluginAsr */
|
|
// Local audio capture demo. The subtitles below are simulated, not recognized speech.
|
|
// No audio is uploaded; only the sample media is loaded from this local site.
|
|
const statistics = document.createElement('div')
|
|
statistics.textContent = 'Local ASR demo: press play. No recognition service is used.'
|
|
let chunks = 0
|
|
let pcmBytes = 0
|
|
let wavBytes = 0
|
|
|
|
const art = new Artplayer({
|
|
container: '.artplayer-app',
|
|
url: '/assets/sample/steve-jobs.mp4',
|
|
autoSize: true,
|
|
fullscreen: true,
|
|
fullscreenWeb: true,
|
|
layers: [{
|
|
name: 'asr-local-statistics',
|
|
html: statistics,
|
|
style: {
|
|
position: 'absolute',
|
|
top: '12px',
|
|
left: '12px',
|
|
right: '12px',
|
|
padding: '8px 12px',
|
|
background: 'rgba(0, 0, 0, 0.65)',
|
|
color: '#fff',
|
|
fontSize: '12px',
|
|
whiteSpace: 'pre-line',
|
|
pointerEvents: 'none',
|
|
},
|
|
}],
|
|
controls: [{
|
|
name: 'asr-local-stop',
|
|
position: 'right',
|
|
html: 'Stop ASR',
|
|
tooltip: 'Stop capture; pause and play to restart',
|
|
async click() {
|
|
await art.plugins.artplayerPluginAsr.stop()
|
|
if (!art.isDestroy)
|
|
statistics.textContent = 'Local capture stopped. Pause and play to restart. Nothing was uploaded.'
|
|
},
|
|
}],
|
|
plugins: [artplayerPluginAsr({
|
|
length: 2,
|
|
interval: 250,
|
|
sampleRate: 16000,
|
|
autoHideTimeout: 5000,
|
|
onAudioChunk({ pcm, wav }) {
|
|
if (art.isDestroy)
|
|
return
|
|
chunks++
|
|
pcmBytes += pcm.byteLength
|
|
wavBytes += wav.byteLength
|
|
const sampleRate = new DataView(wav).getUint32(24, true)
|
|
const samples = new DataView(pcm)
|
|
let peak = 0
|
|
for (let offset = 0; offset < pcm.byteLength; offset += 2)
|
|
peak = Math.max(peak, Math.abs(samples.getInt16(offset, true)))
|
|
const duration = (pcmBytes / 2 / sampleRate).toFixed(2)
|
|
statistics.textContent = [
|
|
'Local capture only - simulated subtitles, no speech recognition',
|
|
`Chunks: ${chunks} | ${sampleRate} Hz mono PCM16 | ${duration} seconds captured`,
|
|
`PCM: ${pcmBytes} bytes | WAV: ${wavBytes} bytes | Current peak: ${peak}`,
|
|
].join('\n')
|
|
return `Simulated local subtitle: audio chunk ${chunks} received.`
|
|
},
|
|
})],
|
|
})
|