今までずっと雰囲気でやってました。
`ScriptProcessor`や`AudioWorkletProcessor`をさわったことはあっても、そこで成されている処理自体を具体的に考えたことはなかった。
波形がどうとか、周波数がどうとか、PCMがどうとか、サンプリングレートがどうとか、フーリエ変換がどうとか、なんとなーくそれぞれの用語はわかってるつもりではいたが、線の理解にはなってなかった。
それをあらためて学び直したのがこの記事です。(間違ってたら教えてください)
音のデジタル化
- 音は空気の振動である
- 糸電話的なイメージ
- これはもちろんアナログ
- あの振動をデジタル化することで、プログラミングで音声処理できるようにする
- このデジタル化をPCM(Pulse Code Modulation)という
- PCMはデジタル化の方式のなかの1つで、他にもやり方はあるらしい
- WebAudioで扱える音声の生データもこのPCMデータ
- リニアPCMというやつらしい
PCMデータ
- デジタル化して得られた生データ
- 言わずもがなビット列
- 端的には時系列に並ぶ音量の配列
- プロットすると、いわゆる波形になる
- いつでもアナログにも戻せるし加工もできる
- 無限のリソースでデジタル化できればいいけど、そうもいかない
- 元の音声にどれだけ近づけられるかのパラメータとしては2つある
- サンプリングレート
- 量子化ビット数
- プロットするとき、X/Y軸がより細かいほうが、よりなめらかに波形を再現できる
- サンプリングレートは横軸の細かさ
- 量子化ビット数は縦軸の細かさ
- どれくらいの頻度で、どれくらいの詳細度でサンプリングするかという話
- 得られたPCMデータの配列の1つが、1つのオーディオサンプルとなる
サンプリングレート
- 標本化の回数
- 単位はHz
- 8000Hzならば、1秒に8000回サンプリングするということ
- サンプリングレートが大きいほど、より忠実に原音を再現できる
- ただし高すぎても実用的ではない
- 聴くのが人間なら、聞こえない音を保存する必要がないから
- なのでCDとかは44.1kHzに決まってる
波形とPCMデータ
PCMと周波数成分
というわけで
次はWebAudio APIを使って音声処理を実際にやってくところについて書きます。