require 'net/http'
require 'uri'
require 'json'

def speak(text, speaker)
puts text, speaker
uri = URI.parse("http://localhost:50021/audio_query")
uri.query = URI.encode_www_form({ "text" => text, "speaker" => speaker })
headers = {
"Content-Type" => "application/json",
"User-Agent" => "vox-client:0.1",
}
response = Net::HTTP.post(uri, "", headers)
case response
when Net::HTTPSuccess
result = JSON.parse(response.body)
# puts result
else
puts "audio query error: #{response}"
end
uri = URI.parse("http://localhost:50021/synthesis")
uri.query = URI.encode_www_form({ "speaker" => speaker })
response = Net::HTTP.post(uri, response.body, headers)
if response.code == '200'
File.open("output#{speaker}.wav", "wb") do |f|
f.write(response.body)
end
else
puts "synthesis response error"
end
end

query_text = "あなたの名前はなんですか"
uri = URI.parse("http://localhost:11434/api/generate")
http = Net::HTTP.new(uri.host, uri.port)
params = { model: "gemma3:4b", stream: false, prompt: query_text }
request = Net::HTTP::Post.new(uri.path)
request["Content-Type"] = "application/json"
request.body = params.to_json

speak(query_text, 1)

response = http.request(request)

case response
when Net::HTTPSuccess
result = JSON.parse(response.body)
else
puts "ollama error: #{response.code} #{response.message}"
end

speak(result['response'] .strip, 2)

system("powershell -ExecutionPolicy Bypass -command .\sound.ps1")

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です