explainroo
explainroo는 AI 에이전트가 음성으로 설명 영상을 만들 수 있는 무료 오픈소스 도구이며, 로컬에서 API 키 없이 실행됩니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기手元の音源を、ターンテーブルの回転数とピッチで楽しむWebアプリ。33/45回転・ピッチ±8%・スクリュー再生に対応。Bandcampなどで購入した音源(FLAC・AIFF・WAV・MP3など)を、ブラウザ内だけで再生します。
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗手元の音源ファイルを、ピッチコントロール付きのターンテーブルのように、回転数とピッチを切り替えて再生する Web アプリです。
公開ページ: https://odditymana.github.io/test-pressing/
普段はレコードで DJ をしています。Bandcamp で買ったデータ音源も、Technics のターンテーブルみたいにピッチを上げ下げして聴けないかな、と思ったのがきっかけです。
※その曲の盤が33回転か45回転かは、Discogs などで確認できます。
そんな「DJ をしていて欲しかったもの」を形にしたアプリです。
すべての操作をキーボードで行えます。
| 部品 | キー | 動き |
|---|---|---|
| 全体 | Tab / Shift + Tab | 部品を移動する |
| 回転数 | ← → ↑ ↓ | 33/45/スクリューを切り替える |
| ピッチ | ↓ / ↑ | +0.1% / −0.1%(つまみが下 / 上へ動く) |
| ピッチ | PageDown / PageUp | +1% / −1% |
| ピッチ | End / Home | +8% / −8% |
| 再生位置 | ← → | 1秒ずつ戻す / 進める |
| 再生位置 | Home / End | 曲の始め / 終わり |
| 形式 | 対応 |
|---|---|
| MP3・WAV・FLAC・AAC(.m4a)・Ogg | ブラウザがそのまま再生 |
| AIFF・AIFF-C(NONE / sowt) | ブラウザ内で WAV に変換して再生(8〜32bit) |
| ALAC(.m4a) | Safari のみ。ほかのブラウザでは案内メッセージを表示 |
どの形式を再生できるかは、ブラウザによって異なります。
audio 要素の playbackRate(再生速度の倍率)に「基準速度 ×(1 + ピッチ ÷ 100)」を入れています。ブラウザは標準では、速度を変えても音の高さを保とうとします。そこで preservesPitch = false にして、レコードと同じように「速いほど高い音」になるようにしました。古い Safari・Firefox 向けの webkitPreservesPitch・mozPreservesPitch もあわせて設定しています。
最初は CSS アニメーションの animation-duration を速度に合わせて変える案でした。ただ、この方法では速度を変えた瞬間に角度が計算し直され、レコードがワープしてしまいます。そこで requestAnimationFrame を使い、毎フレーム「経過時間 × 回転の速さ」を今の角度に足す形にしました。回転の速さは毎回 playbackRate から読むので、速度との連動に追加のコードは要りません。
AIFF は「チャンク」という箱が並んだ形式です。COMM(音の形式)と SSND(音のデータ)を読み、WAV のヘッダを付けて作り直しています。
針先がレコードの中心から 44(一番外側の溝)と 22(一番内側の溝)の距離に来るアームの角度を計算しました(座標は台座の直径を 100 とした値)。その2つの角度の間を、再生の進み具合(再生位置 ÷ 曲の長さ)で比例させています。比例させた場合の針先の位置のずれは、台座の直径の 0.1%以下です。
ニードルドロップはその逆の計算です。クリックした位置の中心からの距離を、進み具合に変えています。中心は、回転していない台座の位置から求めています。回転している要素の四角い範囲は、角度によって大きさが変わってしまうためです。
display: none ではなく見た目だけ隠し、フォーカスが来たときは label 側に枠を表示しています。prefers-reduced-motion(OS の「動きを減らす」設定)が有効なときは、レコードの回転を止めます。このアプリは Claude Code を使って開発しました。仕組みは、自分で理解して説明できる範囲のものだけを採用しています。
HTML・CSS・JavaScript のみで作っていて、フレームワークやライブラリは使っていません。
test-pressing/
├── index.html 画面の骨組み
├── css/
│ └── style.css 見た目(レイアウト・レコード・操作パネル)
├── js/
│ ├── aiff-to-wav.js AIFF → WAV 変換
│ └── main.js 読み込み・再生・速度・回転・再生位置
├── tests/
│ └── aiff-to-wav.test.js AIFF 変換のテスト
├── docs/
│ └── checklist.md ブラウザごとの確認項目
├── LICENSE
└── README.md
index.html をブラウザで開くだけで動きます(サーバーは不要です)。
Node.js 18 以降で、プロジェクトのフォルダから実行します。
node --test
テスト用の音はテストの中で生成するので、音源ファイルは必要ありません。
ブラウザでの確認項目は docs/checklist.md にまとめています。