尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證手元の音源を、ターンテーブルの回転数とピッチで楽しむ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 にまとめています。