Mercurial Hosting > lang
view src/tts.mp3.luan @ 26:d3f5448743bf
add doc links
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 01 Aug 2025 17:12:03 -0600 |
parents | f5425a3c1898 |
children | 1e7d855afde3 |
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,text) local xml = `%> <speak version='1.0' xml:lang='<%=lang%>'> <voice name='en-US-BrandonMultilingualNeural'> <%= 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 text = Http.request.parameters.text or error() local input = text_to_speech(lang,text) Http.response.binary_writer().write_from(input) end