どうも、たくチャレ(@takuchalle)です。

仕事で音声信号処理を本格的に使っていきたいので勉強を始めました。

最終的には 3D Audio に繋げられればなと思っています。 そのためには学生の時に苦手としていた数学と本格的に向き合っていかないのがツライところです。

go-wav

以前 wav ファイルの形式を出力するだけのツールを作ったのですが、それを強化する形で育てていこうと思います。

WAVE file header parser written in golang. Contribute to takuyaohashi/go-wav development by creating

Goを採用した理由は

  • 当時勉強してた
  • コマンドラインツールを作りやすそうだった
  • マルチプラットフォーム対応が容易

あたりでしょうか。

こんな感じで使うと、引数で渡した wav ファイルのヘッダをパースして表示してくれます。

$ go get github.com/takuyaohashi/wav/cmd/wavparser
$ wavparser sin.wav
Chunk Size:     480036
SubChunk Size:  480000
Audio Format:   PCM
Channles:       1
SampleRate:     48000
ByteRate:       96000
BitsPerSample:  16
BlockAlign:     2

wav フォーマットに関してはこのサイトを参考にしました。

LPCM の波形描画ツール

LPCM(リニアPCM)の理解も兼ねて、波形を描画するツールを作りました。

  • 1ch
  • 48kHz
  • 16bit

の正弦波の先頭1048サンプルがこんな感じで描画されます。

波形出力にはgonum.org/v1/plotを使っています。グラフ生成するツールですが、波形っぽく描画できています。

まだ1つのチャネルしか出せなかったり、ビット長が16bitの LPCM しか出せなかったり不完全ですが、必要に応じて拡張していく予定です。

このツールもgo-wavに入っていて、次のようにして使えます。

$ go get github.com/takuyaohashi/wav/cmd/wavplot
$ wavplot sin.wav

まとめ

音声信号処理の勉強を始めました宣言でした。

まず手始めにGoで波形を描画するツールを作ってみました。

今後は正弦波の生成や様々なフィルタなどの信号処理を行っていく予定です。

同じカテゴリの記事