Mercurial Hosting > lang
view src/tts.mp3.luan @ 37:d72b1dff01c9
minor
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 09 Aug 2025 05:57:34 +0900 |
parents | 1e7d855afde3 |
children |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local Parsers = require "luan:Parsers.luan" local xml_encode = Parsers.xml_encode or error() local Io = require "luan:Io.luan" local uri = Io.uri or error() local Http = require "luan:http/Http.luan" local Config = require "site:/private/Config.luan" -- https://learn.microsoft.com/en-us/azure/ai-services/speech-service/index-text-to-speech local region = Config.azure_tts.region or error() local url = "https://"..region..".tts.speech.microsoft.com/cognitiveservices/v1" local headers = { ["Ocp-Apim-Subscription-Key"] = Config.azure_tts.key or error() ["Content-Type"] = "application/ssml+xml" ["X-Microsoft-OutputFormat"] = "audio-16khz-128kbitrate-mono-mp3" } local function text_to_speech(lang,voice,text) local xml = `%> <speak version='1.0' xml:lang='<%=lang%>'> <voice name='<%=voice%>'> <%= xml_encode(text) %> </voice> </speak> <% ` local options = { method = "POST" headers = headers content = xml } return uri(url,options) end return function() local lang = Http.request.parameters.lang or error() local voice = Http.request.parameters.voice or error() local text = Http.request.parameters.text or error() local input = text_to_speech(lang,voice,text) Http.response.binary_writer().write_from(input) end