コードを丸パクリしてサイン波のファイルを生成できた。しかし基礎を知らないため応用できないため調べた。
参考
今回
参考先のコードを丸パクリして音声ファイル生成がされたことを確認した。
わからないことだらけなので、情報を整理する。
音とは何か
物理面
- 音とは振動(波)である
- 振動は空気や水などを介して伝わる
宇宙など真空状態では音が伝わらない。
人体面
- 人間は耳の鼓膜が振動させられることで音を感じ取る
- 人間に聞こえる周波数帯は20Hz〜20000Hzとされている(人によって異なる)
心理面
- 心地よいと感じる音と、耳障りに感じる音がある
関数化
波形を関数化することで簡単に表現できる。音を式で生成できる。
量子化
- 音(振動,波)はプロットデータで表現できる
アナログ→デジタル。式化された音も、ある時点でのプロットデータとして抜き出し量子化できる。関数化が難しい複雑な音も同様。
データ→DAC→アンプ→スピーカー
デジタル機器から音が生成されるまでの経緯。
項目 | 説明 |
---|---|
データ | 量子化された音声データ(CD,HDDなどに記録されている) |
DAC | デジタル・アナログ・コンバータ(デジタル信号からアナログ信号へ変換する) |
アンプ | アナログ信号を増幅する |
スピーカー | 音を鳴らす |
実装するときに必要そうな知識
量子化形式
PCM
- https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1110025321
- https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%AB%E3%82%B9%E7%AC%A6%E5%8F%B7%E5%A4%89%E8%AA%BF
波形データを量子化する形式のひとつ。アナログ信号を16bitでデジタル化する。
WAV形式
波形データを量子化する形式のひとつ。リニアPCM形式。WindowsではリニアPCMデータはWAV形式として認識される。
API
PythonにおけるWAVファイルの読書ライブラリ。
Wave_write.setparams(tuple)
この tuple は (nchannels, sampwidth, framerate, nframes, comptype, compname) でなければならず、その値はそれぞれの set*() メソッドで有効でなければなりません。すべてのパラメータを設定します。
このメソッドが肝と思われる。しかし、音について何の知識もないため各値の意味がさっぱりわからない。
所感
「音」を操るための知識や技術はとてつもなく難しそう。文字、画像、アニメーションよりも難しそう。