Tei5’s Blog

Tei5 の メモ書き

Raspberry Pi Zero WでFMジャングルを自動再生するインターネットラジオを作る

Raspberry Pi Zero W v1.1を使って、電源を入れると自動でインターネットラジオ「FMジャングル」を再生する小型ラジオを作ったときの設定メモです。

音声出力にはUSB-DACを使用します。 今回は、Windowsでは「AB13X」と表示されるUSB Type-C → 3.5mmステレオ出力アダプタを、Raspberry Pi Zero WのmicroUSB OTG経由で接続しました。

構成

  • Raspberry Pi Zero W v1.1
  • Raspberry Pi OS Lite 32-bit
  • Wi-Fi接続
  • USB-DAC
  • mpvでHLSストリームを再生
  • systemdで起動時に自動再生

1. 必要なパッケージを入れる

sudo apt update
sudo apt install -y mpv alsa-utils curl

2. USB-DACを確認する

USB-DACを接続して、認識されているか確認します。

lsusb
aplay -l
cat /proc/asound/cards

例:

card 1: Audio [AB13X USB Audio], device 0: USB Audio [USB Audio]

この場合、USB-DACは card 1, device 0 です。

3. USB-DACから音が出るか確認する

speaker-test -D plughw:1,0 -c 2 -t sine

音が出ればOKです。 止めるときは Ctrl + C です。

4. mpvの音声出力先を設定する

毎回USB-DACを指定しなくてよいように、mpvの設定ファイルを作ります。

mkdir -p ~/.config/mpv
nano ~/.config/mpv/mpv.conf

内容:

no-video=yes
ao=alsa
audio-device=alsa/plughw:Audio,0
volume=80

環境によって Audio で指定できない場合は、次のようにカード番号で指定します。

no-video=yes
ao=alsa
audio-device=alsa/plughw:1,0
volume=80

5. 再生テスト

まずNHK FMなどで再生確認します。

mpv --no-video "https://simul.drdi.st.nhk/live/5/joined/master.m3u8"

次に、FMジャングルを再生します。

mpv --no-video \
  --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
  --referrer="https://listenradio.jp/" \
  --http-header-fields="Origin: https://listenradio.jp" \
  "https://mtist.as.smartstream.ne.jp/30013/livestream/playlist.m3u8"

これでFMジャングルが再生できれば成功です。

6. 自動再生スクリプトを作る

例ではユーザー名を piuser としています。 実際のユーザー名に置き換えてください。

mkdir -p /home/piuser/bin
nano /home/piuser/bin/play_fmjungle.sh

内容:

#!/bin/bash

URL="https://mtist.as.smartstream.ne.jp/30013/livestream/playlist.m3u8"

exec /usr/bin/mpv --no-video \
  --demuxer-lavf-o=http_persistent=0,reconnect=1,reconnect_streamed=1,reconnect_delay_max=10 \
  --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
  --referrer="https://listenradio.jp/" \
  --http-header-fields="Origin: https://listenradio.jp" \
  "$URL"

実行権限を付けます。

chmod +x /home/piuser/bin/play_fmjungle.sh

手動で確認します。

/home/piuser/bin/play_fmjungle.sh

7. systemdで起動時に自動再生する

サービスファイルを作ります。

sudo nano /etc/systemd/system/fmjungle.service

内容:

[Unit]
Description=FM Jungle Internet Radio Player
After=network-online.target sound.target
Wants=network-online.target

[Service]
Type=simple
User=piuser
ExecStart=/home/piuser/bin/play_fmjungle.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

有効化して起動します。

sudo systemctl daemon-reload
sudo systemctl enable fmjungle.service
sudo systemctl start fmjungle.service

状態確認:

systemctl status fmjungle.service

ログ確認:

journalctl -u fmjungle.service -f

再起動して、自動再生されるか確認します。

sudo reboot

8. Wi-Fiを複数登録する

自宅と会社など、複数のWi-Fiを登録しておくと、現在見えているSSIDに自動接続できます。

現在の接続確認:

nmcli connection show --active
nmcli device status

Wi-Fi一覧:

nmcli device wifi list

自宅Wi-Fiを登録する例:

sudo nmcli connection add type wifi ifname wlan0 con-name home-wifi ssid "自宅SSID"
sudo nmcli connection modify home-wifi wifi-sec.key-mgmt wpa-psk
sudo nmcli connection modify home-wifi wifi-sec.psk "自宅パスワード"
sudo nmcli connection modify home-wifi connection.autoconnect yes
sudo nmcli connection modify home-wifi connection.autoconnect-priority 10

会社Wi-Fiを登録する例:

sudo nmcli connection add type wifi ifname wlan0 con-name office-wifi ssid "会社SSID"
sudo nmcli connection modify office-wifi wifi-sec.key-mgmt wpa-psk
sudo nmcli connection modify office-wifi wifi-sec.psk "会社パスワード"
sudo nmcli connection modify office-wifi connection.autoconnect yes
sudo nmcli connection modify office-wifi connection.autoconnect-priority 20

優先度は数字が大きい方が優先されます。 上記例では、両方見えている場合は office-wifi が優先されます。

手動で切り替える場合:

sudo nmcli connection up home-wifi
sudo nmcli connection up office-wifi

現在接続しているSSIDを確認:

nmcli -t -f ACTIVE,SSID dev wifi | grep '^yes'

IPアドレス確認:

hostname -I

9. DHCPになっているか確認する

現在有効な接続名を確認します。

nmcli connection show --active

例:

NAME         TYPE  DEVICE
office-wifi  wifi  wlan0

DHCPか確認します。

nmcli connection show office-wifi | grep ipv4.method

DHCPなら次のように表示されます。

ipv4.method: auto

ルーティングでも確認できます。

ip route

次のように proto dhcp が出ていればDHCPで取得しています。

default via 192.168.0.1 dev wlan0 proto dhcp

10. SSHで状態確認する

SSHでログイン後、次のコマンドで状態を確認できます。

Wi-Fi接続状況:

nmcli device status
nmcli -t -f ACTIVE,SSID dev wifi | grep '^yes'
iw dev wlan0 link

インターネット接続確認:

ping -c 3 8.8.8.8
ping -c 3 google.com

FMジャングルサービスの状態:

systemctl status fmjungle.service

mpvが動いているか確認:

pgrep -a mpv

ログ確認:

journalctl -u fmjungle.service -n 50

リアルタイムでログを見る場合:

journalctl -u fmjungle.service -f

再生を再起動する場合:

sudo systemctl restart fmjungle.service

11. まとめ確認スクリプト

毎回複数のコマンドを打つのが面倒なので、簡易チェック用スクリプトを作ります。

nano /home/piuser/bin/radio_status.sh

内容:

#!/bin/bash

echo "===== Host ====="
hostname
hostname -I
echo

echo "===== Wi-Fi ====="
nmcli -t -f ACTIVE,SSID dev wifi | grep '^yes' || echo "No active Wi-Fi"
iw dev wlan0 link
echo

echo "===== Internet ====="
ping -c 1 -W 2 8.8.8.8 >/dev/null && echo "Internet: OK" || echo "Internet: NG"
echo

echo "===== FM Jungle Service ====="
systemctl is-active fmjungle.service
systemctl is-enabled fmjungle.service
echo

echo "===== mpv Process ====="
pgrep -a mpv || echo "mpv is not running"
echo

echo "===== Audio Devices ====="
aplay -l
echo

echo "===== Recent Logs ====="
journalctl -u fmjungle.service -n 15 --no-pager

実行権限:

chmod +x /home/piuser/bin/radio_status.sh

実行:

/home/piuser/bin/radio_status.sh

12. トラブル時の確認ポイント

音が出ない

USB-DACが見えているか確認します。

aplay -l
cat /proc/asound/cards

mpvの設定も確認します。

cat ~/.config/mpv/mpv.conf

Wi-Fiにつながらない

nmcli device status
nmcli connection show
nmcli device wifi list

2.4GHzのSSIDを使っているか確認します。 Raspberry Pi Zero Wは5GHz Wi-Fiには対応していません。

FMジャングルが鳴らない

配信URLにアクセスできるか確認します。

curl -L -I \
  -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
  -H "Referer: https://listenradio.jp/" \
  -H "Origin: https://listenradio.jp" \
  "https://mtist.as.smartstream.ne.jp/30013/livestream/playlist.m3u8"

200 OK が返れば、配信サーバーには到達できています。

サービスを再起動します。

sudo systemctl restart fmjungle.service

13. 補足:安全シャットダウンボタン

電源をいきなり抜くとSDカード破損の可能性があるため、安全シャットダウンボタンを付けるのもよいです。

GPIO3、つまり物理ピン5と、GNDの物理ピン6に押しボタンを接続します。

GPIO3 / 物理ピン5 ---- ボタン ---- GND / 物理ピン6

設定ファイルを開きます。

sudo nano /boot/firmware/config.txt

環境によっては次の場合もあります。

sudo nano /boot/config.txt

最後に追加します。

dtoverlay=gpio-shutdown

再起動します。

sudo reboot

これでボタンを押すと安全にシャットダウンできます。

まとめ

Raspberry Pi Zero Wでも、ブラウザを使わず mpv で直接HLSストリームを再生できれば、軽量なインターネットラジオ端末として十分使えます。

今回のポイントは次の3つです。

  • USB-DACをALSAで認識させ、mpvの出力先に設定する
  • FMジャングルのURLにUser-Agent、Referer、Originを付けて再生する
  • systemdで起動時に自動再生する

これで、電源を入れるだけでFMジャングルが鳴るRaspberry Piラジオになります。

Edge でPDFがうまく表示されない時の対応

Edge上でPDFが表示されなかったり、枠だけしか表示されなかったりする。

 

確認した環境 Windows10、Edge Version 136.0.3240.76

対応方法:
1)アドレスバーに「 edge://flags/ 」と入力。
2)フラグの検索で「PDF」を検索。
3)

・ New PDF Viewer を [ Disabled ] に
・ OOPIF for PDF Viewer Extension を [ Enabled ] にして、画面一番下の「再起動」からブラウザの再起動する。

これでOKだった。


試験段階の機能を使っているので、Edgeのバージョンアップ等に伴い、不具合が出る可能性がある。


以下、はっきりしていない情報。
2024年11月ごろのバージョンアップで、Edge内部のPDFのライブラリ(?)が、Adobe ReaderAcrobat?)に変わったことにより、PDF表示にトラブルが発生する様になった模様。
New PDF Viewer が ディフォルトでは、Adobeのビューアーが起動しているようだが、環境によってPDFがうまく表示されないことがあった。
AdodeってPDFの規格を決めてるんじゃないの・・・?

複数のキーボードを接続し、キーボード毎に別のカスタマイズ。ソフト5選

複数のキーボードを接続し、それぞれに異なる設定や機能を割り当てたい場合、AutoHotKeyのような標準ツールだけでは限界があります。そこで、HID MacrosやGaming Keyboard Splitterのような代替ソフトが役立ちます。この記事では、これらのソフトの代替として使える5つのツールを紹介します。それぞれの特徴や選び方のポイントも解説するので、あなたのニーズに合ったものを探してみてください。


1. AutoHotKey (AHK)

    • 概要: 無料のオープンソースツールで、キーボードやマウスの動作をカスタマイズできます。
    • 特徴:
        • スクリプトを書くことで、キー入力の再割り当てやマクロ作成が可能。

        • 標準では複数キーボードの識別が難しいが、Raw Input APIを活用すれば対応可。

        • コミュニティが活発で、豊富なサンプルスクリプトが利用可能。
    • こんな人におすすめ: プログラミングに抵抗がなく、柔軟性を重視する人。

2. LuaMacros

    • 概要: HID Macrosの後継とも言えるツールで、複数キーボードの個別識別が得意です。
    • こんな人におすすめ: HID Macrosの代替を探している人や、細かい設定をしたい上級者。
    • HID Macrosとの違い: より強化されたデバイス識別機能。

3. Keyboard Splitter

    • 概要: 複数のキーボード入力を仮想的なXbox 360コントローラーに変換するツール。
    • 特徴:
        • 最大4つの仮想コントローラーを生成し、各キーボードを独立して割り当て。

        • ゲーム用途に特化しており、設定がシンプル。

    • こんな人におすすめ: ゲームで複数キーボードを使いたい人。
    • HID Macrosとの違い: マクロ作成はできないが、ゲーム向けに最適化。

4. AntiMicroX

    • 特徴:

        • 複数デバイスの識別は限定的だが、プロファイル管理が便利。

        • 軽量でゲーム用途に強い。
    • HID Macrosとの違い: デバイス識別は弱いが、マクロ機能は充実。

5. Interception Driver + 専用スクリプト

    • 概要: 低レベルの入力制御を可能にするドライバで、スクリプトと組み合わせると強力。
    • 特徴:
        • キーボードごとのデバイスIDを捕捉し、カスタム設定を実現。


        • 設定が複雑で、上級者向け。
    • こんな人におすすめ: 究極の柔軟性を求める人や、カスタマイズを楽しみたい人。
    • HID Macrosとの違い: GUIなし、完全なカスタム実装が必要。


選び方のポイント

    • 簡単さを重視するなら: Keyboard SplitterやAntiMicroXが直感的で初心者向け。
    • 複数キーボードの識別が目的なら: LuaMacrosやInterception Driverが最適。
    • マクロの自由度を求めるなら: AutoHotKeyが無限の可能性を提供。
    • ゲーム特化なら: Keyboard Splitterがコントローラーエミュレーションで便利。


まとめ

HID Macrosの代替としてはLuaMacrosが最も近く、複数キーボードの識別とマクロ設定に優れています。ゲーム用途ならKeyboard Splitterが使いやすく、カスタマイズ派にはAutoHotKeyInterception Driverがおすすめです。
具体的な用途や環境に合わせて選べば、複数のキーボードを効率的に活用できます。ぜひ試してみてください!


Grok3にて作成

VolumioのWEBラジオをPCから一発選局する

Voluimio にWEBラジオがあるが、よく聞くチャンネルを一発で選曲する方法

前提 として、Volumioが正常に稼働していること

Windowsショートカットやバッチファイルから

curl -X POST "http://192.168.1.100/api/v1/replaceAndPlay" -H "Content-Type: application/json" -d "{\"service\":\"webradio\",\"type\":\"webradio\",\"uri\":\"WEB_RADIO_URL\",\"title\":\"Station_Name\"}"

実際は、下記の部分を書き換える。
Voluimoのアドレス:192.168.1.100
uri:WEB_RADIO_URL
title:Station_Name

URLを調べるには、Volumioで一旦選局し、例えばコマンドプロンプトで下記のコマンドで使い、現在選局中のURLを取得できる

curl "http://192.168.1.100/api/v1/getstate”

例えばこの様な出力があるので、ここから、URLなどを取得する。

{"status":"play","position":0,"title":"Maxwell - This Woman's Work ","artist":"UrbanRadio Smooth Jazz","album":null,"albumart":"http://cdn-radiotime-logos.tunein.com/s159769q.png","uri":"http://hydra.cdnstream.com/1541_128","trackType":"webradio","seek":5255,"duration":0,"samplerate":"","bitdepth":"","channels":2,"bitrate":"128 Kbps","random":null,"repeat":null,"repeatSingle":false,"consume":true,"volume":78,"dbVolume":null,"mute":false,"disableVolumeControl":false,"stream":true,"updatedb":false,"volatile":false,"service":"webradio"}

具体的な例として、下記の方法で、UrbanRadio Smooth Jazzに選局ができる

curl -X POST "http://volumio/api/v1/replaceAndPlay" -H "Content-Type: application/json" -d "{\"service\":\"webradio\",\"type\":\"webradio\",\"uri\":\"http://hydra.cdnstream.com/1541_128\",\"title\":\"UrbanRadio Smooth Jazz\"}"

具体的な例として、下記の方法で、FMジャングルだと以下の通り

curl -X POST "http://volumio/api/v1/replaceAndPlay" -H "Content-Type: application/json" -d "{\"service\":\"webradio\",\"type\":\"webradio\",\"uri\":\"http://mtist.as.smartstream.ne.jp/30013/livestream/playlist.m3u8#?\",\"title\":\"FMジャングル\"}"

ついでに音量調節するには、以下の通り

curl "http://volumio/api/v1/commands/?cmd=volume&volume=50"

このコマンドでvolume=50の部分を変更することで、音量を0から100の範囲で指定できる(%設定)

硬貨 重量計算機

一枚 種類 重量(g) 枚数
(枚)
金額
(円)
1.0g 1円 0 0
3.75g 5円 0 0
4.5g 10円 0 0
4.0g 50円 0 0
4.8g 100円 0 0
7.0g 500円 0 0

合計金額: 0円

硬貨の種類毎に合計重量を測って入力すると、
合計金額を計算します。

 重量計測ですから、計りの精度のによっては枚数が多いと若干誤差が出ます。
 通常数十枚程度では問題ありません。
 旧500円玉は 7.0g、新500円硬貨は 7.1g です。
 このページを使った場合のトラブルについては、責任を負いません。

はてなブログで、Javascript 実行する

ちょっとしたツールをWEB上に置いておきたいときに。

はてなブログでは、Javascriptが実行できる。

ポイントは、

  • 編集モードを「Markdown」に変更する。(「はてな記法」でも可能かも)
  • < script >~< /script >で囲んでJavascriptを記載する。
  • < script > の前にスペースがあってはいけない?(タグの前にスペースがあるのがだめなのかも)

実行例

ボタンをおすと、「おされた!」のダイアログが出る。



このテストのソース

<button id="pushButton">おす</button>
<script>
  document.getElementById('pushButton').addEventListener('click', function() {
  alert('おされた!');
});
</script>

これで、計算ツールなどもWEBに載せられるな。

Adobe IllustratorからFusion 360へのSVGインポート

Adobe IllustratorからFusion 360へのSVGインポート方法マニュアル

はじめに

このマニュアルでは、Adobe Illustratorで作成したSVGファイルをFusion 360に正確にインポートする方法を解説します。Illustratorでの準備からFusion 360での読み込み手順までを詳細に説明します。

Adobe Illustratorでの準備

  1. トリムエリアを使用して原点を設定

    • Illustratorでオブジェクトを作成し、必要な原点を設定します。ガイドを利用すると便利です。
    • トリムエリアの左上が、SVGの原点となり、Fusionに読み込んだ時の原点になります。
    • トリムエリアから図形が出ていても問題ありません。
  2. SVGとしてエクスポート

    • ファイルメニューからエクスポートを選び、SVG形式で保存します。
    • エクスポート設定で、精度を7桁まで上げてください。これにより、正確な寸法が維持されます。
    • 毎回エクスポートする際に精度を確認してください。

Fusion 360でのインポート

  1. SVGファイルの挿入

    • Fusion 360を起動し、プロジェクトを開きます。
    • メニューバーから挿入を選択し、その後SVGの挿入を選びます。
  2. SVGファイルの読み込み

    • マイコンピューターから挿入を使用して、先ほどエクスポートしたSVGファイルを選択します。
    • 読み込みウィンドウが表示されます。
  3. 平面の尺度の設定

    • 読み込みウィンドウの平面の尺度の部分に、100÷75と入力します。
    • これにより、Illustratorの100mmがFusion 360の100mmとして正確にインポートされます。

まとめ

以上の手順に従うことで、Adobe Illustratorで作成したデザインを正確にFusion 360にインポートできます。特に、精度の設定や平面の尺度の調整が重要なポイントです。正確な寸法を維持するために、各手順をしっかりと確認してください。


ChatGPTにて作成。