HN 日本語サマリー

← 一覧へ戻る
Web開発

Show HN: ミニマルなAudacityのWeb版を作ってみました

Show HN: I think I made my own web version of minimalistic audacity (github.com)

8 pointsby askadityapandey4 コメント

要約

HERTZは、Web Audio APIとFFmpeg.wasmを活用したクライアントサイドのオーディオ処理エンジンです。サーバーサイド処理に依存せず、ユーザーのブラウザ内でリアルタイムにボーカルの加工を行います。Zero-Serverアーキテクチャを採用し、レイテンシー、帯域幅コスト、プライバシーリスクを排除することを目指しています。

全文翻訳

HERTZ 高忠実度クライアントサイドオーディオ処理エンジン。 HERTZは、インスタントなボーカルポリッシングのために設計されたWebベースのデジタルオーディオワークステーション(DAW)ユーティリティです。 リアルタイム信号処理のためにWeb Audio APIを、クライアントサイドエンコーディングのためにFFmpeg.wasmを活用しています。 Linux上のFFmpegバイナリに依存する従来のツールとは異なり、HERTZはWebAssemblyを介してユーザーのブラウザスレッド内で完全に実行されます。 コアアーキテクチャ アプリケーションは「Zero-Server」アーキテクチャ上に構築されています。 目標は、機密性の高いオーディオデータをクラウドストレージにアップロードすることに伴うレイテンシー、帯域幅コスト、プライバシーリスクを排除することです。 パイプライン 取り込み:多様な入力フォーマット(WAV、MP3、M4A、OGG)を32ビット浮動小数点オーディオバッファにデコードします。 操作:Wavesurfer.jsのリージョンを使用した非破壊編集レイヤーを提供し、ユーザーがサンプル精度の開始/終了ポイントを定義できるようにします。 デジタル信号処理(DSP):リアルタイムよりも高速なレンダリングのためにOfflineAudioContextを構築します。 ハードコードされたボーカルチェーン(EQ -> コンプレッサー -> リミッター)を介してオーディオをルーティングします。 分析パスでピーク振幅を決定し、正確な正規化を行います。 エンコーディング:処理されたバッファをffmpeg.wasm仮想ファイルシステムに転送します。 192kbps VBRでLAME MP3エンコーディングを実行します。 結果のBlobをユーザーのダウンロードマネージャーに直接ストリームします。 信号チェーン仕様 HERTZは汎用プリセットを使用しません。 オーディオエンジンは、話し言葉やポッドキャストの明瞭度に最適化された特定のボーカルチェーンを実装しています。 1. ハイパスフィルター カットオフ:80Hz Q:1.4 目的:コンシューマーマイクにしばしば見られるサブベースのランブルやDCオフセットアーティファクトを除去します。 2. ダイナミクスコンプレッサー ポンピングアーティファクトを導入することなく、ボーカルのダイナミックレンジを平準化するように設計されたハードニーコンプレッサー。 しきい値:-20.0 dB 比率:3.1:1 ニー:5.0 dB アタック:0.03秒(30ms) リリース:0.1秒(100ms) 3. 正規化 圧縮後のゲインステージングにより、放送ラウドネス規格への準拠が保証されます。 ターゲット:-3.0 dBピーク 方法:絶対最大振幅スキャンに基づく線形ゲイン計算。 技術的制約とブラウザセキュリティ HERTZは、FFmpeg.wasmでのマルチスレッド処理を容易にするためにSharedArrayBufferに依存しています。 最新のブラウザでは、Spectre/Meltdown脆弱性を防ぐために、厳格なセキュリティヘッダーの背後でこの機能を制限しています。 HERTZをローカルまたは本番環境で実行するには、ホストが以下のヘッダーを提供する必要があります。 Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp これらのヘッダーが欠落している場合、ffmpeg.wasmの初期化に失敗し、アプリケーションはバッファ割り当てエラーをスローします。 付属のvite.config.tsは、ローカル開発用にこれを処理します。 インストールと開発要件 Node.js 18.x 以降 NPMまたはBunパッケージマネージャー WebAssemblyをサポートするモダンブラウザ(Chrome 90+、Firefox 90+、Safari 15+) セットアップ # リポジトリをクローン git clone https://github.com/askpext/hertz.git # ディレクトリに移動 cd hertz # 依存関係をインストール npm install ローカルでの実行 npm run dev アプリケーションは http://localhost:5173 で起動します。 本番環境向けビルド npm run build これにより、/dist に静的アセットバンドルが生成されます。 注意:index.htmlをローカルで直接開くことはできません。必要なCOOP/COEPヘッダーをサポートするWebサーバー(例:Vercel、Netlify、GitHub Pages)経由で提供する必要があります。