WSLのUbuntuでyoutube音楽をGoogleHomeで操作する

# はじめに
はじめての投稿です。よろしくお願いします。
●youtube音楽を声で操作し、PCスピーカで再生できるようにする。
【操作例】GoogleHomeに「youtube音楽　山下達郎　クリスマスイブ」と話す
#環境
●Windows10 HOMEのPCにWSLのubuntuをインストールする。
●ubuntuでnpm,node.js,firebase,youtube-dl,mplayerをインストールする
●iftttでGoogleアシスタント(this)でfirebaseにテキストをPUTする(that)ように設定する
●firebaseのDatabaseはgooglehome-wordにしています
●WSLのubuntuでpulseaudioでPCのスピーカを使うようにする
●Windows側でpulseaudioサーバのインストールが必要です
　https://www.cendio.com/thinlinc/download の 「Client Bundle」のリンクからダウンロードできます

# プログラム(node.js)
●firebaseとyoutubeのKeyは自分のKeyに置き換えてください
●Googlehomeからのテキストが「停止」、「止めて」以外の場合、youtube音楽を検索して再生します。

``` javascript
const firebase = require("firebase");
var iconv = require('iconv-lite');
var value1 ;
var str1 = '" | sed -e "s/^/\'/" -e '
var str2 = '"s/$/\'/" | xargs -n1 mplayer'
var command ;

//firebase config
var config = {
    apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxx",
    authDomain: "xxxxxxxxxx.firebaseapp.com",
    databaseURL: "https://xxxxxxxxxx.firebaseio.com",
    projectId: "xxxxxxxxxx",
    storageBucket: "xxxxxxxx.appspot.com",
    messagingSenderId: "xxxxxxxxxx"
};
firebase.initializeApp(config);

const Youtube = require('youtube-node');
const youtube = new Youtube();
youtube.setKey('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');

//jsonからvalueに一致する値取得
const getJsonData = (value, json) => {
  for (var word in json)  if (value == word) return json[word]
  return json["default"]
}

//database更新時
const path = "/googlehome"
const key = "word"
const db = firebase.database()
db.ref(path).on("value", function(changedSnapshot) {
//値取得
let value = changedSnapshot.child(key).val()
if (!value) return
console.log(value);
var keyword = value.replace(/ /g,"");

//コマンド
const STOP1 = "pkill -KILL -f mplayer";

if(value === "停止"){
  command = STOP1
} else if(value === "止め て"){
  command = STOP1
} else {
  command = '未定義'
}
console.log(command)

//コマンド実行
if(command === STOP1){
  var exec = require('child_process').exec;
  exec(command, {maxBuffer: 1000*1024}, function(error, stdout, stderr) {
    if (error !== null) {
      console.log('Exec error: ' + error);
    }
  });
}
if(command === '未定義') {
  var exec = require('child_process').exec;
  exec(STOP1, {maxBuffer: 1000*1024}, function(error, stdout, stderr) {
    if (error !== null) {
      console.log('Exec error: ' + error);
    }
  });
  play_youtube(keyword);
}
//firebase clear
db.ref(path).set({[key]: ""});
})

function play_youtube(keyword) {
  youtube.search(keyword, 1, {'type':'video','videoCategoryId':10} , function(error, result) {
    if (error) {
      console.log(error);
      return ;
    }
    //console.log(JSON.stringify(result, null, 2));
    for (const item of result.items) {
      if (item.id.videoId) {
        var exec = require('child_process').exec;
        command = "youtube-dl 'https://www.youtube.com/watch?v="+item.id.videoId+"' -o - | mplayer - -novideo"
        console.log(command);
        exec(command,  {maxBuffer: 40000*1024},function(error, stdout, stderr) {
          if (error !== null) {
            console.log('exec error: '+error);
          }
        });
      }
    }
  });
}
```
# まとめ
●お気に入りのPCスピーカでyoutubue音楽が流せます
●プログラムはラズパイでも同様に動作しますが、youtube-dlの動作が遅く、再生開始に少々時間がかかります。
●次回、GoogleHomeでPC内音楽データを操作する記事を投稿予定です
# 参考資料
[GoogleHomeとIFTTTとFirebaseとラズパイとnode.jsでyoutubeの音を流す](https://qiita.com/nakagawa1017/items/2a8dfc215210ff5a2ca7)