Raspberry Pi Zero moOde audio 640 (PCM5102A)

海外通販サイトのPCM5102A DACは手頃な価格で購入することができます。
AliExpressでは送料込み3$以下(300円位)で入手可能
到着まで日数が掛かるのが難点ですが!(30日以上かかった)
前回TDA1543 DACを組んだとき比較のために発注していたものです。

PCM5102A

データシート pcm5102a

基本はデータシートの26ページにある 10.1 Application Information.回路例と同じです。それに3.3Vレギュレーターを追加した回路構成となっています。
Piで使う場合はシルク印刷のSCK-BCKの間にあるJumperパターンをショートします。SCK-GNDを10K抵抗でプルダウンしてもOKです。


回路の定数はデータシートから参照しています。(実回路は多少違っているかもしれません)
レギュレーター廻りは定数、シンボルとも適当です。
SCKはプルダウンしないと基板に触れただけでブツブツいったり消音したりします。


付属していた6Pのピンヘッダを取り付け。9P側は1.27mmずれているのでユニバーサル基板には綺麗に付きません。押さえのためAudiojackの足を利用して4Pのピンヘッダをハンダ付け

裏側にもジャンパーパターンがあります。フィルター設定用でしょうか?


回路のとおりピンヘッダを取り付けてSCKをプルダウン。5本のケーブルをPiに接続すると音出しができます。
メスピンケーブルが無いのでアダプタを載せています。


TDA1543と同様にGPIOアダプタを作成


裏面


PCM5102AとTDA1543
差し替えが可能


音質はTDA1543と比べると若干高域が強めに聞こえます。(好み)
TDA1543の欠点として選局(選曲)再生時稀にパチっと特有のノイズが入ることがありますが流石にPCM5102Aは無いですね。


ドライバは汎用のGeneric-1 I2S (hifiberry-dac)
pulseaudio ボリュームも同様に取得できます。

Raspberry Pi Zero moOde audio 640(update)

2020年01月09日 raspbianのffmpeg廻りの更新でmplayerが動かなくなってしまいました。(mpvはOK)
直後にmplayerも更新がありましたが同じエラーを吐きます。
moOde audioもベースはraspbianなのでupdate && upgradeすると影響を受けてしまいます。

またbadタイミングでJCBA(musicbird)も障害があったようです。

libavcodec

$ sudo apt update
$ apt list --upgradable
ffmpeg/testing 7:4.1.4-1+rpt6~deb10u1 armhf [7:4.1.4-1+rpt1~deb10u1からアップグレード可]
libavcodec-dev/testing 7:4.1.4-1+rpt6~deb10u1 armhf [7:4.1.4-1+rpt1~deb10u1からアップグレード可]
libavcodec58/testing 7:4.1.4-1+rpt6~deb10u1 armhf [7:4.1.4-1+rpt1~deb10u1からアップグレード可]
---

libavcodecに問題がありそうです。
mplayerの実行

mplayer: relocation error: mplayer: symbol av_alloc_vdpaucontext version LIBAVCODEC_58 not defined in file libavcodec.so.58 with link time reference

radiko(mplayer)

$ ./radiko.sh -p FMT
authentication success
areaid: JP13
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
WARNING: No application or playpath in URL!
WARNING: You haven't specified an output file (-o filename), using stdout
Connecting ...
WARNING: Trying different position for server digest!
INFO: Connected...
mplayer: relocation error: mplayer: symbol av_alloc_vdpaucontext version LIBAVCODEC_58 not defined in file libavcodec.so.58 with link time reference
Starting Live Stream
INFO: Metadata:
0.826 kB / 0.09 sec
Caught signal: 13, cleaning up, just a second...
ERROR: Download: Failed writing, exiting!

対策

libavcodecは依存関係が複雑なので簡単に元に戻せないと思います。
1.修正された更新を待つ
2.radikoスクリプトのplayerをmpvにする
zeroでは少しmplayerより重くなる。(Pi3はOK)
3.upgradeをやめる
新規インストールや前回の630->640に移行するとき
640では現在インストールされているバージョンに合ったmplayerがインストールされます。
(640以降はraspbian次第)

radiko.sh(mpv)

play セクション(160行目辺り)

#mplayer -
mpv -
#ffplay -nodisp -

moode-r640-setup.txt

前回の630->640移行スクリプト
apt updateのみ実行して必要なパッケージをインストール
現在のmoOde audioはchromium-browserがインストールされています。Zeroでは重く必要ないのでアンインストールしてみました。300MB以上空き領域が増えるので最初にカードを拡張しなくてもインストール可能です。(ホームディレクトリに大きなデータが無い場合)

#!/bin/sh
# locale
locale-gen
# Timazone
timedatectl set-timezone Asia/Tokyo

apt -y purge chromium-browser
apt -y autoremove

apt update
apt -y install tcsh vim
apt -y install tightvncserver autocutsel
apt -y install ranger highlight
apt -y install pulseaudio pavucontrol ncmpcpp
apt -y install surf xbindkeys python3-tk
apt -y install mpv mplayer swftools libxml2-utils rtmpdump
apt -y remove youtube-dl
curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
chmod a+rx /usr/local/bin/youtube-dl
apt install -y fonts-ipafont fonts-ricty-diminished uim uim-anthy uim-xim uim-gtk2.0
apt -y autoremove
echo "--- systemctl ---"
systemctl enable vncboot
#systemctl enable dphys-swapfile

sh -c 'echo -n "Hit Enter key to reboot..."; read x'
reboot

simul.py

moOde audioのmms://はpulseaudio経由で再生しています。default playerを変更することで摘要されます。

20行目辺りに追記
# --- default set ---
# default player
player = "mpv"
116行目辺り変更
#subprocess.Popen("mplayer " + a, shell=True)
subprocess.Popen(player + " " + a, shell=True)


上記のスクリプトで再インストールしてみました。
多少重いのは変わらないですがmplayer,mpvも同じように使えます。
swapfileは640では仕様が変更になっているようです。(disable)
# moOde audio自身(内部)からコマンドライン(mplayerなど)を実行する際は必ずpulseaudioをスタートしておく必要があります。(100%で出力)pavucontrolも忘れないで起動

Raspberry Pi 4 USB Boot

当サイトのRaspberry Pi 4はHDMIモニタが無いことから相変わらずvncserverで試しています。

マイクロSDでもパフォマンスの向上は実感できますが気になるのはやはりUSB3.0経由のSSDからのブートになると思います。
Pi4ではPi3のOTP bootmodeに替わってEEPROMによるbootが採用されています。
但し現時点ではまだ実装されていないので従来通りSD boot〜SSDの起動になります。

実験の途中以前購入したSSD(64GB)を壊してしまいました。後述(・・;)
SSDは購入するとしてマイクロSDで実験〜SSD換装という流れでいきたいと思います。

SPI EEPROM

EEPROMの解説はここにあります。
Raspberry Pi 4 boot EEPROM

update && upgradeするとrpi-eepromはインストールされrpi-eeprom-updateは自動起動しています。
USB Bootが実装されたら改めて設定すれば良いようです。

USB Boot

Raspberry Pi 4 USB Boot Config Guide for SSD / Flash Drives
基本は従来からの方法と同じで内蔵スロット(mmcblk0p1)からboot、USB端子のデバイスから起動する流れになります。
内蔵スロットは(/dev/mmcblk0p1)だけあればいい
/boot/cmdline.txtの冒頭にUSBアダプタのデバイスIDを加える(アダプタによって?)
/dev/mmcblk0pNと/dev/sdXのPARTUUIDは違う値にする(以前はパーテーションを拡張すると違う値になったが現在の仕様は変化しない)
/etc/fstabのPARTUUIDを編集

SD Boot – SD

USB-SDカードからの起動は実用上は意味が無いのですが手順の確認(SSD壊れた)としてSD Boot – SDを実行します。

boot用にレアな512MB
Os起動用にSanDisk 32GB
32GBのカードには通常通り2019-09-26-raspbian-buster.imgを焼いておきます。


512MBのカードはFAT32でフォーマット、フラグにlbaを指定しておきます。
8GBのカードに256MBのFAT32パーティションを確保してもOKですね。
PARTUUIDは重複しなければいいので作業の楽なbootを違う値にします。
raspbian.img(raspbian version)でカードを作成すると同じPARTUUIDになります。


32GBのカードで通常通り起動、ログイン
512MB PARTUUID=”7ba0826f-01″
32GB PARTUUID=”d9b3f436-01″
512MBのカード(/dev/sda1)をマウントして/boot(/dev/mmcblk0p1)をコピーします。

$ sudo mount /dev/sda1 /mnt
$ sudo cp -rp /boot/* /mnt

32GBカードのPARTUUIDは変更していないのでコピーした/boot/cmdline.txtはそのままでOK
/etc/fstabの/boot PARTUUIDを変更

PARTUUID=7ba0826f-01  /boot           vfat    defaults          0       2
PARTUUID=d9b3f436-02  /               ext4    defaults,noatime  0       1

一旦シャットダウンして512MBカードを内蔵スロットに32GBカードをUSB端子に挿し替えて起動

/dev/mmcblk0 512MB
/dev/sda 32GB
あとはSDカードの替わりにSSDを接続すればOK

SD Boot – SSD


今回はkingstonのSSDを購入してみました。
参考サイトで推奨しています。
120GB Amazon ¥2450


最初にメニューのデバイスからパーテーションを作成、FAT32でフォーマット
書き込んで終了するとSDカードと同じように扱えます。


通常通りRaspbian 2019-09-26-raspbian-buster.imgを書き込み
rootfsを30GBに拡張、残りを適当に分割してパーテーション作成
PARTUUIDはSDカードに書き込んだ値と同じです。

# blkid | grep sdc
/dev/sdc1: LABEL_FATBOOT="boot" LABEL="boot" UUID="69D5-9B27" TYPE="vfat" PARTUUID="d9b3f436-01"
/dev/sdc2: LABEL="rootfs" UUID="24eaa08b-10f2-49e0-8283-359f7eb1a0b6" TYPE="ext4" PARTUUID="d9b3f436-02"
/dev/sdc3: LABEL="data" UUID="02b6b4cd-c63e-4048-816d-3b875866c0b0" TYPE="ext4" PARTUUID="d9b3f436-03"
/dev/sdc4: LABEL="data2" UUID="f6f604ff-5a15-4fa7-a812-f51ad8fcdb4f" TYPE="ext4"

USBアダプタ
以前2.5インチHDDで使っていたUSB3.0の古いタイプ

$ lsusb
Bus 002 Device 002: ID 1f75:0621 Innostor Technology Corporation

上記の参考サイトを見るとUSBアダプタによってはIDを指定する必要があると言っています。
上記のアダプタも必要でした。(パフォーマンスは落ちるらしい)
/boot/cmdline.txt (512MB SDカード)

usb-storage.quirks=1f75:0621:u console=serial0,115200 console=tty1 root=PARTUUID=d9b3f436-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles


32GB SDカードをSSDに付け替えて起動
SSDから起動しています。

壊れたSSD、USBアダプタ

アダプタ

Bus 001 Device 007: ID 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. JMS567 SATA 6Gb/s bridge


壊れたときの状況はなにかの拍子に突然入出力エラーが発生(マウントが外れているようだ)
再起動すると復帰するが再度発生。何度か繰り返すと全く無反応(死んだ)SSD、そしてUSBアダプタも同時に!
SSD、USBアダプタともOsから全く認識しなくなりました。
この中華アダプタと同タイプのSSDはPi3で現在正常に動作しています。
今回購入したKingston + 中華アダプタの組み合わせではやはり入出力エラーが発生します。(1回確認してそれ以上はやめときました)

このことからPi4とJMS567ドライバになにか問題があるものと思っています。
USB Bootはまだ正式にサポートされていないので自己責任ってやつですね。イタい!

Raspberry Pi Storage Benchmarks

参考にしたサイトにはBenchmarking Scriptのページがあります。

$ sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash


SanDisk 32GB
内蔵スロット mmcblk0p1 mmcblk0p2
マイクロSDも起動してしまえばメモリで動いているので大きなファイル、大量のファイルを扱う場面で無ければPi4ではそう遅さを感じることは少ないと思います。


Kingston SSD 120GB
Disk Reedが遅いですね。本来は300MB/sくらい出るものと思います。
期待したスコアの半分しか出せませんでした。
USBアダプタの性能と思います。

SSDケースの作成

取り敢えずKingston + Innostorアダプタも安定して動作しているのでケースを作成します。

とてもケースと呼べる代物ではありませんがSSDのパッケージ(プラゴミ)と以前工作に使ったアルミ板(0.5mm)とLアングルの廃材で作成します。
SSDの下には水道屋の広告マグネットシートを仕込んでいます。


適当に切って両面テープで軽く止めています。


ケーブルに引きずられることもなくいい感じに収まっています。

Raspberry Pi Zero moOde audio 640

前回はmoOde audio 630をインストール、設定してきましたがmoOde audio 640がリリースされています。
変更の内容は以下に紹介されています。
http://moodeaudio.org/forum/showthread.php?tid=1929
UIは531あたりからほとんど変わってないと思います。
630ではカーネルもアップデートしているので枯れたデバイスでは敢えて640にする必要も無いのですが手を加えた設定をアップデートに適用する方法として試してみます。

アップデート

630から640にアップデートする手法もあるようですが640の新規カードを作成して追加したファイル、設定をコピー、必要なパッケージをクリーンインストールしていきたいと思います。
現在のOs(630)は正常に稼働しているものとして新たにカードを用意します。

カード作成

moode-r640-iso.zipをダウンロード、展開してカードに焼いておきます。

テキストファイル作成
ファイル名は(適当に)テキストファイルを作成して新たに焼いたカードのルートディレクトリ(/)にコピーしておきます。現稼働中の(630)から必要なファイルを新しいカードにコピーします。
パスワード関連のファイルをコピーすることでwww-dataの面倒な設定は一切不要になります。
www-data(pulseaudio)は/var/www/htmlに纏めています。
ユーザーが実行するファイル(/home/pi)は全てホームディレクトリにあります。
moode-r640-config.txt

#!/bin/sh
cp /etc/passwd ./etc
cp /etc/shadow ./etc
cp /etc/group ./etc
cp /etc/gshadow ./etc
cp /etc/sudoers ./etc
cp -rp /var/www/html ./var/www
cp /etc/dhcpcd.conf ./etc
#cp /etc/wpa_supplicant/wpa_supplicant.conf ./etc/wpa_supplicant
cp /etc/pulse/default.pa ./etc/pulse

cp /etc/default/locale ./etc/default
cp /etc/locale.gen ./etc
cp /etc/init.d/vncboot ./etc/init.d
cp /usr/local/bin/dwm ./usr/local/bin
cp /etc/dphys-swapfile ./etc
cp -r /etc/mplayer ./etc
cp -r /etc/fonts ./etc

mv ./home/pi ./home/pi.def
cp -rp /home/pi ./home

下記のファイルは新たなカード(640)で起動したら必要なパッケージをインストールします。
moode-r640-setup.txt

#!/bin/sh
# ssh pi@moode "moodeaudio"
# locale
locale-gen
# Timazone
timedatectl set-timezone Asia/Tokyo
apt update && apt -y upgrade
apt -y install tightvncserver autocutsel
apt -y install ranger highlight
apt -y install pulseaudio pavucontrol ncmpcpp
apt -y install surf xbindkeys python3-tk
apt -y install mpv mplayer swftools libxml2-utils rtmpdump
apt -y remove youtube-dl
curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
chmod a+rx /usr/local/bin/youtube-dl
apt install -y fonts-ipafont fonts-ricty-diminished uim uim-anthy uim-xim uim-gtk2.0
apt -y autoremove
echo "--- systemctl ---"
systemctl enable vncboot
systemctl enable dphys-swapfile

sh -c 'echo -n "Hit Enter key to reboot..."; read x'
reboot

設定コピー

Pi ZeroではマイクロUSB端子1個しかないので仮にハブを取り付けています。

nfsやsambaを利用する方法やカードを外して別マシンから手動でコピーすることも可能ですがいずれもパーミッションを維持してコピーする必要があります。

新しいカード(640)をハブにセット、マウントしたらマウント先に移動してmoode-r640-config.txtを実行、必要なファイルをコピーします。

$ lsblk
$ sudo mount /dev/sda2 /media
$ cd /media
$ sudo sh moode-r640-config.txt

moOde audio 640起動

カードを入れ替えてmoOde audio 640を起動、sshで接続します。

$ ssh-keygen -R moode
$ ssh pi@moode
$ sudo raspi-config


raspi-configを実行してSDカードの拡張だけ実行しておきます。
7 Advanced Options
A1 Expand Filesystem Ensures that all of the SD card storage is available
raspi-configを終了してリブート

再度sshで接続 moode-r640-setup.txtを実行

$ ssh pi@moode
$ cd /
$ sudo sh moode-r640-setup.txt

locale,Timazoneを設定してパッケージをインストールします。
途中コピーした設定ファイル関連で確認ダイアログが出ますが全て[デフォルト=N] ?(現在のファイルを使用)エンター vimなど必要なものがあれば追記
Hit Enter key to reboot… リブート
moode player以外の前回まで設定した内容は全て640で復元されているはずです。

moOde audio 設定

moOde Playerはクライアントのブラウザから通常通り設定し直します。

I2Sドライバーをセットして再起動
Music Sources(Library)をセット
当サイトではほかはほとんどデフォルト

Uiは特に変更は無いように見えます。


前回の補足です。
pulse.phpの音量表示はリアルタイムに反映しません。再読込するかmoOdeZのロゴをクリックすると再読込します。pulse.phpは5分で再読込します。(変更可)
simulラジオ再生中radikoに切り替えるとタイトル(ラベル)にはラジオ局表示が残っていますがON AIRボタンでデフォルトラベルを表示、現在の情報を表示します。(例外あり)

USB2.0ハブ経由の動画再生時のpulseaudioはcpu使用率100%近くなり音声が乱れます。Zeroのスペック、イーサネットアダプタなど環境に依存するようです。
またPi1BのMPDは問題なく再生可能ですがRadikoはやはりcpu使用率100%近くなってしまいます。
シングルコアのBCM2835ではこの辺が限度と思います。

当サイトのZero moOde audioは常時稼働しておりRadikoの再生開始に多少時間を要する以外は特に不足なく運用しています。
必要に応じて起動するような環境ではPi2以降で構築すれば快適と思います。

Raspberry Pi Zero moOde audio 630(simul.py radiko)

moOde audioをインストールしてからvncserver,pulseaudioを導入してきました。
これまで他のマシンで設定したsimulラジオやradikoは自マシンのデバイスやpulseaudioに一括で送ることができましたがmoOde audioからはMPDはダイレクトにradikoなどはpulseaudio経由で再生することになります。

今回はできるだけ当サイトが使いやすいように編集してみました。
設定などに誤りがあると100%で出力することがあります。
確実に動作するまではアンプのボリュームを充分絞っておくか電源を切っておくようにします。

simul.py(moOde audio)

moOde audioのMPDはプロトコル(mms://)に対応していないのでCSRAの一部のラジオ局はMPDで再生することはできません。mms://はpulseaudio経由で再生するようにしています。

ファイル置き場、ファイル名は以前に設定した内容と一部変更しています。
simul.py simul-vol.pyは~/bin
リスト関連は~/radioで基本変わりませんがNHKもリストを作成しています。
NHK.txt NHK.list

mms://は一部urlを変更しています。(?MSWMExt=.asfを削除)各エリアのリストにあるurlも変更します。
mms.list mms-pulse_vol.py


# NHKのvolが抜けていました。
リストから拾って~/rdio/volの末尾に追記してください。


起動時のタイトルラベル(グリーンに設定)
再生時は赤系でラジオ局を表示。そのまま表示させると色や文字が残ってしまうので一旦空白文字で上書きしてから再書き込みしますが環境によって幅の調整が必要かもしれません。

play_selectionでurlがmms://ならばpulseaudioを–startしてmplayerで実行します。
次にon_air_selectionに行って各ラジオ局を取得します。
ラベル表示はラジオ局、デフォルト(停止、その他)、mms://の3パターン
mms://再生時はここで~/radio/CSRA/mms-pulse_vol.pyを実行します。
mms://(pulseaudio)のデフォルトボリュームはこのファイルで設定しています。
(“pactl set-sink-volume 0 20%”)適宜変更
戻ってJCBAを再生ならばIDをファイル(jcb_play)に保存します。
ファイルjcb_play(/tmp)は実行ユーザーに変更があった場合パーミッションの関係で書き込みができなくなってしまうのでユーザーディレクトリに変更しました。(simul.py simul-vol.py)
次にsimul-vol.pyを実行して音量を設定します。
MPDのデフォルトボリュームはsimul-vol.pyとkillall.shで設定(“mpc volume 10”)適宜変更
moOde audio(MPD)の出力レベルは高めになっているようです。


NHK
リストを作成、ラジオ局、音量個別に設定可


mms://はpulseaudioで再生
Pi Zeroでは再生開始に10秒位かかります。
MPD – pulseaudioはシームレスに選局できます。

simul.py(Raspberry Pi Desktop)

Pi4(vncserver)からpulseaudioでmoOde audioに送っています。

自マシンで再生(pulseaudio or alsa)またはpulseサーバー側で再生するかはmpd.conf pulse/client.confの設定次第になります。
simul.py
simul-vol.py
mms-mpc_vol.py
その他リスト関係は共通

moode audioのMPDダイレクト再生とRaspberry Piのmpd.confにaudio_output pulseを指定したときのmpc volume値取得に挙動の違いが見られます。Raspberry Piではsimul-vol.py実行の前で適切にsleepを入れる必要があります。

Raspberry Pi Desktopはkillall.shにsink-volumeを設定しています。MPDではsinkとsource volume値にずれが生じてきます。ncmpcppに表示されるsource-volume値が実音量値です。再生開始時はリストでsink-volume以下の値を設定している以外はsource-volumeと合うようになります。設定したsink-volumeはradikoのデフォルト音量値にもなります。
~/bin/killall.sh (chmod 755 killall.sh)

#!/bin/sh
killall -q mpv && killall -q mplayer && killall -q ffplay
mpc pause 1>/dev/null 2>/dev/null
sleep 0.2
mpc volume 20 1>/dev/null 2>/dev/null
sleep 0.2
mpc clear 1>/dev/null 2>/dev/null
pactl set-sink-volume 0 20%

radiko.py


参考 各地域のIDに書き換える
radiko.py moode audio
radiko.py raspberry pi
Pi Zeroはスペック的に厳しい。起動は遅いが再生自体はOK

swapもある程度消費します。
/etc/dphys-swapfile

CONF_SWAPSIZE=512 # 適当に

# systemctl restart dphys-swapfile

mplayerはcacheを少し(適当に!多いと再生開始遅くなる)
/etc/mplayer/mplayer.conf

cache = 100

pulse.php
moode audioから起動アクセス

# apt install surf

$ surf localhost/html/pulse.php

再生はpulseaudioがスタートしているときmoode playerのplayボタンで再生不可を除いてsimulラジオ、radiko間は自由に選局が可能です。
pulseaudioのスタートは数値の無い状態でpulseボタンまたは数値ボタンをクリックでスタートします。
数値ボタンは終了時の値を保存しています。もう一度クリックするとデフォルト値をセット
pulseボタンはmoode自身のpulseaudio経由で再生中のラジオなどを停止して待機
moodeボタンはpulseaudioをkillしてmoode playerを再生
playlistに登録があれば再生、無ければaddして再生開始
/var/www/html/pulse.phpを編集してplaylist,挙動は編集できます。
mボタンはpulseaudio 10%にミュート、MPDはpause
音量ボタンはdB(対数)で変化しますがアンプのボリュームを絞って高めで使用している場合は%で指定すると使いやすいかもしれません。
STOP-PLAYLIST_ADDはmoode playerの目覚ましラジオセット用
www-dataからスタートしたpulseaudioはアクセスが無いとすぐkillしてしまいます。Lan内のどれか1台がpavucontrolを起動しておくことでpulseaudioはスタート状態を保ちます。

pulse.phpをクライアントの小さいwebブラウザからアクセスするとこんなとき便利です。
最初にpulseaudioをスタートしてからコンテンツを開かないと音声はpulseaudioに向きません。

moOde6.4.0がリリースされていますね。ほとんど変わらないと思いますが次は今回設定した内容をできるだけ簡単に移行してみたいと思います。

Top