From 86ecb9439bb260ad5c20c9ee9c41fa2b9512b132 Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Wed, 25 Dec 2024 15:20:13 +0800 Subject: [PATCH] feat: moonshine-web demo --- packages/moonshine-web/.dockerignore | 2 + packages/moonshine-web/Dockerfile | 18 ++ packages/moonshine-web/README.md | 71 +++++ packages/moonshine-web/index.html | 136 +++++++++ packages/moonshine-web/netlify.toml | 18 ++ packages/moonshine-web/package.json | 37 +++ packages/moonshine-web/public/banner.png | Bin 0 -> 127489 bytes packages/moonshine-web/public/logo.png | Bin 0 -> 6261 bytes packages/moonshine-web/src/App.vue | 263 ++++++++++++++++++ .../src/components/AnimatedMesh.vue | 61 ++++ .../src/components/BloomScene.vue | 49 ++++ packages/moonshine-web/src/constants/index.ts | 53 ++++ packages/moonshine-web/src/libs/processor.ts | 40 +++ packages/moonshine-web/src/libs/types.ts | 42 +++ packages/moonshine-web/src/libs/worker.ts | 238 ++++++++++++++++ packages/moonshine-web/src/main.ts | 14 + packages/moonshine-web/src/styles/main.css | 18 ++ packages/moonshine-web/src/utils/index.ts | 26 ++ packages/moonshine-web/tsconfig.json | 38 +++ packages/moonshine-web/uno.config.ts | 17 ++ packages/moonshine-web/vite.config.ts | 17 ++ packages/whisper-webgpu/index.html | 6 +- packages/whisper-webgpu/netlify.toml | 6 - packages/whisper-webgpu/package.json | 1 + packages/whisper-webgpu/src/App.vue | 2 +- packages/whisper-webgpu/src/libs/worker.ts | 17 +- packages/whisper-webgpu/tsconfig.json | 9 +- pnpm-lock.yaml | 145 +++++++++- 28 files changed, 1318 insertions(+), 26 deletions(-) create mode 100644 packages/moonshine-web/.dockerignore create mode 100644 packages/moonshine-web/Dockerfile create mode 100644 packages/moonshine-web/README.md create mode 100644 packages/moonshine-web/index.html create mode 100755 packages/moonshine-web/netlify.toml create mode 100644 packages/moonshine-web/package.json create mode 100644 packages/moonshine-web/public/banner.png create mode 100644 packages/moonshine-web/public/logo.png create mode 100644 packages/moonshine-web/src/App.vue create mode 100644 packages/moonshine-web/src/components/AnimatedMesh.vue create mode 100644 packages/moonshine-web/src/components/BloomScene.vue create mode 100644 packages/moonshine-web/src/constants/index.ts create mode 100644 packages/moonshine-web/src/libs/processor.ts create mode 100644 packages/moonshine-web/src/libs/types.ts create mode 100644 packages/moonshine-web/src/libs/worker.ts create mode 100644 packages/moonshine-web/src/main.ts create mode 100644 packages/moonshine-web/src/styles/main.css create mode 100644 packages/moonshine-web/src/utils/index.ts create mode 100644 packages/moonshine-web/tsconfig.json create mode 100644 packages/moonshine-web/uno.config.ts create mode 100644 packages/moonshine-web/vite.config.ts diff --git a/packages/moonshine-web/.dockerignore b/packages/moonshine-web/.dockerignore new file mode 100644 index 0000000..f06235c --- /dev/null +++ b/packages/moonshine-web/.dockerignore @@ -0,0 +1,2 @@ +node_modules +dist diff --git a/packages/moonshine-web/Dockerfile b/packages/moonshine-web/Dockerfile new file mode 100644 index 0000000..3e3a684 --- /dev/null +++ b/packages/moonshine-web/Dockerfile @@ -0,0 +1,18 @@ +FROM node:20-alpine as build-stage + +WORKDIR /app +RUN corepack enable + +COPY .npmrc package.json pnpm-lock.yaml ./ +RUN --mount=type=cache,id=pnpm-store,target=/root/.pnpm-store \ + pnpm install --frozen-lockfile + +COPY . . +RUN pnpm build + +FROM nginx:stable-alpine as production-stage + +COPY --from=build-stage /app/dist /usr/share/nginx/html +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/packages/moonshine-web/README.md b/packages/moonshine-web/README.md new file mode 100644 index 0000000..f55d218 --- /dev/null +++ b/packages/moonshine-web/README.md @@ -0,0 +1,71 @@ +--- +title: Moonshine Web (Vue) +emoji: 🌙 +colorFrom: blue +colorTo: pink +sdk: static +pinned: false +license: apache-2.0 +models: + - onnx-community/moonshine-base-ONNX +short_description: Yet another Real-time in-browser speech recognition, re-implemented with Vue +thumbnail: https://raw.githubusercontent.com/moeru-ai/airi/refs/heads/main/packages/whisper-webgpu/public/banner.png +--- + +

Moonshine Web (Vue)

+ +

+ [Try it] +

+ +> Heavily inspired by [Realtime in-browser speech recognition](https://huggingface.co/spaces/webml-community/moonshine-web) + +# Moonshine Web + +A simple Vue + Vite application for running [Moonshine Base](https://huggingface.co/onnx-community/moonshine-base-ONNX), a powerful speech-to-text model optimized for fast and accurate automatic speech recognition (ASR) on resource-constrained devices. It runs locally in the browser using Transformers.js and WebGPU-acceleration (or WASM as a fallback). + +## Getting Started + +Follow the steps below to set up and run the application. + +### 1. Clone the Repository + +Clone the examples repository from GitHub: + +```sh +git clone https://github.com/moeru-ai/airi.git +``` + +### 2. Navigate to the Project Directory + +Change your working directory to the `moonshine-web` folder: + +```sh +cd packages/moonshine-web +``` + +### 3. Install Dependencies + +Install the necessary dependencies using npm: + +```sh +npm i +``` + +### 4. Run the Development Server + +Start the development server: + +```sh +npm run dev +``` + +The application should now be running locally. Open your browser and go to `http://localhost:5175` to see it in action. + +## Acknowledgements + +The audio visualizer was adapted from Wael Yasmina's [amazing tutorial](https://waelyasmina.net/articles/how-to-create-a-3d-audio-visualizer-using-three-js/). + +Great thanks to what Xenova have done. + +> [Source code](https://github.com/huggingface/transformers.js-examples/tree/38a883dd465d70d7368b86b95aa0678895ca4e83/moonshine-web) diff --git a/packages/moonshine-web/index.html b/packages/moonshine-web/index.html new file mode 100644 index 0000000..8c9a995 --- /dev/null +++ b/packages/moonshine-web/index.html @@ -0,0 +1,136 @@ + + + + + Moonshine Web (Vue) + + + + + + + +
+ + + + diff --git a/packages/moonshine-web/netlify.toml b/packages/moonshine-web/netlify.toml new file mode 100755 index 0000000..12b9de3 --- /dev/null +++ b/packages/moonshine-web/netlify.toml @@ -0,0 +1,18 @@ +[build] +publish = "packages/moonshine-web/dist" +command = "pnpm run packages:stub && pnpm run build" + +[build.environment] +NODE_VERSION = "22" + +[[redirects]] +from = "/assets/*" +to = "/assets/:splat" +status = 200 +force = true + +[[redirects]] +from = "/*" +to = "/index.html" +status = 200 +force = false diff --git a/packages/moonshine-web/package.json b/packages/moonshine-web/package.json new file mode 100644 index 0000000..d6cd22a --- /dev/null +++ b/packages/moonshine-web/package.json @@ -0,0 +1,37 @@ +{ + "name": "@proj-airi/moonshine-web", + "type": "module", + "private": true, + "packageManager": "pnpm@9.15.1", + "description": "Yet another WebGPU based STT + VAD with Moonshine model re-implemented", + "author": { + "name": "Neko Ayaka", + "email": "neko@ayaka.moe", + "url": "https://github.com/nekomeowww" + }, + "license": "MIT", + "scripts": { + "build": "vite build", + "dev": "vite --port 5175", + "lint": "eslint .", + "preview": "vite preview", + "typecheck": "vue-tsc --noEmit" + }, + "dependencies": { + "@tresjs/core": "^4.3.1", + "@unocss/reset": "^0.65.2", + "@vueuse/core": "^12.1.0", + "@vueuse/motion": "^2.2.6", + "ofetch": "^1.4.1", + "three": "^0.171.0", + "vue": "^3.5.13" + }, + "devDependencies": { + "@huggingface/transformers": "^3.2.1", + "@types/audioworklet": "^0.0.65", + "@types/three": "^0.171.0", + "@vitejs/plugin-vue": "^5.2.1", + "@webgpu/types": "^0.1.52", + "vue-tsc": "^2.1.10" + } +} diff --git a/packages/moonshine-web/public/banner.png b/packages/moonshine-web/public/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..37f81a37d859358849b7d8215703feea8d45e8ce GIT binary patch literal 127489 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 @<-tn8oDO~-Mco4T8`B+=cO^Chn{<1`@;48eQ_ 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 literal 0 HcmV?d00001 diff --git a/packages/moonshine-web/src/App.vue b/packages/moonshine-web/src/App.vue new file mode 100644 index 0000000..4012715 --- /dev/null +++ b/packages/moonshine-web/src/App.vue @@ -0,0 +1,263 @@ + + + + + diff --git a/packages/moonshine-web/src/components/AnimatedMesh.vue b/packages/moonshine-web/src/components/AnimatedMesh.vue new file mode 100644 index 0000000..27cf171 --- /dev/null +++ b/packages/moonshine-web/src/components/AnimatedMesh.vue @@ -0,0 +1,61 @@ + + + diff --git a/packages/moonshine-web/src/components/BloomScene.vue b/packages/moonshine-web/src/components/BloomScene.vue new file mode 100644 index 0000000..91bbb2d --- /dev/null +++ b/packages/moonshine-web/src/components/BloomScene.vue @@ -0,0 +1,49 @@ + + + diff --git a/packages/moonshine-web/src/constants/index.ts b/packages/moonshine-web/src/constants/index.ts new file mode 100644 index 0000000..4d67fe4 --- /dev/null +++ b/packages/moonshine-web/src/constants/index.ts @@ -0,0 +1,53 @@ +/** + * Sample rate of the audio. + * Coindicentally, this is the same for both models (Moonshine and Silero VAD) + */ +export const SAMPLE_RATE = 16000 +export const SAMPLE_RATE_MS = SAMPLE_RATE / 1000 + +/** + * Probabilities ABOVE this value are considered as SPEECH + */ +export const SPEECH_THRESHOLD = 0.3 + +/** + * If current state is SPEECH, and the probability of the next state + * is below this value, it is considered as NON-SPEECH. + */ +export const EXIT_THRESHOLD = 0.1 + +/** + * After each speech chunk, wait for at least this amount of silence + * before considering the next chunk as a new speech chunk + */ +export const MIN_SILENCE_DURATION_MS = 400 +export const MIN_SILENCE_DURATION_SAMPLES + = MIN_SILENCE_DURATION_MS * SAMPLE_RATE_MS + +/** + * Pad the speech chunk with this amount each side + */ +export const SPEECH_PAD_MS = 80 +export const SPEECH_PAD_SAMPLES = SPEECH_PAD_MS * SAMPLE_RATE_MS + +/** + * Final speech chunks below this duration are discarded + */ +export const MIN_SPEECH_DURATION_SAMPLES = 250 * SAMPLE_RATE_MS // 250 ms + +/** + * Maximum duration of audio that can be handled by Moonshine + */ +export const MAX_BUFFER_DURATION = 30 + +/** + * Size of the incoming buffers + */ +export const NEW_BUFFER_SIZE = 512 + +/** + * The number of previous buffers to keep, to ensure the audio is padded correctly + */ +export const MAX_NUM_PREV_BUFFERS = Math.ceil( + SPEECH_PAD_SAMPLES / NEW_BUFFER_SIZE, +) diff --git a/packages/moonshine-web/src/libs/processor.ts b/packages/moonshine-web/src/libs/processor.ts new file mode 100644 index 0000000..cbd1eed --- /dev/null +++ b/packages/moonshine-web/src/libs/processor.ts @@ -0,0 +1,40 @@ +const MIN_CHUNK_SIZE = 512 +let globalPointer = 0 +const globalBuffer = new Float32Array(MIN_CHUNK_SIZE) + +class VADProcessor extends AudioWorkletProcessor { + process(inputs: Float32Array[][], _outputs: Float32Array[][], _parameters: Record): boolean { + const buffer = inputs[0][0] + if (!buffer) + return false // buffer is null when the stream ends + + if (buffer.length > MIN_CHUNK_SIZE) { + // If the buffer is larger than the minimum chunk size, send the entire buffer + this.port.postMessage({ buffer }) + } + else { + const remaining = MIN_CHUNK_SIZE - globalPointer + if (buffer.length >= remaining) { + // If the buffer is larger than (or equal to) the remaining space in the global buffer, copy the remaining space + globalBuffer.set(buffer.subarray(0, remaining), globalPointer) + + // Send the global buffer + this.port.postMessage({ buffer: globalBuffer }) + + // Reset the global buffer and set the remaining buffer + globalBuffer.fill(0) + globalBuffer.set(buffer.subarray(remaining), 0) + globalPointer = buffer.length - remaining + } + else { + // If the buffer is smaller than the remaining space in the global buffer, copy the buffer to the global buffer + globalBuffer.set(buffer, globalPointer) + globalPointer += buffer.length + } + } + + return true // Keep the processor alive + } +} + +registerProcessor('vad-processor', VADProcessor) diff --git a/packages/moonshine-web/src/libs/types.ts b/packages/moonshine-web/src/libs/types.ts new file mode 100644 index 0000000..a3f8135 --- /dev/null +++ b/packages/moonshine-web/src/libs/types.ts @@ -0,0 +1,42 @@ +export enum MessageType { + Status = 'status', + Output = 'output', + Info = 'info', +} + +export enum MessageStatus { + RecordingStart = 'recording_start', + RecordingEnd = 'recording_end', +} + +export enum Duration { + UntilNext = 'until_next', +} + +export interface MessageEventStatus { + type: MessageType.Status + status: MessageStatus + message: string + duration: Duration +} + +export interface MessageEventOutput { + type: MessageType.Output + buffer: Float32Array + message: string + start: number + end: number + duration: number +} + +export interface MessageEventInfo { + type: MessageType.Info + message: string + duration?: Duration.UntilNext +} + +export interface MessageEventError { + error: unknown +} + +export type MessageEvent = MessageEventError | MessageEventStatus | MessageEventOutput | MessageEventInfo diff --git a/packages/moonshine-web/src/libs/worker.ts b/packages/moonshine-web/src/libs/worker.ts new file mode 100644 index 0000000..361028e --- /dev/null +++ b/packages/moonshine-web/src/libs/worker.ts @@ -0,0 +1,238 @@ +/* eslint-disable antfu/no-top-level-await */ +/* eslint-disable no-restricted-globals */ +import type { MessageEventError, MessageEventInfo, MessageEventOutput, MessageEventStatus } from './types' +import { AutoModel, pipeline, Tensor } from '@huggingface/transformers' + +import { + EXIT_THRESHOLD, + MAX_BUFFER_DURATION, + MAX_NUM_PREV_BUFFERS, + MIN_SILENCE_DURATION_SAMPLES, + MIN_SPEECH_DURATION_SAMPLES, + SAMPLE_RATE, + SPEECH_PAD_SAMPLES, + SPEECH_THRESHOLD, +} from '../constants' +import { supportsWebGPU } from '../utils' +import { Duration, MessageStatus, MessageType } from './types' + +const device = (await supportsWebGPU()) ? 'webgpu' : 'wasm' +self.postMessage({ type: MessageType.Info, message: `Using device: "${device}"` } satisfies MessageEventInfo) +self.postMessage({ + type: MessageType.Info, + message: 'Loading models...', + duration: Duration.UntilNext, +} satisfies MessageEventInfo) + +// Load models +const silero_vad = await AutoModel.from_pretrained( + 'onnx-community/silero-vad', + { + config: { model_type: 'custom' }, + dtype: 'fp32', // Full-precision + }, +).catch((error) => { + self.postMessage({ error } satisfies MessageEventError) + throw error +}) + +const DEVICE_DTYPE_CONFIGS = { + webgpu: { + encoder_model: 'fp32', + decoder_model_merged: 'q4', + }, + wasm: { + encoder_model: 'fp32', + decoder_model_merged: 'q8', + }, +} + +const transcriber = await pipeline( + 'automatic-speech-recognition', + 'onnx-community/moonshine-base-ONNX', // or "onnx-community/whisper-tiny.en", + { + device, + dtype: DEVICE_DTYPE_CONFIGS[device], + }, +).catch((error) => { + self.postMessage({ error } satisfies MessageEventError) + throw error +}) + +await transcriber(new Float32Array(SAMPLE_RATE)) // Compile shaders +self.postMessage({ type: 'status', status: 'ready', message: 'Ready!' }) + +// Transformers.js currently doesn't support simultaneous inference, +// so we need to chain the inference promises. +let inferenceChain = Promise.resolve() + +// Global audio buffer to store incoming audio +const BUFFER = new Float32Array(MAX_BUFFER_DURATION * SAMPLE_RATE) +let bufferPointer = 0 + +// Initial state for VAD +const sr = new Tensor('int64', [SAMPLE_RATE], []) +let state = new Tensor('float32', new Float32Array(2 * 1 * 128), [2, 1, 128]) + +// Whether we are in the process of adding audio to the buffer +let isRecording = false + +/** + * Perform Voice Activity Detection (VAD) + * @param {Float32Array} buffer The new audio buffer + * @returns {Promise} `true` if the buffer is speech, `false` otherwise. + */ +async function vad(buffer: Float32Array) { + const input = new Tensor('float32', buffer, [1, buffer.length]) + + const { stateN, output } = await (inferenceChain = inferenceChain.then(_ => + silero_vad({ input, sr, state }), + )) + state = stateN // Update state + + const isSpeech = output.data[0] + + // Use heuristics to determine if the buffer is speech or not + return ( + // Case 1: We are above the threshold (definitely speech) + isSpeech > SPEECH_THRESHOLD + // Case 2: We are in the process of recording, and the probability is above the negative (exit) threshold + || (isRecording && isSpeech >= EXIT_THRESHOLD) + ) +} + +/** + * Transcribe the audio buffer + * @param {Float32Array} buffer The audio buffer + * @param {object} data Additional data + * @param {number} data.start The start time of the speech segment + * @param {number} data.end The end time of the speech segment + * @param {number} data.duration The duration of the speech segment + */ +async function transcribe(buffer: Float32Array, data: { start: number, end: number, duration: number }) { + const { text } = await (inferenceChain = inferenceChain.then(_ => + transcriber(buffer), + )) + self.postMessage({ type: MessageType.Output, buffer, message: text, ...data } satisfies MessageEventOutput) +} + +// Track the number of samples after the last speech chunk +let postSpeechSamples = 0 +function reset(offset = 0) { + self.postMessage({ + type: MessageType.Status, + status: MessageStatus.RecordingEnd, + message: 'Transcribing...', + duration: Duration.UntilNext, + } satisfies MessageEventStatus) + BUFFER.fill(0, offset) + bufferPointer = offset + isRecording = false + postSpeechSamples = 0 +} + +const prevBuffers: Array> = [] + +function dispatchForTranscriptionAndResetAudioBuffer(overflow?: Float32Array) { + // Get start and end time of the speech segment, minus the padding + const now = Date.now() + const end + = now - ((postSpeechSamples + SPEECH_PAD_SAMPLES) / SAMPLE_RATE) * 1000 + const start = end - (bufferPointer / SAMPLE_RATE) * 1000 + const duration = end - start + const overflowLength = overflow?.length ?? 0 + + // Send the audio buffer to the worker + const buffer = BUFFER.slice(0, bufferPointer + SPEECH_PAD_SAMPLES) + + const prevLength = prevBuffers.reduce((acc, b) => acc + b.length, 0) + const paddedBuffer = new Float32Array(prevLength + buffer.length) + let offset = 0 + for (const prev of prevBuffers) { + paddedBuffer.set(prev, offset) + offset += prev.length + } + paddedBuffer.set(buffer, offset) + transcribe(paddedBuffer, { start, end, duration }) + + // Set overflow (if present) and reset the rest of the audio buffer + if (overflow) { + BUFFER.set(overflow, 0) + } + + reset(overflowLength) +} + +self.onmessage = async (event) => { + const { buffer } = event.data as { buffer: Float32Array } + + const wasRecording = isRecording // Save current state + const isSpeech = await vad(buffer) + + if (!wasRecording && !isSpeech) { + // We are not recording, and the buffer is not speech, + // so we will probably discard the buffer. So, we insert + // into a FIFO queue with maximum size of PREV_BUFFER_SIZE + if (prevBuffers.length >= MAX_NUM_PREV_BUFFERS) { + // If the queue is full, we discard the oldest buffer + prevBuffers.shift() + } + + prevBuffers.push(buffer) + return + } + + const remaining = BUFFER.length - bufferPointer + if (buffer.length >= remaining) { + // The buffer is larger than (or equal to) the remaining space in the global buffer, + // so we perform transcription and copy the overflow to the global buffer + BUFFER.set(buffer.subarray(0, remaining), bufferPointer) + bufferPointer += remaining + + // Dispatch the audio buffer + const overflow = buffer.subarray(remaining) + dispatchForTranscriptionAndResetAudioBuffer(overflow) + return + } + else { + // The buffer is smaller than the remaining space in the global buffer, + // so we copy it to the global buffer + BUFFER.set(buffer, bufferPointer) + bufferPointer += buffer.length + } + + if (isSpeech) { + if (!isRecording) { + // Indicate start of recording + self.postMessage({ + type: MessageType.Status, + status: MessageStatus.RecordingStart, + message: 'Listening...', + duration: Duration.UntilNext, + } satisfies MessageEventStatus) + } + // Start or continue recording + isRecording = true + postSpeechSamples = 0 // Reset the post-speech samples + return + } + + postSpeechSamples += buffer.length + + // At this point we're confident that we were recording (wasRecording === true), but the latest buffer is not speech. + // So, we check whether we have reached the end of the current audio chunk. + if (postSpeechSamples < MIN_SILENCE_DURATION_SAMPLES) { + // There was a short pause, but not long enough to consider the end of a speech chunk + // (e.g., the speaker took a breath), so we continue recording + return + } + + if (bufferPointer < MIN_SPEECH_DURATION_SAMPLES) { + // The entire buffer (including the new chunk) is smaller than the minimum + // duration of a speech chunk, so we can safely discard the buffer. + reset() + return + } + + dispatchForTranscriptionAndResetAudioBuffer() +} diff --git a/packages/moonshine-web/src/main.ts b/packages/moonshine-web/src/main.ts new file mode 100644 index 0000000..af0b83f --- /dev/null +++ b/packages/moonshine-web/src/main.ts @@ -0,0 +1,14 @@ +import Tres from '@tresjs/core' +import { MotionPlugin } from '@vueuse/motion' +import { createApp } from 'vue' + +import App from './App.vue' + +import '@unocss/reset/tailwind.css' +import './styles/main.css' +import 'uno.css' + +createApp(App) + .use(MotionPlugin) + .use(Tres) + .mount('#app') diff --git a/packages/moonshine-web/src/styles/main.css b/packages/moonshine-web/src/styles/main.css new file mode 100644 index 0000000..47e1087 --- /dev/null +++ b/packages/moonshine-web/src/styles/main.css @@ -0,0 +1,18 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap'); + +* { + font-family: 'Poppins', sans-serif; +} + +html { + overflow: hidden; +} + +html, +body, +#app { + margin: 0; + padding: 0; + height: 100%; + width: 100%; +} diff --git a/packages/moonshine-web/src/utils/index.ts b/packages/moonshine-web/src/utils/index.ts new file mode 100644 index 0000000..ef9bd2e --- /dev/null +++ b/packages/moonshine-web/src/utils/index.ts @@ -0,0 +1,26 @@ +export function formatDate(timestamp: number) { + return new Date(timestamp).toLocaleString('zh', { + hour12: false, + year: 'numeric', + month: 'numeric', + day: 'numeric', + hour: 'numeric', + minute: 'numeric', + second: 'numeric', + fractionalSecondDigits: 3, + }) +} + +export async function supportsWebGPU() { + try { + if (!('gpu' in navigator) || !navigator.gpu) + return false + + await navigator.gpu.requestAdapter() + return true + } + catch (e) { + console.error(e) + return false + } +} diff --git a/packages/moonshine-web/tsconfig.json b/packages/moonshine-web/tsconfig.json new file mode 100644 index 0000000..e3b932b --- /dev/null +++ b/packages/moonshine-web/tsconfig.json @@ -0,0 +1,38 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": [ + "DOM", + "ESNext", + "WebWorker" + ], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "Bundler", + "paths": { + "~/*": ["src/*"] + }, + "resolveJsonModule": true, + "types": [ + "vitest", + "vite/client", + // Currently AudioWorkletProcessor type is missing, we need to add it manually through @types/audioworklet + // https://github.com/microsoft/TypeScript/issues/28308#issuecomment-1512509870 + "@types/audioworklet", + // @webgpu/types + // https://www.npmjs.com/package/@webgpu/types + "@webgpu/types" + ], + "allowJs": true, + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "noEmit": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "exclude": ["dist", "node_modules", "cypress"] +} diff --git a/packages/moonshine-web/uno.config.ts b/packages/moonshine-web/uno.config.ts new file mode 100644 index 0000000..0202cc5 --- /dev/null +++ b/packages/moonshine-web/uno.config.ts @@ -0,0 +1,17 @@ +import { defineConfig, mergeConfigs, presetWebFonts } from 'unocss' +import UnoCSSConfig from '../../uno.config' + +export default defineConfig(mergeConfigs([ + UnoCSSConfig, + { + presets: [ + presetWebFonts({ + fonts: { + sans: 'DM Sans', + serif: 'DM Serif Display', + mono: 'DM Mono', + }, + }), + ], + }, +])) diff --git a/packages/moonshine-web/vite.config.ts b/packages/moonshine-web/vite.config.ts new file mode 100644 index 0000000..abb1ece --- /dev/null +++ b/packages/moonshine-web/vite.config.ts @@ -0,0 +1,17 @@ +import { templateCompilerOptions } from '@tresjs/core' +import Vue from '@vitejs/plugin-vue' +import Unocss from 'unocss/vite' +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [ + Vue({ + // Other config + ...templateCompilerOptions, + }), + // https://github.com/antfu/unocss + // see uno.config.ts for config + Unocss(), + ], + worker: { format: 'es' }, +}) diff --git a/packages/whisper-webgpu/index.html b/packages/whisper-webgpu/index.html index 666cfef..1ce8f2a 100644 --- a/packages/whisper-webgpu/index.html +++ b/packages/whisper-webgpu/index.html @@ -4,11 +4,7 @@ Whisper Realtime (WebGPU) - - - - - +