2018年12月23日() これまでの12月23日 編集

■1 シリーズ3: Echo Dotがやってきた[https://www.nantoka.com/~kei/diary/?20181219S1][alexa] このエントリーをはてなブックマークに追加

前回「iTunesのライブラリに入っている楽曲を、alexaに指示を出して、Echoから再生したい」という課題を掲げていて、色々やってみているところ。
iTunesライブラリにある楽曲は、元々CDからリッピングしたものなので、おうちサーバーには全てが保存されていて、alexaからストリーミングすること自体は、 AudioPlayerインターフェース[https://developer.amazon.com/ja/docs/custom-skills/audioplayer-interface-reference.html] を使えば、それほど難しい事ではなくて、 Let's Encrypt[https://letsencrypt.org/] を使った証明書を仕込んだローカル向けhttpdサーバを起動するだけでOK。指定した楽曲を再生させるのはlambdaでURLを返すだけです。
問題は、*alexaに指示を出して*の部分で、楽曲のメタデータを用意してあげないといけません。
幸いなことに、iTunesに入っている楽曲の大半は、タグが付けてあって、できる範囲では、 MusicBrainz[https://musicbrainz.org/] でもタグ付けしてあるので、表記の上ではメタデータを用意できました。
これを Beets[http://beets.io/] で読み取ってごにょごにょしてJSON化して、リストタイプのslotを作ってskillに入れてやれば、うまいこと曲が特定できるかな…
と、思ったのですが、残念ながらそううまくはいきませんでした。
重要: 標準スロットタイプは、列挙型と同じではありません。リストにない値でも、音声言語理解システムに認識されれば、返されます。スロットタイプへの入力はリストの値に重み付けされますが、リストの項目だけに限られるわけではありません。コードで検証とエラーチェックを実行するか、スロット検証ルールを定義して、Dialog.Delegateを使用してユーザーに使用できる値を入力するようプロンプトを表示するか、いずれかを実行できます。
にある通り、「Hey! Say! JUMPの曲をかけて」とか、「Sexz-ZoneのSexy Summerに雪が降るをかけて」と言っても、「ヘイセイジャンプ」とか「セクシーゾーン」「セクシーサマーに雪が降る」とかが降ってきます。
これは、洋楽ではさらに致命的で、発音する側も「アンドリアボッチェリのタイムトゥセイグッバイをかけて」とか言っている訳ですから、ロケールも影響して、「アンドリアボッチェリ」「タイムトゥセイグッバイ」と降っててきます。
米国では、 Music Skill API[https://developer.amazon.com/ja/blogs/alexa/post/870491c3-0e95-4ea9-9e2e-ce1ae0cf0a79/now-available-use-the-ask-music-skill-api-to-stream-from-your-music-service-to-alexa-customers] の提供が開始されていて、楽曲のカタログをアップロードしておけば、狙った楽曲がかけられそうな雰囲気なのですが、日本でサービスされるまでは、何か別の手段を考える方法がありそうです。

【課題設定】英語の楽曲・アルバム・アーティスト名をカタカナに直す:

一旦、カタカナに直してしまえば、図書検索システムでおなじみのカタカナ正規化でそこそこマッチできそうな感触はあるので、なんとかしてみましょう。
beets2skil.pl
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Encode qw/encode decode/;
use Encode::UTF8Mac;
use Unicode::Normalize;
use Digest::SHA;
use JSON;

while (<>) {
 chomp;
 my ($path, $artist, $album, $title, $artist_id, $album_id, $title_id) = split(/\t/);
 $path = decode('utf-8-mac', $path);
 $artist = decode('utf-8', $artist);
 $album = decode('utf-8', $album);
 $title = decode('utf-8', $title);
 if ($title) {
  print encode('utf-8', join("\t", $path, $artist, $album, $title, $artist_id, $album_id, $title_id)), "\n";
 }
}
とか作ってやって、
bash-3.2$ beet remove -a
bash-3.2$ beet import -A ~/Music/iTunes/iTunes\ Media/Music/
bash-3.2$ beet list -f '$path  $artist $album  $title $mb_artistid $mb_albumid $mb_trackid' | ./beets2skil.pl > iTunes_list.txt
bash-3.2$ sed -ne '2000,2003p' iTunes_list.txt
/Users/kei/Music/iTunes/iTunes Media/Music/Carpenters/Twenty-Two Hits of the Carpenters/03 Superstar.m4a        Carpenters      Superstar       4580d83b-093e-4241-91fb-2dd71f5f1f3f    b75c4d4d-fdc5-46f8-a795-b4e348e1c35d    5c0fba7b-5b16-402f-bf77-c8d37dc41d3e
/Users/kei/Music/iTunes/iTunes Media/Music/Carpenters/Twenty-Two Hits of the Carpenters/04 Rainy Days and Mondays.m4a   Carpenters      Rainy Days and Mondays 4580d83b-093e-4241-91fb-2dd71f5f1f3f     b75c4d4d-fdc5-46f8-a795-b4e348e1c35d   5198ebd9-1fb4-4fd3-9e5b-bdd0922ce3a5
/Users/kei/Music/iTunes/iTunes Media/Music/Carpenters/Twenty-Two Hits of the Carpenters/05 Top of the World.m4a Carpenters      Top of the World        4580d83b-093e-4241-91fb-2dd71f5f1f3f    b75c4d4d-fdc5-46f8-a795-b4e348e1c35d    37eccc1e-a551-47a4-a969-6379dd0d240a
/Users/kei/Music/iTunes/iTunes Media/Music/Carpenters/Twenty-Two Hits of the Carpenters/06 Sing.m4a     Carpenters      Sing    4580d83b-093e-4241-91fb-2dd71f5f1f3f    b75c4d4d-fdc5-46f8-a795-b4e348e1c35d    f9b6d29d-be81-473b-8719-f84240b64e1c
って感じのやつを、「カーペンターズのトップオブザワールドをかけて」で再生できる様にしたい訳ですね…

今日のつぶやき

以上、1 日分です。

指定日の日記を表示

前月 2018年12月 翌月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

最近の日記

2019年01月03日

シリーズ5・myHomeAlexaで自分のCDをかける

2018年12月25日

シリーズ4・英語の楽曲・アルバム・アーティスト名をカタカナに直す

2018年12月23日

シリーズ3: Echo Dotがやってきた

2018年12月19日

続・Echo Dotがやってきた

2018年12月18日

続・Echo Dotがやってきた

2018年12月17日

Echo Dotがやってきた
Amazon Product Advertising API

分野別タイトル一覧


全て
CLIP
SYA!nikki
book
freebsd
hns
magic
おさけ
おしごと
お買いもの
ぐる
ごはん
アクセシビリティ
オープンソース
セキュリティ
音楽
地域情報化
電子自治体
日記

keikuma on Twitter

keikuma Name:前田勝之
Location:長崎市
Web:http://www.nantok...
Bio:前田勝之(まえだかつゆき)。長崎在住。コンサル、SE、プログラマー、 なんとか株式会社代表、非常勤講師(情報セキュリティ)。 セキュアド、テクニカルエンジニア(SV,NW)。サーバ管理とWeb日記を10年ほど。 ネットとリアルの接点に関心あり。食べること・歌うこと・愛すること・作ること・飲むこと。おいしいものがぜんぶすき。

サイト内検索

Google AdSense

Powered by hns-2.19.9, HyperNikkiSystem Project