Google HomeでViceTextによる音声の変更
概要
本記事は、書きかけです。ViceTextを用いて、Google Homeに喋らせた時の内容のメモとして 残そうと思います。
前提
- Google Homeが利用可能な環境
- ガラケーとそのメールが利用可能な環境
- Raspberry pi などで、「Google Homeの喋らせ方」が設定済み
インストール
npm install voicetext
npm install fs
npm install express
npm install body-parser
npm install -g forever
npm install fs
npm install express
npm install body-parser
npm install -g forever
VoiceTextのAPIの取得
設定内容
VoiceTextWriter.jsの内容
var fs = require('fs');
var VoiceText = require('voicetext');
//APIキーを入力。
var voice = new VoiceText('xxxxxxxxxxxxxxxxxxx');
var OUT_PATH = '/home/pi/homebot/voice/_temp.wav'
//IPアドレスを入力する。
var OUTPUT_URL = 'http://192.168.x.xx:9000/_temp.wav';
// set spearker at random
var array = [voice.SPEAKER.HIKARI, voice.SPEAKER.HARUKA,voice.SPEAKER.TAKERU,voice.SPEAKER.SHOW,voice.SPEAKER.BEAR,voice.SPEAKER.SANTA];
var mySpeaker = array[Math.floor(Math.random() * array.length)];
// set emotion at random
var array2 = [voice.EMOTION.HAPPINESS, voice.EMOTION.ANGER,voice.EMOTION.SADNESS];
var myEmotion = array2[Math.floor(Math.random() * array2.length)];
console.log("Speaker:" + mySpeaker + ", Emotion:" + myEmotion);
class VoiceTextWriter{
convertToText(text){
return new Promise(function(resolve,reject){
voice
.speaker(mySpeaker)
.emotion(myEmotion)
.emotion_level(2) // 感情レベル。1〜4を指定。数値が大きいほど感情が強。
.pitch(95) // 50から200(%)まで。値が小さいほど低い音になります。
.speed(95) // 50から400(%)まで。値が小さいほど遅い話し方になります。
.volume(150) // 50から200(%)まで。値が小さいほど小さい音になります。
.speak(text, function(e, buf){
if(e){
console.error(e);
reject(e);
}else{
fs.writeFileSync(OUT_PATH, buf, 'binary');
resolve(OUTPUT_URL);
}
});
});
}
}
module.exports = VoiceTextWriter;
var VoiceText = require('voicetext');
//APIキーを入力。
var voice = new VoiceText('xxxxxxxxxxxxxxxxxxx');
var OUT_PATH = '/home/pi/homebot/voice/_temp.wav'
//IPアドレスを入力する。
var OUTPUT_URL = 'http://192.168.x.xx:9000/_temp.wav';
// set spearker at random
var array = [voice.SPEAKER.HIKARI, voice.SPEAKER.HARUKA,voice.SPEAKER.TAKERU,voice.SPEAKER.SHOW,voice.SPEAKER.BEAR,voice.SPEAKER.SANTA];
var mySpeaker = array[Math.floor(Math.random() * array.length)];
// set emotion at random
var array2 = [voice.EMOTION.HAPPINESS, voice.EMOTION.ANGER,voice.EMOTION.SADNESS];
var myEmotion = array2[Math.floor(Math.random() * array2.length)];
console.log("Speaker:" + mySpeaker + ", Emotion:" + myEmotion);
class VoiceTextWriter{
convertToText(text){
return new Promise(function(resolve,reject){
voice
.speaker(mySpeaker)
.emotion(myEmotion)
.emotion_level(2) // 感情レベル。1〜4を指定。数値が大きいほど感情が強。
.pitch(95) // 50から200(%)まで。値が小さいほど低い音になります。
.speed(95) // 50から400(%)まで。値が小さいほど遅い話し方になります。
.volume(150) // 50から200(%)まで。値が小さいほど小さい音になります。
.speak(text, function(e, buf){
if(e){
console.error(e);
reject(e);
}else{
fs.writeFileSync(OUT_PATH, buf, 'binary');
resolve(OUTPUT_URL);
}
});
});
}
}
module.exports = VoiceTextWriter;
index.jsの内容
#!/usr/local/bin/node
const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const app = express();
const serverPort = 9000;
const urlencodedParser = bodyParser.urlencoded({ extended: false });
// CORSを許可する
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.use(express.static(__dirname + '/voice'));
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(serverPort, () => {
console.log(`Start api-server. Port is ${serverPort}`);
})
const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const app = express();
const serverPort = 9000;
const urlencodedParser = bodyParser.urlencoded({ extended: false });
// CORSを許可する
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.use(express.static(__dirname + '/voice'));
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(serverPort, () => {
console.log(`Start api-server. Port is ${serverPort}`);
})
google-home-notifier-voicetext.jsの作成
Google-home-notifier.jsをコピーし、 Google-home-notifier-voicetext.jsを作成した。 その上で、2行を追加する。 (参考サイトは追記予定)
var Client = require('castv2-client').Client;
var DefaultMediaReceiver = require('castv2-client').DefaultMediaReceiver;
var mdns = require('mdns');
var browser = mdns.createBrowser(mdns.tcp('googlecast'));
//var deviceAddress = 'Google HomeのIPアドレス';
var deviceAddress;
var language;
//↓この2行を追加
var VoiceTextWriter = require('./VoiceTextWriter');
var voiceTextWriter = new VoiceTextWriter();
以下略
var DefaultMediaReceiver = require('castv2-client').DefaultMediaReceiver;
var mdns = require('mdns');
var browser = mdns.createBrowser(mdns.tcp('googlecast'));
//var deviceAddress = 'Google HomeのIPアドレス';
var deviceAddress;
var language;
//↓この2行を追加
var VoiceTextWriter = require('./VoiceTextWriter');
var voiceTextWriter = new VoiceTextWriter();
以下略
EXPRESSの起動
下記にてMP3を認識させる必要あり? https://qiita.com/taaaaaaak22/items/abfb9f2a672689c20505下記を参考にexpressを起動
https://github.com/taaaaaaak22/google-home/blob/master/api-server/index.js
コメント
コメントを投稿