この度Apple musicに加入し、CDで持っていた曲をAmazon Echoから聴けるようになったので、それについて記載します。
1)経緯
Amazon EchoはAmazon Music等の音楽サブスクリプションから音楽を掛けることができますが、基本的に自分の持っているCDの曲を掛けることができません。曲が入ったUSBメモリをEchoに挿してそこに収録された曲を聞く、という事ができないのです。CDからmp3ファイルに変換した曲を大量にもっているのですが、Echoはそれを再生する方法を提供していないのです。
私はライブで購入したCDを結構持っているのですが、世間一般には有名とは言えないミュージシャンのものが多いのです。Amazon Musicなどのサブスクにその曲があればUSBメモリは不要ですが、モアリズムなどの割と有名なミュージシャンでもほんの一部の曲しかサブスクには登録されておらず、とてもUSBメモリの代用をできる代物ではありません。
Amazonの会員ならば無料で利用できるPrimeでも200万もの曲があるらしいのですが、ちょっと物足りません。それならば、ということで、6,500万曲(今は9000万曲と書いてある)もあるというUnlimitedに加入してみたのですが、Primeとさほど変わらないように感じられ、自分にとっては目的を達せられませんでした。本当にAmazon Musicに数千万曲もありそれが聴けるのか、自分としては非常に疑わしいと感じます。いきなりファミリープラン1年分を一括購入したのは自分にとっては殆ど無駄だったとしか言いようがありません。
Alexaの動作にも不満があります。ミュージシャンの名前を言い、それが有名どころでなければ『そんなミュージシャンや曲はありません』、と返答して曲は再生しないという動作ならまだ許せるのですが、平然と似た名前の違う曲をかけるのが非常に腹立たしいです。はっきり言って殺意が沸きます。アマゾンからCDではなく、ファイルで購入した曲でも言う事を聞いてくれないことが多いです。また、自分のスマホは格安SIMを使っており高速で通信できる量はごく限られているので、普段は通信速度が遅い節約モードにしております。車を運転しているときにこの状態でAmazonから購入した曲を聴くと途切れ途切れにしか聴こえないものがあります。どうやら曲をダウンロードするスピードが再生に追い付いていないらしいのです。通常サブスクは通信スピードが遅い場合はビットレートが低いファイルを再生してくれるのでこのようなことが発生することはないのですが、こういう通信節約モードに対応している曲とそうでない曲があるらしいのです。
ファミリープランにしたのは同時に複数台のEchoから曲を聴けるようにするためで、ある時、高齢の家族がAlexaの機能に気が付き音楽を聴いていたので、今後も使うかもと予想しそのプランを決めたのですが、果たしてその後使っていたのかどうか疑わしい状態です。 というわけで殆ど1年の大半はアレクサ任せの曲しか聞かないという、殆ど無駄な使い方をしてしまいました。これでも無理して使った方で、金を払ってなければ全然使わなかったかもしれません。
というわけでUnlimitedの1年が過ぎ、プランを更新しなかったのですが、インターネットの某掲示板でApple Musicならばアップロードしたファイルを聴くことができるという情報を得たので試してみました。
これまでCDを取り込んでmp3ファイルにする際、256kbpsでリッピングしていたのですが、試しにそのままApple Musicにアップロードしてスマホの節約モードで聴いてみたところ、案の定途切れ途切れにしか再生されず、とても聴けるものではありません。ラジコを良く聞きますが、ラジコは音質が悪いと感じませんが音が途切れ途切れになりません。ラジコのビットレートを調べたところ48kbpsだということで、手持ちのファイルを48kbpsに変換する事にしました。
2) VideoProc Converter
音楽ファイルのビットレートを変換する無料のツールをネットで検索するとVideoProc Converterというソフトが見つかりました。早速ダウンロードし、あるアルバムの曲を48kbpsに変換してApple Musicにアップロードしたところ、うまく再生できることがわかりました。しかし、問題があります。
【フォルダ単位でしか変換できない】 複数フォルダのファイルを一気に変換できるようですが、一つのフォルダにしか出力されないので、一気に処理すると元の「アーティスト/アルバム/各楽曲」というフォルダ構成に戻すのが大変です。1アルバム毎に処理するしかないのですが、そうすると何百枚もあるCDを全部処理するのにとても時間と手間がかかります。
【曲名の文字を変えられてしまう】 mp3はファイル名が曲名になっていますが、曲名が「Don’t Slip」のように’(コーテーション)が使われていると_(アンダースコア)に変えられてしまいます。無料ソフトゆえの嫌がらせ機能なのでしょうか?
【参加アーティスト名がVideoProc Converterに置き換えられてしまう】 アップしたファイルの一覧を見てみると、アーティスト名がVideoProc Converterになっています。参加アーティストの情報が全部上書きされてしまっているのです。これはちょっといただけません。これも嫌がらせ機能で有料版を買えば解消されるとでもいうのでしょうか? (2022/8/27追記:アップロードした曲をEchoで再生する場合は、曲名とアルバム名を表示しますが、アーティスト名は表示されません。Echoで再生する限りにおいては問題は無さそうです。)
上記の問題を考慮して別の方法を検討することにしました。
3)ffmpeg
調べた結果ffmpegというソフトを使うことにしました。 このソフトはコマンドラインで使うもので、マウスで操作するGUIソフトでないのでちょっと操作が面倒かもしれませんが、プログラムと組み合わせて使用する事にしました。
以下のページからダウンロードします。FFmpeg https://ffmpeg.org/
ページ上の[Donload]ボタン-[Get packages & executable files]からWindowsの青いマークをクリック
[Windows EXE Files]からwindows builds from gvan.devをクリック
gvan.devのページから[release builds]のlatest releaseからffmpeg-release-full.tzを選択。
ダウンロードしたファイルを右クリックして解凍します。 解凍したフォルダを永続的なフォルダ(例:c:\Soft)にコピーします。 次に、どこからでもffmpegコマンドが使えるようにbinフォルダにパスを通します。
【パスの通し方】 スタートボタンを押下し、ギヤのマークの[設定]を選択すると設定画面を表示します。
[システム]を選択、左側一番下の[詳細情報]を選択、右側下の方の[システムの詳細設定]を選択すると、[システムのプロパティ]画面が開きます。
下の方の[環境変数(N)]をクリックすると、[環境変数]画面が開きます。
環境変数のPathを選択(ユーザーの環境変数でも、システム環境変数どちらのPathでも良い)し、[編集]ボタンをクリックします。
環境変数名の編集]画面が開きます。[新規(N)]ボタンをクリックし、そこにbinフォルダのパスを入力します。(例: C:\Soft\ffmpeg-5.1-full_build\bin) [OK]ボタンで閉じてゆき、設定完了です。
1ファイルを変換する際のコマンドは以下のページとffmpegのヘルプを参考にして決めました。[FFmpeg] 48kbpsの低ビットレートで高音質を追求する http://sogohiroaki.sblo.jp/article/187244377.html
ffmpeg -i 元ファイルパス -vn -acodec mp3 -ar 44100 -b:a 48k -ac 2 出力ファイルパス -y
試しに1曲変換してみましたが、成功しました。 元のファイルと出力ファイルを同じにして、置き換えるような処理は出来ませんでした。 ffmpegのオプションはいっぱいあり、習熟すると目的にとってもっと最適なオプション設定があるかもしれません。
音楽ファイルは256kbpsから48kbpsになったのですから理論上20%以下のサイズになっている筈ですが、実際のファイルサイズもそれくらいか、ちょっと小さめになっていました。
次はフォルダにまたがったファイル群を、フォルダ構成を保ったまま変換するプログラムを作ります。
3)pythonプログラム
pythonでディレクトリを再帰的に処理するようなサンプルプログラムをネットで探したところ、直ぐに見つかりました。 USBメモリをPCに挿し(Dドライブ)、そこにあるファイルパスを全て表示する以下のプログラムを動かしてみたところ、あっさり成功しました。 filelist.py
import os
def find_all_files(directory):
for cur_dir, dirs, files in os.walk(directory):
for file in files:
yield os.path.join(cur_dir, file)
if __name__ == '__main__':
for file in find_all_files('d:\\'):
print(file)
これほど短いプログラムで実現できたのは驚きでした。 これを基に作成する変換プログラムの機能を以下のように決めました。 ・USBメモリを2つPCに挿し、DドライブとEドライブにします。 ・Dドライブに変換したい音楽ファイルをフォルダごとコピーします。 ・Eドライブは空にしておきます。 ・プログラムを実行すると、Dドライブと同じフォルダ構成がEドライブにもできて、その中に48kに変換されたファイルが格納されます。 ・対応する音楽ファイルはmp3,mp4,wavの拡張子を持つファイルで、それらをビットレート48kのmp3ファイルに変換します。
出来たプログラムは以下のようになります。 cnv48k.py
import os
import subprocess
def find_all_files(directory):
for cur_dir, dirs, files in os.walk(directory):
for file in files:
yield os.path.join(cur_dir, file)
if __name__ == '__main__':
for file in find_all_files('d:\\'):
path, fname = os.path.split(file)
root, ext = os.path.splitext(file)
if ext == '.mp3' or ext == '.mp4' or ext == '.wav':
newpath = 'e' + path[1:]
os.makedirs(newpath, exist_ok=True)
newfile = os.path.join(newpath, fname)
cmdline = 'ffmpeg -i \"' + file + '\" -vn -acodec mp3 -ar 44100 -b:a 48k -ac 2 \"' + newfile + '\" -y'
subprocess.run(cmdline, shell=True)
プログラムの実行方法
>python cnv48.py ※pythonをまだインストールしていない場合は「Windowsパソコンにpythonをインストール」とかで検索するとpythonのインストール方法が沢山出てきますので参照してください。
人によっては挿したUSBドライブがDとEにならないかもしれないですが、その場合はプログラムの10行目と14行目にあるdとeの文字を変えて実行してください。 このプログラムはファイルのパスのdという最初の文字をeに置き換えることで処理するという、手抜きプログラムです。変換元と変換先のディレクトリを指定するというちゃんとしたプログラムを作りたい方は、多分簡単なのでご自分で挑戦していただきたいと思います。
変換したいフォルダを一気に処理すると時間がかかり、いつ終わるか分からなくなるので小分けに処理をしたい、という要望もあるかもしれません。その場合はまず、Dドライブに変換したいフォルダだけを入れて処理を実行し、処理が終わったらDドライブのフォルダを削除し、次に処理したいファイルをコピーして実行する、という風にしていけば、Eドライブにファイルが追加されていくので、よいかもしれません。 私はざっくり500ファイル(曲)分ずつのフォルダに分けて処理を行いました。私のPCだと1時間以内には処理が終わったように記憶しています。間違っていたらスイマセン。
4)iTuneにアップロード
AppleMusicが1か月お試しだったので、それを利用することにしました。Apple IDは何故か以前に登録済みだったようです。カード情報などを追加で登録したような気がしますが、ちょっと悪戦苦闘し、整理できていないのでその辺は割愛します。 iTuneアプリはMicrosoft Storeからインストールしました。
Apple Musicのアップロード機能が有効になっていることを確認します。メインメニューの[編集(E)]-[環境設定(F)]-[一般] タブで[iCloudミュージックライブラリ]のチェックがONになっていればOKです。
iTuneをインストールすると[ミュージック]フォルダにiTunesフォルダができていました。その下にiTunes Mediaフォルダがあります。 どの操作が正式な推奨操作かわかりませんが、自分の行った操作はこうです。 iTunes MediaフォルダにMusicフォルダを作り(もしかしたら既にあるかもしれません。テスト用にアップしたファイルを全部消した時にフォルダごと削除されるようです)、そこにEドライブのフォルダをコピーします。
コピーが終わったら、iTuneアプリのメインメニューから[ファイル(F)]メニュー-[フォルダをライブラリに追加(D)]を選択します。 そこでMusicフォルダにあるフォルダを選択します。 これで選択したフォルダの音楽ファイルがクラウドにアップロードされます。 アップロード状況を見るには、メインメニューの下のバーで[ミュージック]を選択し、[ライブラリ]を選択状態にし、左側で[曲]を選択すると追加したファイルの一覧が表示されます。
項目に[iCloudの状況]がない場合は、メインメニューから[表示(V)]-[表示オプションを表示(Ctrl+J)]を表示し、iCloudの状況にチェックを入れます。
iCloudの状況は最初[待機中]になっています。Apple Musicにアップロードが終わると[アップロード済み]となります。この表示は逐次表示されるのではなく、1回に指定したファイルが全部アップロードした段階で一斉に[アップロード済み]、という表示になるようです。 ですので、一度に大量のファイルをアップロードすると[アップロード済み]になるのにとても時間がかかります。それが嫌な場合は小分けに処理した方が良いかもしれません。
iCloudの状況が[マッチ]となるものがあります。これはApple Music内に同じ曲があるということなのでしょう。一般的に有名なアーティストはサブスクの方が、曲が充実していると考え、アップロードしないことにしました。(もしかしたら、同じ曲があるのでアップロードしてないよ、という意味なのかもしれない。) (2022/8/27追記:マッチとなっている曲をよく見るとアルバムの全ての曲がマッチしているわけではないようです。アルバム中マッチとなっている曲が少ない場合があるかと思えば、1曲だけマッチでない曲もあります。マッチとなっている曲をAppe Musicの曲と置き換えようと考えましたが、いつ変わるかわからないように思えたので止めました。)
iCloudの状況が[拒否]となるものがあります。これはソニーやAmazonから購入した音楽ファイルがそうなっていました。(Amazonから購入した曲全てが拒否されたわけではないようです。)Apple Musicから登録しなおせという事なのでしょう。Apple Musicからアルバムをライブラリに追加しました。
iCloudの状況が[失敗]となるものがありました。これはいったん削除し、再度ファイルを追加すると、[アップロード済み]のステータスになりました。
5)プレイリスト全部
まず、やりたかったのはアップロードした曲全てを含むプレイリストです。全部で3000曲超のファイルを一気にアップロードしたのですが、これのプレイリストを作成するのが大変でした。操作としてはプレイリストにアルバムを次々にドラッグ&ドロップしていくだけなのですが、全部ドラッグしたつもりでもかなりの漏れがあったのです。 操作ミスしたのかiTuneがミスしたのか不明です。 プレイリストの曲数とアップロードしたファイル数が合わない。 プレイリストをファイル化できれば、機械的に比較することができるのですが、それができません。そうするとどれが漏れているのかわかり難いのです。 これを解消するためにファイルの一覧を作成しました。プレイリストを上から順にみていき、あることを確認できた曲をファイル一覧から消していきます。最後にファイル一覧に残ったファイルがプレイリストに追加し忘れたファイルということになります。
以下がファイル一覧を作るプログラムです。 filelist2.py
import os
import sys
import io
TOPDIR = "C:/Users/xxx/Music/iTunes/iTunes Media/Music"
def find_all_files(directory):
for cur_dir, dirs, files in os.walk(directory):
for file in files:
yield os.path.join(cur_dir, file)
if __name__ == '__main__':
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding=sys.stdout.encoding, errors="replace")
for file in find_all_files(TOPDIR):
root, ext = os.path.splitext(file)
if ext == '.mp3' or ext == '.mp4' or ext == '.wav':
print(file)
TOPDIR=に一覧を作りたいフォルダがあるディレクトリをセットします。 以下のように実行します。
>python filelist2.py > filelist.txt
13行目のsys.stdout = の部分は文字コードによるエラー終了を回避するコードです。 この行なしに、> filelist.txt としてファイルに書き込もうとするとUnicodeError(Unicodeに対応する文字がない)になりプログラムが途中で終了してしまったのです。そういうときは以下の文字がファイル名に含まれていました。 Óや゛(濁点のみ)など
>filelistと書かずに>python filelist2.pyだけだとエラーになりません。 この13行目を加えることによって変換できない文字は?に変換され、エラーで途中終了することが無くなりました。
6)Alexaアプリ設定
Alexaアプリの設定で普段使用するサブスクをAmazon MusicからApple Musicに変更しようと思いましたが、思いとどまりました。 デフォルトのサブスクはAmazon musicのままでApple Musicを使用するときはAlexaに明示的に「Apple Musicで~をかけて」と言う事にしたのです。こうすることで、2台のEchoでAmazon MusicとApple Musicで同時に音楽を聴くことができ、実質2名迄のファミリープランとして使えると考えたからです。Alexa自身の機嫌を保つのにも役立っているかもしれません。 アップロードした曲のプレイリストも「全部」を始めいくつか作成しましたが、それぞれに対して定型アクションを作成し、「アレクサ、apple musicでプレイリスト、~をシャッフル再生して」と言い換えさせることにしました。 これにより、「アレクサ、WCカラス」と言うだけでApple Musicのプレイリスト「WCカラス」がシャッフル再生されるようになりました。
以上、駆け足での説明でしたが、このように設定した結果、Alexaはほんの短い言葉で意図した通りの音楽を再生するとても素晴らしい機械になりました。 これまで気が利かない機械だったechoが突然、意図した通りのことをやってのける相棒のようになったのです。驚きました。 車にはこれまではプレイリスト毎にUSBメモリを作って、差し替えて聞いていたのですが、これからはもうその必要がありません。CDを買うごとにUSBメモリをメンテナンスする必要もなくなりました。echo autoを買っていたのですが、突然輝いて見えるようになりました。(通信が使えないときのためにUSBメモリのメンテは時々行う予定です) 48kbpsにしたことで音質が多少悪くなるかと思いましたが、ほとんど感じ取ることができません。ラジコの音質も劣ると感じたことも今までありません。車の中は雑音だらけですし、耳自体も元々バカ耳なのでしょう。