Spaces:
Sleeping
Sleeping
| // 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' }); | |
| } | |
| } |