やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

音について調べた

コードを丸パクリしてサイン波のファイルを生成できた。しかし基礎を知らないため応用できないため調べた。

参考

今回

参考先のコードを丸パクリして音声ファイル生成がされたことを確認した。

わからないことだらけなので、情報を整理する。

音とは何か

物理面

  • 音とは振動(波)である
  • 振動は空気や水などを介して伝わる

宇宙など真空状態では音が伝わらない。

人体面

  • 人間は耳の鼓膜が振動させられることで音を感じ取る
  • 人間に聞こえる周波数帯は20Hz〜20000Hzとされている(人によって異なる)

心理面

  • 心地よいと感じる音と、耳障りに感じる音がある

関数化

  • 音(振動,波)は数式で表現できる

波形を関数化することで簡単に表現できる。音を式で生成できる。

量子化

  • 音(振動,波)はプロットデータで表現できる

アナログ→デジタル。式化された音も、ある時点でのプロットデータとして抜き出し量子化できる。関数化が難しい複雑な音も同様。

データ→DAC→アンプ→スピーカー

デジタル機器から音が生成されるまでの経緯。

項目 説明
データ 量子化された音声データ(CD,HDDなどに記録されている)
DAC デジタル・アナログ・コンバータ(デジタル信号からアナログ信号へ変換する)
アンプ アナログ信号を増幅する
スピーカー 音を鳴らす

実装するときに必要そうな知識

量子化形式

PCM

波形データを量子化する形式のひとつ。アナログ信号を16bitでデジタル化する。

WAV形式

波形データを量子化する形式のひとつ。リニアPCM形式。WindowsではリニアPCMデータはWAV形式として認識される。

API

PythonにおけるWAVファイルの読書ライブラリ。

Wave_write.setparams(tuple)

この tuple は (nchannels, sampwidth, framerate, nframes, comptype, compname) でなければならず、その値はそれぞれの set*() メソッドで有効でなければなりません。すべてのパラメータを設定します。

このメソッドが肝と思われる。しかし、音について何の知識もないため各値の意味がさっぱりわからない。

所感

「音」を操るための知識や技術はとてつもなく難しそう。文字、画像、アニメーションよりも難しそう。