3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

INTECAdvent Calendar 2021

Day 14

Google Home MiniがSiriと会話へ?【2021年版】

Posted at

#はじめに
2021年もアドベントカレンダーの季節が来ました。昨年は参加しませんでしたので、2年ぶりです。
今年は、5Gやドローン界隈で人気がある陸上特殊無線技士の資格に挑戦しました。四半世紀前に取得した4アマは、ラミネート加工の従事者免許証でしたが、いまは立派なんですね。

さて、今回はGoogle Home MiniでSiriへ呼びかけてみます。
Google Home Miniに「Hey Siri, いまの天気は?」と発話させ、
Siriが「いまは曇っていて、気温は14度です」などと回答することを期待します。
Qiitaも読み物系が人気のようですが、技術メモで投稿します。

#必要な機器
・Google Home Mini(あらかじめ、Macと同じWi-Fiに接続しておきます。)
・MacBook
・iPhone(Siri用)
・Wi-Fiルーター

#必要なソフトウェア環境
・macOS Monterey 12.0.1
・Python 3.9.9
・ffmpeg 4.4.1
・pychromecast

#方針
・Macで音声ファイルを用意する
・Sayコマンドで「Hey Siri, いまの天気は?」とaiffファイルを生成し、ffmpegでmp3ファイルに変換する
・Mac内にWebサーバーを起動し、mp3ファイルを配置する(httpアクセス許可)
・iPhoneでSiriを起動しておく
・pythonスクリプトでGoogle Home miniに発話させる
・SiriがGoogle Homeからの呼びかけに応える

#手順
では、早速やってみましょう。
##音声ファイルの作成
Macのターミナルで、Sayコマンドを使って、Kyokoに発話させて、voice.aiffファイル(ファイル名はなんでもいいです)に保存します。

% say -v kyoko "Hey Siri、いまの天気は?" -o voice.aiff

Macのターミナルで、Sayコマンドを使って、このファイルを再生してみましょう。

% play voice.aiff

音声と共にこんな感じで表示されます。

% play voice.aiff

voice.aiff:

 File Size: 98.3k     Bit Rate: 368k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit   
Samplerate: 22050Hz      
Replaygain: off         
  Duration: 00:00:02.14  

In:100%  00:00:02.14 [00:00:00.00] Out:94.2k [      |      ]        Clip:0    
Done.

##音声ファイル形式の変換(aiff → mp3)
このaiff形式(リニアPCM、非圧縮)ファイルをGoogle Home miniが再生できるmp3形式(MPEG-1 Audio Layer-3、非可逆圧縮)ファイルに変換します。
ffmpegを使用します。
インストールされていない場合は、home brewであらかじめ入れてください。(すでに使っている場合は省略してください)

% brew install ffmpeg

ffmpegでaiff形式をmp3形式に変換するコマンドは次のとおりです。

% ffmpeg -i voice.aiff voice.mp3

これでmp3に変換できました。今回の場合、ファイルサイズは、1/10程度になります。
再生できるか確かめてみましょう。

% play voice.mp3

voice.mp3:

 File Size: 9.00k     Bit Rate: 32.8k
  Encoding: MPEG audio    
  Channels: 1 @ 16-bit   
Samplerate: 22050Hz      
Replaygain: off         
  Duration: 00:00:02.19  

In:100%  00:00:02.19 [00:00:00.00] Out:96.8k [      |      ]        Clip:0    
Done.

再生できればOKです。

##ローカルWebサーバーの起動
次に、このvoice.mp3ファイルをwebサーバーにアップロードします。
まず、Macに内蔵されたWebサーバーを起動します。

% sudo apachectl start

このwebサーバーのIPアドレスを調べます。

% ifconfig

en0:をみると

inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255

のように表示されました。192.168.1.100がIPアドレスです。

ブラウザを起動して、URLに「http://192.168.1.100/」と入力して、「It works!」と表示されれば起動を確認できます。

このwebサーバーのドキュメントルートは、

/Library/WebServer/Documents/

にあります。
そこでこの下に移動し、サブディレクトリを作成して、voice.mp3ファイルをコピーして配置します。

% cd /Library/WebServer/Documents
% sudo mkdir fuga
% cd fuga
$ sudo cp ~/voice.mp3 .

(↑voice.mp3のパスが~/voice.mp3だった場合の例)

ブラウザで、「http://192.168.1.100/fuga/voice.mp3」を開きます。
音が再生できれば完了です。

※MacのFirewallをOFFにするか、外部からポート80へアクセスできるように設定変更をしておいてください。

##Google Home Miniでの音声ファイル再生
次に、Google Home Miniでこのvoice.mp3を再生するための作業です。

Macにpychromecastをインストールします。

% pip3 install pychromecast --user

pythonのプログラムを書きます。
今回、Google Homeの名前は、「Office1」としました。

googlehome.py
#!/usr/bin/python3
# coding:utf-8
import pychromecast
import sys

def main():
    # Google Homeを検索する
    chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[             "office1"])
    # castデバイスが見つからない場合、終了
    if len(chromecasts) == 0:
        print("Google Homeが見つかりません")
        sys.exit(1)

    # 最初に見つかったもの(同名のデバイスが複数あった場合)
    googleHome = chromecasts[0]

    # 発話
    googleHome.wait()
    mc = googleHome.media_controller
    voice_url = "http://192.168.1.100/fuga/voice.mp3"

    # 他の音楽を再生中の場合
    if mc.status.player_is_playing:
        print("音楽再生中。停止します。")
        mc.stop()
        mc.block_until_active(timeout=30)

    # 音声再生
    print("再生中", voice_url)
    mc.play_media(voice_url, "audio/mp3")


if __name__ == "__main__":
    main()

このコードを実行します。

% python3 googlehome.py
再生中 http://192.168.1.100/fuga/voice.mp3

と表示し、Google Home miniから声が流れます。

##Siriは天気を教えてくれるか?
iPhoneでSiriを起動し、
上記のコードを実行して、Google Home Miniが「Hey Siri, いまの天気は?」と発話し、
Siriが天気を答えてくれれば大成功です。

screen_siri_01.jpg

こんな感じで答えてくれました。

#おわりに
今回は、Google Home MiniとMacを使って発話し、iPhoneのSiriと会話できるかやってみました。
残念なことに、Google Home Miniは、マイクとして使うことはできないようで、双方向の会話まではできませんでした。

機会があればまたお読みください。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?