Mercurial Hosting > lang
comparison 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 |
comparison
equal
deleted
inserted
replaced
11:003a90ce72d7 | 12:2d4b3f003ec2 |
---|---|
1 local Luan = require "luan:Luan.luan" | |
2 local error = Luan.error | |
3 local Parsers = require "luan:Parsers.luan" | |
4 local xml_encode = Parsers.xml_encode or error() | |
5 local Io = require "luan:Io.luan" | |
6 local uri = Io.uri or error() | |
7 local Http = require "luan:http/Http.luan" | |
8 local Config = require "site:/private/Config.luan" | |
9 | |
10 | |
11 local region = Config.azure_tts.region or error() | |
12 local url = "https://"..region..".tts.speech.microsoft.com/cognitiveservices/v1" | |
13 local headers = { | |
14 ["Ocp-Apim-Subscription-Key"] = Config.azure_tts.key or error() | |
15 ["Content-Type"] = "application/ssml+xml" | |
16 ["X-Microsoft-OutputFormat"] = "audio-16khz-128kbitrate-mono-mp3" | |
17 } | |
18 | |
19 local function text_to_speech(lang,text) | |
20 local xml = `%> | |
21 <speak version='1.0' xml:lang='<%=lang%>'> | |
22 <voice name='en-US-BrandonMultilingualNeural'> | |
23 <%= xml_encode(text) %> | |
24 </voice> | |
25 </speak> | |
26 <% ` | |
27 local options = { | |
28 method = "POST" | |
29 headers = headers | |
30 content = xml | |
31 } | |
32 return uri(url,options) | |
33 end | |
34 | |
35 return function() | |
36 local text = Http.request.parameters.text or error() | |
37 local input = text_to_speech("ja-JP",text) | |
38 Http.response.binary_writer().write_from(input) | |
39 end |