Learn how to integrate SM-AI-MODELS APIs into your Node.js applications.
Installation
Codenpm install node-fetch form-data
Text-to-Speech
Codeconst fs = require('fs'); async function generateSpeech(text, voice = 'Yara', format = 'mp3') { const response = await fetch('http://localhost:9999/v1/audio/speech', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ input: text, voice: voice, response_format: format }) }); if (!response.ok) { throw new Error(`HTTP error: ${response.status}`); } return response.arrayBuffer(); } // Example usage async function main() { const audio = await generateSpeech('مرحباً بكم', 'Yara'); fs.writeFileSync('output.mp3', Buffer.from(audio)); console.log('Audio saved to output.mp3'); } main();
Speech Recognition
Codeconst fs = require('fs'); const FormData = require('form-data'); async function transcribeAudio(filePath) { const form = new FormData(); form.append('file', fs.createReadStream(filePath)); const response = await fetch('http://localhost:8088/v1/audio/transcriptions', { method: 'POST', body: form }); if (!response.ok) { throw new Error(`HTTP error: ${response.status}`); } const data = await response.json(); return data.text; } // Example usage async function main() { const text = await transcribeAudio('recording.wav'); console.log(`Transcribed: ${text}`); } main();
ES Modules Version
Codeimport fs from 'fs/promises'; import { createReadStream } from 'fs'; // TTS export async function speak(text, options = {}) { const { voice = 'Yara', format = 'mp3', speed = 1.0 } = options; const response = await fetch('http://localhost:9999/v1/audio/speech', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ input: text, voice, response_format: format, speed }) }); if (!response.ok) { const error = await response.json(); throw new Error(error.error?.message || 'TTS failed'); } return Buffer.from(await response.arrayBuffer()); } // ASR export async function transcribe(filePath) { const FormData = (await import('form-data')).default; const form = new FormData(); form.append('file', createReadStream(filePath)); const response = await fetch('http://localhost:8088/v1/audio/transcriptions', { method: 'POST', body: form }); if (!response.ok) { const error = await response.json(); throw new Error(error.error?.message || 'Transcription failed'); } const data = await response.json(); return data.text; } // Usage const audio = await speak('مرحباً بكم', { voice: 'Yara' }); await fs.writeFile('greeting.mp3', audio); const text = await transcribe('greeting.mp3'); console.log(text);
TypeScript
Codeinterface SpeechOptions { voice?: 'Yara' | 'Nouf' | 'Yara_en'; format?: 'mp3' | 'wav' | 'opus' | 'flac'; speed?: number; } interface TranscriptionResponse { text: string; } async function generateSpeech( text: string, options: SpeechOptions = {} ): Promise<Buffer> { const { voice = 'Yara', format = 'mp3', speed = 1.0 } = options; const response = await fetch('http://localhost:9999/v1/audio/speech', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ input: text, voice, response_format: format, speed }) }); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } return Buffer.from(await response.arrayBuffer()); } async function transcribeAudio(filePath: string): Promise<string> { const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('file', fs.createReadStream(filePath)); const response = await fetch('http://localhost:8088/v1/audio/transcriptions', { method: 'POST', body: form }); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const data: TranscriptionResponse = await response.json(); return data.text; }
Express.js Integration
Codeconst express = require('express'); const app = express(); app.use(express.json()); // TTS proxy endpoint app.post('/api/speak', async (req, res) => { try { const { text, voice = 'Yara', format = 'mp3' } = req.body; const response = await fetch('http://localhost:9999/v1/audio/speech', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ input: text, voice, response_format: format }) }); if (!response.ok) { return res.status(response.status).json(await response.json()); } const contentType = format === 'mp3' ? 'audio/mpeg' : `audio/${format}`; res.setHeader('Content-Type', contentType); const buffer = Buffer.from(await response.arrayBuffer()); res.send(buffer); } catch (error) { res.status(500).json({ error: error.message }); } }); app.listen(3000, () => { console.log('Server running on port 3000'); });
Last modified on
