Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[project-s] 出力する音声が0dBを超えないようにする #1578

Open
2 of 4 tasks
sigprogramming opened this issue Sep 23, 2023 · 1 comment
Open
2 of 4 tasks

Comments

@sigprogramming
Copy link
Contributor

sigprogramming commented Sep 23, 2023

内容

Web Audio APIでは、0dB(0dBFS、-1~1の範囲)を超えた音声の出力については特に定義されておらず、実装・環境依存です。
0dBを超えた音声の出力は機器や耳を痛めてしまう可能性があるので、0dBを超えないようにクリップするようにします。

また、ハードクリップ(音割れ)も良くないので、コンプレッションを行ってハードクリップしないようにします。
音声書き出し時のコンプレッションの有効/無効はユーザーが設定できるようにします。

Pros 良くなる点

  • 0dBを超えた音声が出力されなくなる&音割れしなくなる
    • 機器や耳を守ることができる

Cons 悪くなる点

  • コンプレッションがかかると音質が劣化する
    • ギリギリでかかるようにすることで劣化を最小限に抑えることができると思います

実現方法

クリップとコンプレッション

以下のようにDynamicsCompressorNodeWaveShaperNodeを接続します。

const compressor = audioContext.createDynamicsCompressor();
const waveShaper = audioContext.createWaveShaper();

// compressor -> waveShaper -> destination
compressor.connect(waveShaper);
waveShaper.connect(audioContext.destination);

WaveShaperNodeでクリップを行い、DynamicsCompressorNodeでコンプレッションを行います。

タスク

  • クリップの実装
  • コンプレッションの実装
  • 音声書き出し時にコンプレッションの有効/無効を設定できるようにする
    • コンプレッション無効で書き出しを行いクリップが発生した場合に警告を表示する

関連Issue

VOICEVOX/voicevox_project#15

その他

ひとまずクリップとコンプレッションの実装まで行います。

@Hiroshiba
Copy link
Member

issue作成ありがとうございます! とても良いように感じました!

エディタ側ではなくエンジン側に実装できると良いかなと思ったのですが、mixすることを考えると少なくともエディター側の実装は必須だなと感じました。
以下、メモがてらコメントです。

そもそもVOICEVOXは音量が不揃いだったりするので、コンプレッサーで音量を揃えようといったissueがエンジン側にあったりします。
VOICEVOX/voicevox_engine#135

今回のタスクも音声合成エンジン側に組み込んでおけばAPI利用者の人にも恩恵があって便利なのかなと思ったのですが、project-s的には複数の音声を同時に再生(mix?)して音量が爆発する可能性もあるので、少なくともエディター側でのコンプレッションは必須なのかなと思いました。
なので、Audio Web APIで解決しようとするこのissueの方針に賛成です!

@sigprogramming sigprogramming changed the title [project-s] 出力する音声が0dBを超えないようにする [project-s] 出力する音声が0dBFSを超えないようにする Sep 26, 2023
@sigprogramming sigprogramming changed the title [project-s] 出力する音声が0dBFSを超えないようにする [project-s] 出力する音声が0dBを超えないようにする Sep 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants