armyan voice
This commit is contained in:
@@ -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
64
src/routes/voice.js
Normal 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;
|
||||||
Reference in New Issue
Block a user