armyan voice

This commit is contained in:
2026-03-02 17:51:35 +04:00
parent d8046cc88d
commit a0d98b95e5
2 changed files with 65 additions and 3 deletions

View File

@@ -82,9 +82,7 @@ router.post(
} }
); );
router.post('/voice', async(req, res) => {
})
export default router; export default router;

64
src/routes/voice.js Normal file
View File

@@ -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;