📝 はじめに
こんにちは、piyovateです。
前回は、フォロワー数の「任意日付との比較」をできるように機能をアップデートしました。
今回は、「フォロワーが増えたときに効果音を鳴らす」機能を追加してみました!
数字だけじゃなく、耳でも変化を感じられるようになったことで、ちょっと楽しい仕掛けになっています。
🎯 今回の概要
- フォロワー数が前回値より増加した場合のみ音を再生
- 音声は
amixer
+aplay
によるWAV再生(Raspberry Pi 5) -
volume
を設定ファイルで管理できるように対応 - モジュール化・docstring追加によるリファクタリングも実施
🔗 GitHubでコードを公開中
セットアップ手順やコード全体は以下のリポジトリにて公開しています👇
🔗 GitHub - SystermDevelopment/follower-counter
🔊 フォロワーが増えたときに音を鳴らす
■ やりたいこと
-
update_label()
でフォロワー数を更新するタイミングで、
前回値(ラベルに現在表示されている数値)と比較して、増えていたら再生
■ 実装のポイント
# 旧値をラベルから取得し、差分を比較
old_value_str = count_label.text().split(": ")[1]
if self.should_play_sound(old_value_str, new_value):
play_increase_sound(volume=self.sound_volume)
-
"N/A"
など非数値データのときは再生しないよう安全に判定しています。
🧠 再生処理を関数化&分離
音声再生処理は sound.py
に切り出し、以下のように実装しました。
■ sound.py
"""
このモジュールは Linux 環境で効果音を再生するための関数を提供します。
amixer と aplay に依存しています。
"""
from pathlib import Path
import subprocess
def play_increase_sound(sound_path: str = "./asset/success.wav", volume: int = 100):
if not (0 <= volume <= 100):
print(f"音量値エラー: {volume}(0〜100の範囲で指定してください)")
return
if Path(sound_path).exists():
try:
subprocess.run(["amixer", "sset", "Master", f"{volume}%"],
check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
subprocess.run(["aplay", sound_path],
check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except Exception as e:
print(f"再生エラー: {e}")
else:
print(f"ファイルが存在しません: {sound_path}")
📁 設定ファイルの拡張(音量管理)
設定ファイル settings/settings.json
に音量設定を追加:
{
"compare_days_ago": 1,
"daily_json": "./data/daily_followers.json",
"sound_volume": 50
}
これで現場の音量に合わせて柔軟に調整できます!
✅ これで「増えたら音が鳴る」が実現!
- 見た目の変化に加えて、音でもフォロワーの伸びを体感可能に!
- Raspberry Pi に直接スピーカーをつないでそのまま再生できる
- N/Aや不正なデータは安全にスキップして誤再生防止
🔔 次回予告
次回は、SNSごとに異なる効果音を再生する機能や、
音の非同期再生によるレスポンス改善にもチャレンジしてみようと思います!
🙏 さいごに
「フォロワー増えたら鳴る」ってちょっと嬉しいですよね。
「うちも通知音仕込みたい…!」と思った方はぜひ参考にしてみてください!
いいね・フォローストックもお待ちしています 😊
🔗 シリーズリンク
- 次回:【最終回:シリーズ総まとめ編】
- 前回:【第9回:比較日付の柔軟化!】
- 第1回:【第1回:仕様決定会議編】
📚 全記事まとめはこちら → シリーズまとめリンク