やよいの日記

スプラトゥーンとプログラミング関連

Splatoon2 プレイ環境について

ひょんなことから、Amazonアソシエイトに登録したのでAmazonリンクの貼り方練習含めて
プレイ環境を書いてみる。

使っているヘッドセット

SteelSeries Arctis Pro + Game DAC

ミキサー付きのヘッドセットで、5.1ch対応。
残念ながらSwitchの5.1ch には対応していないことが
買った後にわかった。
PS4なら5.1chが楽しめるらしい。
ミキサーがついているので、Discordのボイチャとプレイ音は簡単にミックスできる。
あと、メガネをつけていても痛くならないのがすごい良かった。
でも Switch で使うためには HDMIスプリッタとHDMIと光ケーブルの変換器が必要。

HDMIスプリッタ

変換器


キャプボ
AVerMedia Live Gamer Portable AVT-C875

とりあえずで買ってみたやつ。
720p でしか録画できなかったり、30FPSでしか録画できなかったりするけど
やりたいことは一通りできる感じ。
もう1ランク上のを買えばよかったと少し後悔。

モニターはもう生産停止みたいなので、省略。

こんな感じです。何かの参考になれば。

Amazon Polly を使って読み上げdiscord botを作った話(4)

ハマったことの解決策など。
動作環境はCentOS6

Q.discord.js でエラーが出て動かない
A.Node.jsのバージョンが低いとでる。
NVMとかで最新にすると動く。

Q.fffmpeg のエラーが出る。
A.fffmpegをyumとかで入れる。

Q.node-opus が入らない。
A.gcc が古いとなる。
下記ページを参考に新しめのを入れる
thr3a.hatenablog.com

これで晴れて動かすことができますよ。
やったね。

Amazon Polly を使って読み上げdiscord botを作った話(3)

Amazon Polly を使って読み上げdiscord botを作った話(2) - やよいの日記
の続き。

いよいよ読み上げ部分の作成。
その前に、AWSサービスに登録して、IAMユーザーでAmazon Pollyのユーザーを作っとく。

    const AWS     = require('aws-sdk');
    const Stream  = require('stream');

    const Polly  = new AWS.Polly({
        signatureVersion: 'v4',
        region: 'us-east-2',
        accessKeyId: 'IAMユーザーのアクセスキー',
        secretAccessKey: 'IAMユーザーのシークレットキー'
    });



    if (voice_ch) {
	if (message.channel.name != text_ch.name) {
	    return;
	}

	if (message.content) {
	    let text = message.content;
	    let params = {
		'Text': text,
		'OutputFormat': 'mp3',
		'VoiceId': 'Mizuki'};

	    Polly.synthesizeSpeech(params, (err, data) => {
		if (err) {
		    console.log(err.code)
		} else if (data) {
		    if (data.AudioStream instanceof Buffer) {
			let buffer_stream = new Stream.PassThrough();
			buffer_stream.end(data.AudioStream);
			conn.play(buffer_stream);
		    }
		}
	    });
	}
    }

Polly.synthesizeSpeech の部分が音声を取得するところ。
取得した音声データはdata.AudioStreamに入っているけど、そのままじゃ使えないので
Stream.PassThrough をつかってリーダブルバッファーに変換してあげる。

これでとりあえず音声を流すことができました。パチパチ。

でも実際に流してみるとたぶん ffmpeg のエラーが出てうまく流せないと思う。
その辺はまた後日解説いたします。

Amazon Polly を使って読み上げdiscord botを作った話(2)

Amazon Polly を使って読み上げdiscord botを作った話(1) - やよいの日記
の続き

VCに参加するところまではできたので、次は離脱を作る。

    if (voice_ch) {
	if (message.channel.name != text_ch.name) {
	    return;
	}
	// VCチャンネルの切断
	if (message.content === '!!e') {

	    let text = 'またねー';
	    text_ch.send(text)
		.then(message => console.log(`Sent message: ${text}`))
		.catch(console.error);
	    
	    voice_ch.leave();
	    voice_ch = undefined;
	    text_ch  = undefined;
	    conn     = undefined;
	    return;
	}
    }

こんな感じ。
voice_ch.leave() でVCから抜けられる。
VCに入っていて、(voice_ch が undefined ではないとき)、 "!!e" コマンドを受けたときに
動作するようにしてある。
各種チャンネルの変数はこのタイミングでundefinedにしておく。(後々のため)

これでVCに出たり入ったりが自由にできるようになりました。

明日はメインの読み上げ部分やります。

Amazon Polly を使って読み上げdiscord botを作った話(1)

Amazon Polly という AWS のサービスが日本語読み上げしてくれるらしい。
と聞いて、node.jsで頑張って作ってみた。

まずは discord 側、VCに入っている人に呼ばれたらその人のところに行く処理。

const Discord = require('discord.js');
const client = new Discord.Client();

const token = "botのトークン";

client.on('ready', () => {
    console.log('ready...');
});


let text_ch;
let voice_ch;
let conn;

client.on('message', message => {

    // VCチャンネルの召喚
    if (message.content === '!!s') {
	text_ch = message.channel;
	voice_ch = message.member.voice.channel;

	let text = '';
	
	if (voice_ch == undefined) {
	    text = 'VCに入ってから使ってね';
	    text_ch.send(text)
		.then(message => console.log(`Sent message: ${text}`))
		.catch(console.error);
	    return;
	}

	voice_ch.join()
	    .then(connection =>{
		conn = connection;
	    })
	    .catch(console.error);

	text = 'きたよー';
	text_ch.send(text)
	    .then(message => console.log(`Sent message: ${text}`))
	    .catch(console.error);
	
	return;
    }
});

client.login(token);

こんな感じで、"!!s"って呼ばれたVCに入れる。
"!!s"コマンドを打ったテキストチャンネルを保存しているのは、読み上げるときに別のテキストチャンネルを読まなくするため。

とりあえず今日はここまで。