Skip to content

MasahiroSakaguchi/infinitradio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Global Random Radio (v0.3) 機能仕様書

1. プロジェクト概要

名称: Global Random Radio 目的: 世界中のインターネットラジオ局を、ユーザーの作為(好みによる偏り)を排除した「完全ランダム」な方法で選出し、偶然の音楽や情報との出会い(セレンディピティ)を提供する。 プラットフォーム: Webブラウザ(PC / スマートフォン両対応)

2. システム構成

  • アーキテクチャ: シングルページアプリケーション (HTML + CSS + Vanilla JS)
  • 外部API: Radio Browser API (コミュニティ主導のラジオデータベース)
  • データ保存: ブラウザの LocalStorage (Web Storage API)

3. 機能要件

3.1. データ取得とキャッシング (Data Fetching & Caching)

通信量の削減と起動速度の向上を目的として、タグリストのキャッシングを行う。

  1. 初期化フロー:
  • アプリ起動時、localStorage 内のキー radio_tags_v1 を確認する。
  • キャッシュ有効判定: データが存在し、かつ保存から 3日以内 であれば、API通信を行わずキャッシュデータを使用する。
  • データ更新: キャッシュが存在しない、または期限切れ(3日経過)の場合、APIより最新データを取得する。
  1. タグリスト取得API仕様:
  • エンドポイント: /json/tags

  • パラメータ:

  • order=stationcount: 登録局数が多い順

  • reverse=true: 降順(多い順)

  • limit=2000: 上位2,000件を取得

  • 保存形式: 取得したJSONから name プロパティのみを抽出し、タイムスタンプと共に保存。

  1. 手動更新機能:
  • 画面右下の「↻ Update List」ボタン押下により、キャッシュの有効期限に関わらず強制的に最新リストを取得・上書きする。

3.2. 検索・選出ロジック (Core Logic)

「EXPLORE」ボタン押下時に以下のフローを実行する。

  1. 第1段階:ジャンル(タグ)の抽選
  • 保持している2,000件のタグリストから、ランダムに1つを選出する。
  • 選出されたタグ名を画面に大きく表示する。
  1. 第2段階:ステーションの検索
  • 選ばれたタグを使用し、APIへ検索リクエストを送信する。
  • 検索パラメータ:
  • tag: [選出されたタグ]
  • limit=50: 人気上位50件に限定
  • order=votes: 投票数(人気)順
  • hidebroken=true: リンク切れ局を除外
  • https=true: HTTPS対応局のみ(スマホ/モダンブラウザ対応のため必須)
  1. 第3段階:ステーションの抽選
  • 取得した50件のステーションリストから、ランダムに1局を選出する。
  • リトライ処理: 万が一、検索結果が0件だった場合は、ユーザー操作を待たず即座に「第1段階」へ戻り、別のタグで再検索を行う。

3.3. 再生機能 (Playback)

  1. オーディオ再生:
  • 選出されたステーションの url_resolved (実ストリームURL) を <audio> 要素にセットし再生する。
  1. エラーハンドリング:
  • 再生中にストリームが切断された場合、または読み込みエラー (onerror) が発生した場合、自動的に「検索・選出ロジック」を再実行し、次の局を探す(スキップ機能)。
  1. バックグラウンド再生:
  • スマホ等のブラウザ仕様に準拠する(ユーザーアクション後の再生開始であるため、バックグラウンド再生が許可される場合が多い)。

4. ユーザーインターフェース (UI/UX)

4.1. デザインコンセプト

  • 没入感: 音楽に集中できるよう、黒を基調としたダークモードデザイン。
  • ミニマリズム: 操作ボタンは「EXPLORE」のみを中心に配置。

4.2. 表示要素

  • ジャンル表示: 検索されたタグ名(Jazz, Talk, Anime等)を最大級のフォントサイズで表示し、選曲の「意外性」を強調する。
  • ステーション情報: 局名と国名を表示。
  • ステータス表示: 現在の処理(Searching, Buffering, Playing, Error等)をテキストで明示。

4.3. アニメーション

  • 待機時: 緩やかに変化する背景グラデーション。
  • 再生中: 背景の中心から明滅するパルスアニメーション (.bg-playing クラス付与) により、音が鳴っていることを視覚的にフィードバックする。

5. エラー処理規定

事象 挙動
APIサーバーダウン ステータスに "Offline Mode" 等を表示し、コンソールにエラーを出力。
検索結果 0件 自動的に別のタグを選び直し、再検索ループに入る(ユーザー操作不要)。
再生エラー ストリームが無効または切断された場合、1秒後に自動で「EXPLORE」処理を実行し次へ進む。

6. ライセンス

このプロジェクトは CC0 1.0 Universal (CC0 1.0) パブリック・ドメイン提供 のもとで公開されています。

About

A simple web player that randomly explores internet radio stations from around the world using the Radio Browser API.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors