Mercurial Hosting > lang
diff src/tts.mp3.luan @ 12:2d4b3f003ec2
tts
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 24 Jul 2025 22:14:49 -0600 |
parents | |
children | f5425a3c1898 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/tts.mp3.luan Thu Jul 24 22:14:49 2025 -0600 @@ -0,0 +1,39 @@ +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" + + +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 text = Http.request.parameters.text or error() + local input = text_to_speech("ja-JP",text) + Http.response.binary_writer().write_from(input) +end