mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-19 03:11:20 -08:00
fix: rename cleanupTimeout to hideTimeout for consistency in ASR plugin
Refactor artplayerPluginAsr: Enhance audio capture and processing - Introduced gainNode for audio output management. - Added mediaStream and mediaStreamSource for fallback audio capture. - Refactored startCapture and stopCapture functions for better clarity and error handling. - Improved audio source setup with a dedicated function for capturing audio from video. - Ensured proper disconnection of audio nodes and cleanup of resources on destroy. feat: enhance ASR plugin with improved subtitle handling and styling fix: rename autoClearTimer to hideTimer for consistency in ASR plugin Update asr.js feat: refactor ASR plugin to improve audio chunk handling and WebSocket management Update asr.js fix: rename autoClearTimeout to cleanupTimeout for consistency Update asr.js feat: refactor ASR handling and improve WebSocket management Update index.js feat: add append and clear functions to enhance audio chunk handling Update asr.js Update asr.js feat: release version 2.0.0 of artplayer-plugin-asr - Implemented core functionality for audio recording using AudioWorklet. - Added support for configurable audio capture interval and sample rate. - Introduced WAV encoding for recorded audio chunks. - Created a new plugin structure with proper TypeScript definitions. - Added legacy support for older environments. - Updated package.json with necessary metadata and export configurations. - Included comprehensive inline documentation for better maintainability.
This commit is contained in:
1 parent
6c4e9f7e78
commit
5d7710979d
22 files changed
+893
-1
No files matched your search
@@ -0,0 +1,57 @@
|
||||
var art = new Artplayer({
|
||||
container: '.artplayer-app',
|
||||
url: '/assets/sample/video.mp4',
|
||||
autoSize: true,
|
||||
fullscreen: true,
|
||||
fullscreenWeb: true,
|
||||
plugins: [
|
||||
artplayerPluginAsr({
|
||||
length: 3,
|
||||
interval: 40,
|
||||
sampleRate: 16000,
|
||||
hideTimeout: 10000,
|
||||
// Use your AI tool to convert buffer into subtitles
|
||||
onAudioChunk: (buffer) => tencentASR(buffer),
|
||||
}),
|
||||
]
|
||||
});
|
||||
|
||||
var ws = null;
|
||||
var loading = false;
|
||||
async function tencentASR(buffer) {
|
||||
if (loading) return;
|
||||
|
||||
if (!ws) {
|
||||
loading = true;
|
||||
const api = 'https://api.aimu.app/asr/tencent?engine_model_type=16k_ja';
|
||||
const { url } = await (await fetch(api)).json();
|
||||
ws = new WebSocket(url);
|
||||
ws.binaryType = 'arraybuffer';
|
||||
ws.onmessage = (event) => {
|
||||
const { code, result } = JSON.parse(event.data);
|
||||
if (code === 0) {
|
||||
const subtitle = result?.voice_text_str;
|
||||
art.plugins.artplayerPluginAsr.append(subtitle);
|
||||
} else {
|
||||
ws.close();
|
||||
ws = null;
|
||||
}
|
||||
|
||||
};
|
||||
loading = false;
|
||||
}
|
||||
|
||||
if (ws.readyState === WebSocket.OPEN) {
|
||||
ws.send(buffer);
|
||||
} else {
|
||||
console.warn('WebSocket is not open');
|
||||
}
|
||||
}
|
||||
|
||||
art.on('destroy', () => {
|
||||
try {
|
||||
ws.send(JSON.stringify({ type: 'end' }));
|
||||
ws.close();
|
||||
} catch {}
|
||||
ws = null;
|
||||
});
|
||||
Reference in new issue
Block a user