mirror of
https://github.com/OpenSquawk/OpenSquawk
synced 2026-06-27 02:26:39 +08:00
Fix remaining German comment
This commit is contained in:
@@ -77,11 +77,11 @@ function decodeAudioPayload(encoded: string): Buffer {
|
||||
return buffer;
|
||||
}
|
||||
|
||||
// Audio zu WAV konvertieren für bessere Whisper-Kompatibilität
|
||||
// Convert audio to WAV for better Whisper compatibility
|
||||
async function convertToWav(inputPath: string, outputPath: string) {
|
||||
await sh("ffmpeg", [
|
||||
"-y", "-i", inputPath,
|
||||
"-ar", "16000", // 16kHz für Whisper
|
||||
"-ar", "16000", // 16 kHz for Whisper
|
||||
"-ac", "1", // Mono
|
||||
"-f", "wav",
|
||||
outputPath
|
||||
@@ -104,11 +104,11 @@ export default defineEventHandler(async (event) => {
|
||||
const tmpAudioWav = join(tmpdir(), `ptt-wav-${id}.wav`);
|
||||
|
||||
try {
|
||||
// 1. Audio aus Base64 dekodieren und speichern
|
||||
// 1. Decode audio from base64 and save
|
||||
const audioBuffer = decodeAudioPayload(body.audio);
|
||||
await writeFile(tmpAudioInput, audioBuffer);
|
||||
|
||||
// 2. Zu WAV konvertieren falls nötig (nur wenn FFmpeg verfügbar)
|
||||
// 2. Convert to WAV if needed (only when FFmpeg is available)
|
||||
let audioFileForWhisper = tmpAudioInput;
|
||||
if (format !== 'wav') {
|
||||
try {
|
||||
@@ -119,7 +119,7 @@ export default defineEventHandler(async (event) => {
|
||||
}
|
||||
}
|
||||
|
||||
// 3. OpenAI Whisper für Transkription
|
||||
// 3. OpenAI Whisper for transcription
|
||||
const openai = getOpenAIClient();
|
||||
const transcription = await openai.audio.transcriptions.create({
|
||||
file: createReadStream(audioFileForWhisper),
|
||||
@@ -143,7 +143,7 @@ export default defineEventHandler(async (event) => {
|
||||
let decision: PTTResponse['decision'];
|
||||
|
||||
if (shouldAutoDecide) {
|
||||
// 4. Direkt LLM Decision aufrufen mit transkribiertem Text
|
||||
// 4. Call the LLM decision directly with the transcribed text
|
||||
const decisionInput = {
|
||||
...body.context,
|
||||
pilot_utterance: transcribedText
|
||||
@@ -191,7 +191,7 @@ export default defineEventHandler(async (event) => {
|
||||
return result;
|
||||
|
||||
} catch (error: any) {
|
||||
// Cleanup bei Fehler
|
||||
// Cleanup on error
|
||||
await rm(tmpAudioInput).catch(() => {});
|
||||
await rm(tmpAudioWav).catch(() => {});
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ export default defineEventHandler(async (event) => {
|
||||
let actualMime = mime;
|
||||
|
||||
if (useSpeaches) {
|
||||
// Speaches (bevorzugt klein: MP3, alternativ FLAC/WAV/PCM)
|
||||
// Speaches (prefer compact: MP3, otherwise FLAC/WAV/PCM)
|
||||
const baseUrl = runtimeConfig.speachesBaseUrl || "";
|
||||
const model = runtimeConfig.speechModelId || "speaches-ai/piper-en_US-ryan-low";
|
||||
if (!baseUrl) {
|
||||
@@ -169,16 +169,16 @@ export default defineEventHandler(async (event) => {
|
||||
}
|
||||
audioBuffer = await speachesTTS(normalized, voice, model, fmt, baseUrl);
|
||||
modelUsed = model;
|
||||
// Server liefert korrektes Format gemäß response_format
|
||||
// Server returns the correct format according to response_format
|
||||
actualMime = fmtToMime(fmt);
|
||||
} else if (usePiper) {
|
||||
// Lokaler Piper
|
||||
// Local Piper
|
||||
audioBuffer = await piperTTS(normalized, voice, runtimeConfig.piperPort);
|
||||
modelUsed = "piper-local";
|
||||
// Piper liefert WAV
|
||||
// Piper returns WAV
|
||||
actualMime = "audio/wav";
|
||||
} else {
|
||||
// OpenAI (Fallback)
|
||||
// OpenAI (fallback)
|
||||
const tts = await normalize.audio.speech.create({
|
||||
model: TTS_MODEL,
|
||||
voice,
|
||||
@@ -191,7 +191,7 @@ export default defineEventHandler(async (event) => {
|
||||
actualMime = "audio/wav";
|
||||
}
|
||||
|
||||
// Optional speichern
|
||||
// Optional persistence
|
||||
// await ensureDir(baseDir);
|
||||
// await writeFile(fileOut, audioBuffer);
|
||||
const meta = {
|
||||
|
||||
Reference in New Issue
Block a user