00Boobs00's picture
Upload pages/api/tts.js with huggingface_hub
5749e20 verified
// API Proxy for Pocket TTS
export default async function handler(req, res) {
if (req.method !== 'POST') {
return res.status(405).json({ message: 'Method not allowed' });
}
const { text } = req.body;
try {
// Simulate processing
await new Promise(resolve => setTimeout(resolve, 1000));
// Create a minimal valid WAV file header + silence
// This ensures the audio player actually renders something
const sampleRate = 24000;
const numChannels = 1;
const bitsPerSample = 16;
const dataSize = sampleRate * numChannels * (bitsPerSample / 8) * 1; // 1 second of audio
const buffer = Buffer.alloc(44 + dataSize);
// RIFF chunk descriptor
buffer.write('RIFF', 0);
buffer.writeUInt32LE(36 + dataSize, 4);
buffer.write('WAVE', 8);
// fmt sub-chunk
buffer.write('fmt ', 12);
buffer.writeUInt32LE(16, 16); // Subchunk1Size
buffer.writeUInt16LE(1, 20); // AudioFormat (PCM)
buffer.writeUInt16LE(numChannels, 22);
buffer.writeUInt32LE(sampleRate, 24);
buffer.writeUInt32LE(sampleRate * numChannels * (bitsPerSample / 8), 28); // ByteRate
buffer.writeUInt16LE(numChannels * (bitsPerSample / 8), 32); // BlockAlign
buffer.writeUInt16LE(bitsPerSample, 34);
// data sub-chunk
buffer.write('data', 36);
buffer.writeUInt32LE(dataSize, 40);
// The rest of the buffer is already zeros (silence)
res.setHeader('Content-Type', 'audio/wav');
return res.status(200).send(buffer);
} catch (error) {
console.error('TTS Error:', error);
return res.status(500).json({ message: 'Internal Server Error' });
}
}