From a0d98b95e52b407a2d220c6b6056a3de4d4fd2a8 Mon Sep 17 00:00:00 2001 From: devmhand Date: Mon, 2 Mar 2026 17:51:35 +0400 Subject: [PATCH] armyan voice --- src/routes/upload.js | 4 +-- src/routes/voice.js | 64 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 src/routes/voice.js diff --git a/src/routes/upload.js b/src/routes/upload.js index dffd27a..20a3c90 100644 --- a/src/routes/upload.js +++ b/src/routes/upload.js @@ -82,9 +82,7 @@ router.post( } ); -router.post('/voice', async(req, res) => { - -}) + export default router; diff --git a/src/routes/voice.js b/src/routes/voice.js new file mode 100644 index 0000000..5c69577 --- /dev/null +++ b/src/routes/voice.js @@ -0,0 +1,64 @@ +import { Router } from "express"; +import multer from "multer"; +import path from "path"; +import fs from "fs"; +const router = Router(); + +import { GoogleGenAI, createUserContent, createPartFromUri } from "@google/genai"; +import dotenv from "dotenv"; +dotenv.config(); + +async function saveWaveFile( + filename, + pcmData, + channels = 1, + rate = 24000, + sampleWidth = 2, +) { + return new Promise((resolve, reject) => { + const writer = new wav.FileWriter(filename, { + channels, + sampleRate: rate, + bitDepth: sampleWidth * 8, + }); + + writer.on('finish', resolve); + writer.on('error', reject); + + writer.write(pcmData); + writer.end(); + }); +} + +async function fawatafa() { + const response = await ai.models.generateContent({ + model: "gemini-2.5-flash-preview-tts", + contents: [{ parts: [{ text: `Say aggresive: А перекинул я этот пост, потому что его Саша переслал. И вот вдумайся: Саше 30 лет, и вот на него это полностью работает. То есть он верит, что можно заставить Дурова открыть представительство в России, и это снимет к нему все вопросы, и Телеграм оставят незаблокированным` }] }], + config: { + responseModalities: ['AUDIO'], + speechConfig: { + voiceConfig: { + prebuiltVoiceConfig: { voiceName: 'Leda' }, + }, + }, + }, + }); + + const data = response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data; + const audioBuffer = Buffer.from(data, 'base64'); + + const fileName = 'outMarat5.wav'; + await saveWaveFile(fileName, audioBuffer); +} + +router.post('/voice', async(req, res) => { + try{ + + }catch(err){ + console.error('Ошибка при обработке голосового сообщения:', err); + res.status(500).json({ message: 'Ошибка при обработке голосового сообщения' }); + } +}) + + +export default router; \ No newline at end of file