amdgpuにファイルに入ったEDIDを喰わせる手順のメモ

我が家のディスプレイの1つにEDIDをちゃんと返さない不調があるので、ビデオカードを交換したときに対応したメモ。

適当なディレクトリにedidが入ったファイルを置く

# mkdir /lib/firmware/edid
# cp benq-edid.bin /lib/firmware/edid

initramfsにファイルを追加する設定

/etc/dracut.conf.d/99-local.conf

install_items+="/lib/firmware/edid/benq-edid.bin"

EDIDファイルを利用する設定

EDIDがない状態でdmesgを見るとエラーを出力しているのでポートの名前(DVI-D-1)がわかる。

エラーの例

Jul 13 14:36:31 dragon kernel: amdgpu 0000:01:00.0: DVI-D-1: EDID is invalid:
Jul 13 14:36:31 dragon kernel:         [00] BAD  a1 a1 ff 01 a1 ff ff 00 09 d1 0a 78 45 54 00 00
Jul 13 14:36:31 dragon kernel:         [00] BAD  10 12 01 03 80 34 20 78 2e c5 c4 a3 57 4a 9c 23
Jul 13 14:36:31 dragon kernel:         [00] BAD  12 4f 52 a5 6b 80 71 00 81 00 95 00 81 80 b3 00
Jul 13 14:36:31 dragon kernel:         [00] BAD  a9 40 d1 00 01 01 28 3c 80 a0 70 b0 23 40 30 20
Jul 13 14:36:31 dragon kernel:         [00] BAD  36 00 07 44 21 00 00 1a 00 00 00 ff 00 45 34 38
Jul 13 14:36:31 dragon kernel:         [00] BAD  30 35 30 31 37 53 4c 30 0a 20 00 00 00 fd 00 32
Jul 13 14:36:31 dragon kernel:         [00] BAD  55 1f 5e 11 00 0a 20 20 20 20 20 20 00 00 00 fc
Jul 13 14:36:31 dragon kernel:         [00] BAD  00 42 65 6e 51 20 47 32 34 30 30 57 0a 20 00 06
Jul 13 14:36:31 dragon kernel: [drm:dc_link_detect [amdgpu]] *ERROR* No EDID read.

ディスプレイとEDIDの対応づけはdrm_kms_helperモジュールがやるので以下オプションをmodprobeの設定に書く。

/etc/modprobe.d/drm-kms-helper.conf

options drm_kms_helper edid_firmware=DVI-D-1:edid/benq-edid.bin

dracutでinitramfs再構成

# dracut --force /boot/initrd.img-4.19.0-5-amd64 

参考リンク

機械翻訳とText to speechの出力を利用する時に制限があるか調べたメモ

機械翻訳とかTTSで作った音声とか、つかってみたいことがあるけど縛りがあったらやだなーということでちょっと調べたメモ。

機械翻訳

Amazon Translate

よくある質問 - Amazon Translate | AWS に、以下記載あり。 f:id:mrwk:20190616132827p:plain

Google Translate API

よくある質問  |  Cloud Translation API  |  Google Cloud の、帰属のところに以下記載あり。ポストエディットで人が処理する場合に帰属は不要だけどユーザに直接見せる場合は帰属の必要あり。 f:id:mrwk:20190616133658p:plain

帰属表示の要件  |  Cloud Translation API  |  Google Cloud をみると、以下記載がある。アプリケーションのメッセージカタログ翻訳でposteditなしで使う場合など、典型的でない利用の時にはGoogleに問いあわせたほうがよさそう。 f:id:mrwk:20190616134106p:plain

Microsoft Translator

FAQ - Microsoft Translator for Businessに、以下記載あり。帰属させてもさせなくてもいい.帰属させるときはガイドラインに従う。 f:id:mrwk:20190616133320p:plain

Text To Speech

Amazon Polly

https://aws.amazon.com/jp/polly/ に特徴として書いてる f:id:mrwk:20190616132437p:plain

よくある質問 - Amazon Polly | AWS にも以下記述あり f:id:mrwk:20190616132720p:plain

Google Cloud Text-to-Speech

帰属についての記述はみつけられず。使いたいときはサポートへ確認かな。。

Azure Speech Service

帰属についての記述はみつけられず。使いたいときはサポートへ確認かな。。

まとめ

ここらへんの権利関係をクリアにしておけばOSSとか自分で作る動画とかに使いたいときに便利なのでまとめました。 TTSについてはAmazon Polly以外みつけられなかったので追加情報あったらおしえてください m(__)m

きになる点

機械翻訳の学習元の文書の著作権が、機械学習で生成された文書に絶対に及ばないと想定するのも無理があるので、わずかながらリスクはありそうです。このリスクを許容できるかはケースバイケースだと思います。OSSプロジェクトへの投稿などは関係者の合意をとった上でやりましょう。

blog移転先検討中……

bloggerのblogを消されてしまったのでどこかいいホスティングサービスを探している。前のblogはまあ年に1本投稿するかどうかくらいのチラ裏だったんですが、理由もわからずいきなり消されてあきらかにおかしくても言う先ないのしんどいのでどこかへ移動しようと決意。

wordpress.comは無料プランで払いだされるドメインが "mrwk805919219.wordpress.com" とかになってしまったので自分で覚えられない……。

はてなダイアリーかなー。note.muかなー。と思いつつどっちも試し中。

深夜systemd雑談

深夜に某IRCでsystemdの話してたのをちょっと編集したログ

コマンドオプション順序

ar*******> sudo systemctl hogehoge start にしてほしかった
moriwaka> sudo service hogehoge start とすればいいんじゃないかな
moriwaka> LSBにserviceがある限りたぶん永遠に残るよ
ar*******> なるほど
ar*******> service 使えばいいのはわかるんだけど、systemctl が service と記述順を違えたのはなんでかしら
ca***> command subcommand ... という書式で統一したかったとか?
moriwaka> command subcommand object にしたかったんでしょうなあ
moriwaka> shellの補完と相性よさそうだし
ar*******> stop して start してとかやるときの編集がめんどい
pl*****> コマンド順はあんまり気にならないんだけど、
pl*****> systemctl start hogehoge してから systemctl status hogehogeするのがたまにダルイ
ar*******> それ
moriwaka> わかる
ar*******> history 編集するときカーソル移動だるい
moriwaka> 僕もctrl-w で1 word消すのが癖になってるから今でも編集ミスるわ
pl*****> unit自分で書いてると頻繁にそれやるからつかれる
ar*******> カーソル移動の時間が積もり積もって過重労働に
moriwaka> Alt-Bとか使えばいいんだけど手癖がなあ……

Restartの契機

pl*****> 最近はまったのはRestart=(OnFailure=だったかな?)がType=simpleじゃないと機能しないこと
pl*****> simpleだと機能してoneshotだとダメなんだったっけ
pl*****> 忘れっちった
pl*****> コマンドをサービス化してるのでなるべくoneshot使ってるんだけど、typeによって使えない機能があったりするのは知らなかった・・・
moriwaka> oneshotだとprocessがexitするの想定された動作だから
moriwaka> processがexitしててもserviceとしてはactiveでrestart動かないのはまあそうかなという気持ち
pl*****> うむー
pl*****> 確かにそう言われるとそういうもんか

Conditionほげほげが好き

moriwaka> Conditionalなんとか が割と好きで、どの条件で失敗したかstatusで見えると「おお…… 進歩してる……」って感じになる
pl*****> conditionalって何?
moriwaka> Conditionなんとかか。ConditionPathExists= とか
pl*****> ConditionPathExistsとかか
pl*****> あれ便利なので多様してる〜

バイナリログつらい

ts******> systemdのユニットファイルなどは使いやすいけど、何故バイナリログにしてやがったのか・・・
pl*****> 並列起動だから出力されるログの順序が決定的じゃないってのもたまに騙される
ts******> "SYSTEMD_PAGER="を設定すると使い勝手が良くなる >systemd

WantedBy=multi-user.targetの動き

pl*****> 未だにちょっと理解できてないのが、
pl*****> WantedBy=multi-user.targetしてるユニットは、
pl*****> Reached target Multi-User System.ってログに出てたらキックされてるってことでいいのかな
pl*****> Reached target Multi-User System.って出た後にwants/wantedbyしてるユニットが起動されるのかなmoriwaka> それ[install]セクションにかくので
moriwaka> enableするとmulti-user.targetのWantsに追加される
moriwaka> Wantsなだけなので、前後関係は決まらない
moriwaka> systemdの「起動したいリスト」にはのってるはず
pl*****> あーーーっていうことは
pl*****> Reached target Multi-User System.って出てるから、サービスがキックされてるって保証はないのか・・・
pl*****> systemdは何をもってReached target 〜を出力してるんだろ・・・
moriwaka> そのtargetをactivateしたらじゃないの。
moriwaka> Before=multi-user.target とか書けばいいのでは(targetについた時点で起動がはじまってると保証してほしいときは
pl*****> だとするとbefore=multi-user.target必要になるのか・・・
pl*****> ふむ
pl*****> ぁーそーかーかなり勘違いしてたなぁ
moriwaka> わりとそのへんごちゃっとするよね……
pl*****> wants/requireは順序関係ないから、WantedBy=Xしてても「Reached target Xって出てるからサービスはキックされてるはず」とは鳴らないのか・・・
moriwaka> はい
pl*****> ぐへぇ。勉強になりました・・・
moriwaka> 「必要なんだから先に起動してるじゃろ」と思うのはすごくよくあると思うのでみんなハマるところだとおもう
pl*****> むずかしー
pl*****> ぜひmastering systemdを書いてほしい・・・
moriwaka> 本はしらないんだけどpacktとかにないのかな

Conflicts=shutdown.target

pl*****> あと、Conflicts=shutdown.targetって何の意味があるんだろう
moriwaka> shutdownコマンドとかでshutdown.target を呼びにいくときには俺を終了してくれよなという意味では>conflicts
pl*****> ぁーーーそうか。終了するときに shutdown.targetに遷移するから、その時に殺してくれるのか・・・

pl*****> conflicts=にサービスが設定されてると、このサービスはあのサービスと競合するんだなって分かるけど、
pl*****> shutdown.targetと競合する?どういうことだ?ってなってた・・・

moriwaka>------------------------------------------------------------------------
shutdown.target
          A special target unit that terminates the services on system shutdown.
          Services that shall be terminated on system shutdown shall add Conflicts= and Before= dependencies to
          this unit for their service unit, which is implicitly done when DefaultDependencies=yes is set (the
          default).
------------------------------------------------------------------------
systemd.special(7)に↑の記載があったよ
pl*****> DefaultDependencies=noにしてる場合のみ必ず書く必要があるって感じか

systemdのドキュメント

pl*****> ぁー systemd.specialなんてあるのか・・・読んでませんでした
moriwaka> systemd組込みのunitは Documentation=man:systemd.special(7) みたいな感じでどこ読めばいいかも書いてくれてるからそこから辿っていくとやりやすいです
pl*****> ProtectSystem=とかすごい安心感ある・・・こんなのあるんだ
pl*****> ドキュメント辿ってるだけで時間が無限に過ぎそう
moriwaka> dpkg -L systemd|grep /man|wc -l → 198
多すぎてさすがにびびった。まあだいたい7章から辿れるはず……

pl*****> 片手間で鯖缶してる人なんかは、たしかにsystemd勉強するのは辛いかもね
pl*****> 読むもの大杉ってなりそう

moriwaka> おおざっぱには、systemd-* はあんまりユーザが叩かないコマンドとかなので
systemd.*(5) でunitの設定読んで、必要に応じて*.conf読んで、あと なんとかctl のman pagesを読んでおけばだいたい日常の用は足りるはず
systemd.directives.7.gz というのがunitで書けるディレクティブの辞書的になってて
こっから記載があるman pageがたどれる
pl*****> ふむ
moriwaka> unitファイル見たら知らないディレクティブがでたときむけ(だいたいsectionでわかるけど

コマンド分け……てるよ

ar*******> journalctl とか、わけるのかくっつけるのか、一貫性がないな。
ar*******> それわけるなら、systemctl をもう少し細かく分けたらいいのに。
aa**> systemdってなんでしょうか?サービスを管理するなにか?
moriwaka> linuxユーザーランドの基盤をととのえるプロジェクトの名前兼、initをやるデーモンの名前
pl*****> 個人的にユーザーランドに頭出してる第二のカーネルと思ってる
moriwaka>
------------------------------------------------------------------------
$ dpkg -L systemd | grep bin/
/bin/journalctl
/bin/loginctl
/bin/networkctl
/bin/systemctl
/bin/systemd-ask-password
/bin/systemd-escape
/bin/systemd-inhibit
/bin/systemd-machine-id-setup
/bin/systemd-notify
/bin/systemd-sysusers
/bin/systemd-tmpfiles
/bin/systemd-tty-ask-password-agent
/usr/bin/bootctl
/usr/bin/busctl
/usr/bin/hostnamectl
/usr/bin/kernel-install
/usr/bin/localectl
/usr/bin/systemd-analyze
/usr/bin/systemd-cat
/usr/bin/systemd-cgls
/usr/bin/systemd-cgtop
/usr/bin/systemd-delta
/usr/bin/systemd-detect-virt
/usr/bin/systemd-mount
/usr/bin/systemd-path
/usr/bin/systemd-resolve
/usr/bin/systemd-run
/usr/bin/systemd-socket-activate
/usr/bin/systemd-stdio-bridge
/usr/bin/timedatectl
/bin/systemd
/usr/bin/systemd-umount
------------------------------------------------------------------------
実行ファイルだけでこんだけある
まあsystemctl, journalctl, loginctlくらいしか日常叩かないけど

このへんのソフトウェア群がサービスが起動したりログインセッションはじまったりするための環境をととのえるために色々な仕事をします
aa**> あーそれなのか、systemctl, journalctl,はよくお世話になってます

timedatectlつかう?

pl*****> timedatectl、新し目のrhelだとtimesynd使うようになったり?
pl*****> 7系はchrony固定なのかな
moriwaka> 7はchronyかntpdですね。timesyncdは自分でつかったことがないからよく知らない
pl*****> なるほど 

systemdのめっちゃ嬉しい機能をダラダラと説明する

2018/06/07〜2018/06/08 あたりにtwitterでつぶやいたsystemdのうれしいシーンまとめ

Package管理と相性がよい

  • sysvinitのスクリプトちょっといじってulimit文足したあとにパッケージupdateしたら消えたりしたことがある人はsystemdならその不幸はもう起きない 
  • systemdは設定ファイルが /usr, /etc, /run くらいにバラけて配置されるのでパッケージが提供するのをカスタマイズで変更するのは簡単にできるしパッケージシステムの更新などと相性もいい。
  • バラバラだと作業が煩雑になりがちなので関連コマンドが充実
    • パッケージのデフォルト、/etc/での設定、/run/の自動生成された設定などをまとめてunitを表示してくれる systemctl cat 
    • unitをカスタマイズするときに適切なファイルを編集してくれる systemctl edit などのコマンドも便利
    • 現在の設定を評価してデフォルトからどう変更されたかをまとめて表示してくれる systemd-delta コマンドもあるよ。 

sysvinit等でありがちだった罠にハマりにくい

  • /etc/init.d/hoge を直接実行してserviceコマンド経由での起動時と環境変数やらが違うからハマった人、systemdならその不幸はもう起きない
  • 同じサービスを1システム内で複数インスタンス構築してpidファイル被ったりログがどれがどれやら混乱したり、そういうことはsystemdをちゃんと使えば回避できる(残念ながら対応したパッケージは少ない) 
    • 設定ファイルのunit名を @で終わらせると複数インスタンスに対応。たとえばgetty@tty1.service というunitはtty1用のgettyで、仮想端末にあわせてgettyをいくつも作成する。この場合設定ファイルはgetty@.serviceになる。
  • /etc/init.d以下のスクリプトがしれっとタイムアウトしてるくせにexit 0してて「フザケンナ」ってなったことがある人、残念ながらsystemdでも敢えてやればできちゃうけど普通の使い方ならちゃんと失敗したらnon zeroなexit code返すよ 
    • systemctl status で指定したunit(のどこかで)失敗が発生しているとexit codeがnon zeroになる
  • systemdのunitではサービス実行前のチェック、サービス実行直前の準備コマンド、サービスそのもの、サービス実行直後に実行するコマンドなど細かくフェーズを分けてコマンドを記述できる。設定は面倒かもしれないが実際にどこかで失敗が発生したときにどのコマンドで問題が発生したか、exit codeは何かなどを細かくレポートしてくれて素敵。

Linuxの新しい機能などを上手くサポートしてくれる

  • 一時ファイルを/tmpに作って置き換え可能なタイミングが発生する典型的なセキュリティホール作っちゃった人、systemdならそのサービス専用の/tmpをbind mountして分離する緩和策が1行書くだけで実施できるよ 
    • PrivateTmp=true と指定するだけ
    • mount namespaceとbind mountを使ってunitに特有の/tmp を作ってくれる
    • 他にもいろいろ制限をかける仕組みがあるので systemd.exec(5) のSandboxingを見るとよい
  • linuxはcgroupでリソース制限かけてメモリ+swapの上限とか設定できる」それどうやって使うんだろうと思った人、systemdならサービス毎にcgroup作ってるから設定1行書くだけでできるよ  

サービスの管理や追跡の機能が豊富 (いくつかはcgroup統合のおかげ)

  • なぜか時々死ぬサービスを再起動するためにdaemontools入れたことある人、systemdならそれ最初からあるよ 
    •  Restart=always とか。どういう条件でプロセス終了した場合に再起動するかなどをRestart=の設定で細かく指定できたり、再起動前の待ち時間をRestartSec=で指定できたりするよ。
  • 「ん、このサービスいつ起動したっけ、先週月曜だっけ……?」ってログ漁ったことある人、systemdなら各サービス毎にいつ起動したかちゃんと覚えてるよ
  • 謎のbashが動いてて「え、これ何から呼ばれてるの」と思ったけどpstreeで見たらinitの子になってて「なんだろー」ってなったことある人、systemdならどのサービスか、それともユーザーセッションから出てきたプロセスか即わかるよ 
    • "systemctl status" だけ打つと各サービスやユーザセッションとの関係もでてきます
  • libvirtが起動するdnsmasqがサービス終了しても継続して動作してて、killall -9 dnsmasqしてNetworkManagerが呼んでる関係ないdnsmasqまで殺したことがある人、systemdならlibvirt関連の全プロセスだけを一発でkillできるよ 
    • "systemctl kill <サービス名>" で、 サービスに関連した全プロセスにkillを送れる
  • systemdはサービス毎にcgroupで追跡してるから、「このサービスどのくらいメモリやCPUつかってるのかな」って思ったらsystemctl statusやるだけでわかるよ 

f:id:mrwk:20190501065924j:plain

systemctl statusの例。起動時刻、CPUおよびメモリ消費、関連プロセス、最近のログ10行などがまとめて表示される

bus activationなどが素敵

  • systemdは「ooがされたらxxを起動する」みたいな奴に色々(dbus, mount, デバイス, ファイル, socket等)対応してるから、cockpitみたいな「どこでも使えてほしいけど使わないときはリソース節約のため落ちていてほしい」サービスとかを設定しておくとリソースあまり使わずに待ちうけできるよ 
    • cupsが駆使してる。job queue(/var/spool/cups)にjob fileがあれば起動、dbus経由でアクセスがあれば起動、tcp port631にアクセスがあれば起動
  • udevがsystemdと連携して動作するので検出されたデバイスを依存関係に簡単に書ける。特定のデバイスが存在する場合にだけ有益なbluetoothdとか、lvmで必要なサービスを非同期で起動させるとか、ストレージの暗号化などで大活躍。

systemdの管理と統合されたsystemd-journaldによるログ管理素敵

  • 複数台の/var/log/messagesを見比べて「何で時間が秒単位なん!どっちが先か後かわからん! (>_<)」ってなったことがある人、systemd-journaldならマイクロ秒まで保持してるよ 
    • journalctl -o short-precise で時刻を細かくした出力が得られる
  • トラブルシューティングでsyslogでためてるメッセージを解析する時に"warning"とかで検索してcriticalなメッセージ見逃したことがある人、systemd-journaldならログレベル保持してるからあらかじめ分けておかなくても「warn以上」とかですぐ絞りこめるよ 
    • journalctl -p 3 で error以上、など。
  • 全然ログらしいの吐かないデーモンについて詳しい人に聞いたら「daemonizeさせずにforegroundで動かしてstderr見ればいいんだよ」とか言われて「そんなん知らんがな」と思ったことがある人、systemd + systemd-journaldならサービスのstdout,stderrもきっちりログに収集するよ 
  • systemdはサービス管理とロギングが統合されてるから journalctl -u サービス名 で特定のサービスに関連するプロセスが出したログだけ出してくれて便利。特に子プロセスの名前がメインのプロセスと違う時に見逃しがない。
  • journaldはtimestampをUTCで保持しているのでシステムのTZに依存せず簡単にログを比較できるよ 
  • 各システムにユニークなmachine-idがついて、そのmachine-idのディレクトリにログが保存されるので複数システムのログを同じところにまとめやすいし、まとめたログファイル群をマージして読めるよ
    • /var/log/journal/b1cb7fb826fe490da1e256a4300f4c2f/system.journal みたいなファイルになります
    • machine-idは /etc/machine-id に保存されている。このファイルを削除して再起動するか systemd-machine-id-setup コマンドで作り直しされる。

こまかい便利機能

  • systemdは競合するサービスをConflict=で明示的に定義できるからntpd動いてるのにchrony動かそうとすると実際に競合する前に検出して失敗してくれるよ
  • systemd、電源断や再起動だけでなくサスペンドやハイバネートもやるよ

systemdに興味を持った人むけリンク

 
 

3週間ほどGoogle Homeを使ったまとめ

サードパーティアプリの強制終了は「キャンセル」

サードパーティアプリそのものは玉石混交でまあどんどん変わっていくと思うので詳細には触れない。音声対話をしているときにサードパーティアプリが想定しているコマンドがわからなくなると「すみません、もう一回言ってください」「最後のコマンドを言い替えてください」などのループに簡単に陥って脱出の方法がわからなくなる。そんなときは「キャンセル」と言えば強制終了できる。

https://developers.google.com/actions/assistant/app-exits Actions on Googleのドキュメントを見ていると、英語では以下5コマンドで止められるらしい。僕は日本語で「終了」「終わり」「もういいです」「ストップ」「さようなら」くらいをためしたが全滅だった。困ったら「キャンセル」を覚えておくだけで全然違うとおもう。
  • "exit"
  • "cancel"
  • "stop"
  • "nevermind"
  • "goodbye"

ショートカット作成はアクティビティログを見ながら

Google homeへのコマンド入力は、音声も含めてアクティビティログ  に記録されている。
Google homeアプリの「マイ アクティビティ」のほうが省略されないので見易い。

ショートカットを作成するときは、このマイアクティビティを見ると、どう認識したか、ショートカットをどう展開したか、その反応は何かがわかる。

たとえば「リアを再生」→「Liaを再生」というショートカットを作ってテストをすると以下のようなログが残ってちゃんと期待通り展開されていることがわかる。
f:id:mrwk:20190501073519p:plain

radiko

まんまradikoです。
http://radiko.jp で自分の地域で聞けるラジオ局を確認して、「ねえGoogle、○○を聞きたい」というとかけてくれます。プレミアム会員じゃないけどアカウント関連の何もないのでプレミアムの機能はたぶん使えない。
  • やりたくてできてないこと1: 特定の時間や番組を予約して再生をはじめさせること。「毎週火曜午前1:00から午前3:00までTBSラジオを聞きたい」とか指定したい。
  • やりたくてできてないこと2: 「あと2時間で終了」みたいにタイマーを設定して再生を終了させること。「2時間後に停止」と言うと「2時間後にリビングを消します」というような若干物騒なメッセージとともにスリープタイマーを設定できる。
まあ言うほど困ってないんですが、コンピュータなら余裕でできるやろというところができていないので惜しい感がある。

「ねえGoogle TBSラジオ」だと通じないのでよく使う局はショートカットを作るといいかな。

ニュースのpodcast

これも普通の「ニュース」コマンド。「ねえGoogle、ニュース」と言うとあらかじめGoogle Homeアプリで指定したPodcastを再生してくれます。任意の音声読みあげとかカスタムURLとかは今のところなさげ。あればいいのに。
Google Play MusicPodcast対応してるからか海外のPodcastはびっくりするくらい数がありますね。

Google Homeアプリ」→「その他の設定」→「ニュース」→「ニュース提供元」→「ニュース提供元を追加」で出てくるところで言語をEnglish (United States)にするともう十分やろというくらいどっさりでてきます。

tuneinの再生

あんまり使っていないので謎が多い。そしてあまりうまく使えてもいない。でもISC Stormcast(セキュリティネタで平日に5-6分くらいやってるpodcast)とか聞きたい。
とりあえずわかっていること:
  • 現状、日本語モードで英語タイトルの認識はびっくりするくらいできない。jazz fmは「じゃずえふえむ」ではまったく通じず「じぇーえーぜっとぜっとえふえむ」なら通じる。ショートカット設定して、文字列で「jazzfm」と書けば認識してくれるのでgoogle homeが素直に音声認識してくれる「ねえGoogle、ジャズ」とかのワードで呼びだすようにする。
  • Google homeを英語モードにさえすれば"Play ISC stormcast podcast"であっさり再生できる。なのでリージョンの問題とかではなく日本語音声認識を使っているときのコマンド入力の問題っぽい
  • ショートカットのコマンドで「tuneinでjazzfmを再生」は使えるのに「tuneinでISC stormcastを再生」は失敗する。何が失敗する原因かは不明。
  • ショートカットのコマンドに他の言語は使えない。つまり「セキュリティ」とかで認識させて「play ISC stormcast podcast」を英語で評価してもらうということはできない。その結果、なんとか日本語モードで実行が成功できるコマンドをみつけないといけないという謎のゲームになっている。。
  • 日本のローカルFMのストリーミングを再生させることにまだ一回も成功していない。ひょっとして地域か言語絞られてるのかな??

今のところ「海外のラジオやpodcastをききたかったら英語モードにすればtuneinが普通に使えるよ」というところまでしか知見がない。
 

音楽再生をお金を使わずにやる

各種音楽サービスの課金をめっちゃ勧められるけどお金つかいたくないよね……。

自分でアーカイブをもっていない場合は、Spotifyの無料プランくらいしかないかも。
僕はアーカイブをもっているので以下におちつきました。

Google Play Musicの無料プランを使う
  • Google Homeアプリの表示とかを見ると有料プランの購読が必須のように見えるけど別にそんなことない。(2017年11月時点)単に音楽のプロバイダにGoogle Play Musicを選択するだけ。
  • 無料プランで最大50000曲保存できるロッカー機能があるのでそれを利用して自分のアーカイブを登録(PCでGoogle play musicのページにドラッグ&ドロップするだけ。アップロートにはめっちゃ時間がかかる)

 

音楽再生関連のコマンド

いろいろ受けつけてくれるけど、以下におちつきました
  • ねえGoogle、BGM → ライブラリからランダム(?)に再生。「ねえGoogle、何か音楽を再生」と同様だけど短いのでこれにしてる
  • ねえGoogle、次 → 再生中に次の曲へスキップ。
  • ねえGoogle、この曲好き → google play musicでThumb upプレイリストに登録。
  • ねえGoogle、シャッフル → 次の曲からシャッフル再生
  • ねえGoogle、お気に入りを再生 → google play musicで"Thumb upプレイリスト"を再生
  • ねえGoogle、<プレイリスト名>を再生 → google play musicで指定したプレイリストを再生
  • ねえGoogle、この曲何? → 再生中の曲のアーティストと曲名を答えてくれる
  • ねえGoogle、停止 → 曲の再生を停止
  • ねえGoogle、再開 → 停止していた曲再生を再開。停止したあと他のchromecastに関連するコマンド(?)をつかっているとだめ
これにおちつくまでちょっとしたトラブルあり。「ねえGoogle、音楽を再生」って言うとKalafinaの「音楽」という曲が再生されるという……。

プレイリストや曲、アーティストの名前にアルファベットが使われていると検索に失敗することがよくある。「Liaを再生」のつもりで「りあを再生」と言っても受けつけず。「える、あい、えーを再生」ならコマンドが通る。そのとき「リアを再生します」と回答してくれてるのでgoogleが頑張れば逆変換もそのうちできるようになりそう。

環境音

Alexaのスキルみてて滝の音とかあったので試したらあったという……。 
  • ねえGoogle、環境音 → 「リラックスできる音を再生します」といって波の音や暖炉の音を再生してくれます
  • ねえGoogle、<名前>の音 → 「海の音」「風の音(扇風機の音)」「雷雨の音」「雨の音」川の音」「森の音」「暖炉の音」 で個別指定できる。環境音のほうで再生されるけど名前があたらないものがあるのでもうすこしコマンドありそう。
  • ねえGoogle、ホワイトノイズ → ホワイトノイズを再生。寝るときに良いといわれるピンクノイズはなかった。

ちょっとだけ工夫

Google homeアプリのショートカットを使ってプレイリスト再生 

ラジオ体操をしたいのでこんなことしました
  • ラジオ体操動画をダウンロード
  • mp3に変換してGoogle Play Musicに登録。「ラジオ体操」プレイリストを作って登録
  • Google homeアプリ」→「その他の設定」→「ショートカット」でショートカットを追加。「ラジオ体操」で「ラジオ体操を再生」とする。
  • 「ねえGoogle、ラジオ体操」というとラジオ体操ができる(‥)v