stfu — 遅延再生で注意喚起するミニアプリ
概要
stfu は「周囲の音を録って少し遅らせて再生する」ことを目的に作られた非常に小さなブラウザアプリです。作者が空港で大きな音量で動画を見ている人に出会った経験をきっかけに、生の音声を約2秒遅延して返すことで当人の聴覚フィードバックを乱し、行動を変える効果を期待して作られました。README にもある通り「Claude に頼んだらワンプロンプトで動くバージョンが出てきて驚いた」という経緯があり、実装は index.html のみで完結するシンプルさが特徴です。サーバーサイドの依存がなく、ブラウザの音声入力アクセス権さえあれば動作します。
リポジトリの統計情報
- スター数: 16
- フォーク数: 5
- ウォッチャー数: 16
- コミット数: 4
- ファイル数: 3
- メインの言語: HTML
主な特徴
- ブラウザだけで動作:サーバー不要、index.html 単体で完結
- 遅延再生:約2秒の遅延で音声を返すシンプルな仕組み
- 最小限の実装:HTML(+おそらく Web Audio API)で軽量に構築
- 開発経緯の明快さ:実世界の問題から即興的に作られたプロトタイプ
技術的なポイント
このリポジトリはファイルが非常に少なく、機能的には「マイク入力を取得して遅延させて出力する」ことに特化しています。実装手法として想定されるのはブラウザ標準の getUserMedia と Web Audio API の組み合わせです。具体的には、マイクからの MediaStream を AudioContext に接続し、MediaStreamAudioSourceNode を生成、DelayNode(あるいはスクリプトプロセッサ)を挟んで出力先に接続することで遅延再生を実現します。約2秒の遅延は DelayNode の delayTime を使えば容易に設定可能で、サンプル数やバッファ処理を手動で行う必要はありません。
UI は極めてミニマルで、ユーザーにはマイク許可のダイアログが表示され、許可後に即座に遅延再生が始まる設計と推測されます。サンプルコードは一枚の HTML にスクリプトを埋め込む形で、外部ライブラリに依存しないため配布や試験が容易です。プライバシー面の懸念は、音声を外部サーバーに送らない「クライアントサイド完結」である場合は低減されますが、常時録音状態になるため利用時は周囲や法的な問題に注意が必要です。
また README で「Claude に聞いて一発で動くバージョンが出た」とあるように、LLM を使ったプロトタイピングの実例としても興味深い点があります。議論スレッドへのリンクが README に示されているため、使用感や倫理に関するコミュニティ討論も参照できます。ライセンスファイルが含まれているため利用条件は明記されており、実験的プロジェクトとして学習やデモ用途に向いています。
プロジェクトの構成
主要なファイルとディレクトリ:
- LICENSE: file
- README.md: file
- index.html: file
まとめ
シンプルで即試せる、ブラウザベースの遅延音声フィードバック実験プロジェクト。
リポジトリ情報:
- 名前: stfu
- 説明: stfu
- スター数: 16
- 言語: HTML
- URL: https://github.com/Pankajtanwarbanna/stfu
- オーナー: Pankajtanwarbanna
- アバター: https://avatars.githubusercontent.com/u/25531072?v=4
READMEの抜粋:
STFU 🤫
i was at bombay airport. some dude was watching reels on full volume and laughing loudly. asking nicely doesn’t work anymore. me being me, didn’t have the courage to speak up.
so i built a tiny app that plays back the same audio it hears, delayed by ~2 seconds. asked claude, it spat out a working version in one prompt. surprisingly WORKS.
discussion - https://x.com/the2ndfloorguy/status/2011734249871954188
the science (probably)
something something auditory feedback loop someth…