著者:吉田 節
¥1,200¥0

①本書の内容の紹介
 「日本で最も丁寧に書かれたサウンドプログラミング、FFT(高速フーリエ変換)の入門書。サウンドプログラミング、周波数分析、FFT初心者はまずこの本を!」を目指して執筆しました。本書はコンピュータ言語Pythonを用いたサウンド関連の数々の興味深い実験を通し、サウンドプログラミングの基本を理解することを目標にしています。
 アニメ『名探偵コナン』では主人公、コナン君が「蝶ネクタイ型変声機」を使い、自分の声を自由に他人の声に変えて推理を披露します。これ自体は非常に難しいにせよ技術的に可能な気はするのですが、筆者が不思議なのは彼自身の声が聞こえてこないことです。どんな原理なのでしょうか。実験してみましょう。また、音楽再生アプリなどに「イコライザ」という機能がついていることがあります。音楽の高音を強調する、中音域を抑える、……といったことが可能になりますが、どういう仕組みなのでしょうか。本書の内容を理解すれば、実験室レベルではありますが自分で音楽の音質を変えることができるようになります。
 本書ではFFTの詳しい原理の解説はせず、PythonのライブラリであるSciPyに含まれるFFTを用います。しかし「ライブラリを使えるなら簡単である」というわけではなく、パラメータの扱いや実際のサウンドの処理などには知識が必要です。その辺のことも丁寧に解説します。
 本書は筆者が開設しているサイト、
『いぬおさんのおもしろ数学実験室』(https://www.omoshiro-suugaku.com/)
に載せている実験の記事を元に、サウンド処理やFFT初心者の方にも理解していただけるよう、原理やコードに詳細な解説をつけ加え、新たな実験も含めて1冊にまとめたものです。

②本書の特長
●Pythonを用いたサウンド関連の興味深い実験を取り上げ、解説しています。面白いものであることはもちろんですが、自然科学の本質に迫るものです。音楽ファンは音楽の理論に純正律、平均律という異なる音階が存在することをご存じかも知れません。それぞれの音階を用いた和音を鳴らしたとき聞き分けられるか、といった実験も取り上げます。
●基本的なサウンド処理の理論、Pythonのコードを詳細に説明しました。筆者の知る限り、Pythonのサウンドプログラミングを解説している書籍自体あまりないのですが、本書は読者の皆さんが行間を埋める必要がないほど丁寧な説明であることを目標に執筆しました。
●「FFT、周波数分析の初心者はまず本書で勉強してください!!」を目指しました。初心者がFFTを実際に使う際に迷うことのないよう、FFTの意味や使い方、返ってきたデータの解釈の方法など、徹底的に解説しています。

③目次

まえがき
第1章 本書を読む前に。本書の目標、対象読者、特長など
 1-1 本書の目標
 1-2 本書の対象読者
 1-3 本書の特長
 1-4 掲載コードの動作環境など
 1-5 実験に必要な機器
 1-6 参考文献
 1-7 本書の読み方・使い方
 1-8 サンプルコードの入手方法
 1-9 本書で扱う実験
 1-10 本書利用上の注意
第2章 音の物理とwavファイルの基礎知識
 2-1 音とは何か
 2-2 音の波を3角関数で表す
  2-2-1 角の単位、ラジアン
  2-2-2 sinx、cosxの定義
  2-2-3 sinx、cosxのグラフ、波
  2-2-4 周期、周波数
  2-2-5 三角関数の合成
 2-3 Visual Studio CodeでPythonのコードを保存・実行する
 2-4 2音を鳴らすwavファイルを作る
 2-5 音階の説明。平均律、純正律について
 2-6 平均律、純正律のドミソの和音を聞き比べる
 2-7 周波数の近い2音を鳴らしてうなりを確認する
 2-8 プッシュボタンを使わずに電話をかけられるか
 2-9 wavファイルを準備する
 2-10 wavファイルのパラメータを読み取る
 2-11 matplotlibモジュールでグラフを描く
第3章 wavファイルを編集する
 3-1 wavファイルで、サウンドデータの符号を一斉に反転する
 3-2 サウンドをクリッピングする
  3-2-1 クリッピングされたデータでグラフを描く
  3-2-2 wavファイルでクリッピングする
 3-3 録音した「れはもすあ」を逆再生しても「明日も晴れ」には聞こえない
 3-4 変声機の原理を確認する
第4章 FFT、IFFTを使ってみる
 4-1 FFT(高速フーリエ変換)、IFFT(逆高速フーリエ変換)とは何か
 4-2 周波数、角周波数、周期
 4-3 SciPyモジュールのfftpackライブラリの利用について
 4-4 フーリエ級数、DFT、FFTの持つ性質
  4-4-1 複素数について
  4-4-2 フーリエ級数、DFT、FFTの持つ性質
 4-5 SciPyのFFT、IFFTを使った分かりやすい例(1)
 4-6 SciPyのFFT、IFFTを使った分かりやすい例(2)
 4-7 SciPyのFFT、IFFTを使った分かりやすい例(3)
 4-8 SciPyのFFT、IFFTを使った分かりやすい例(4)
 4-9 FFTを使うときのデータ数についての注意
第5章 周波数分析を利用する
 5-1 ノイズ入りのサウンドからノイズを消す
 5-2 ノイズ入りの信号から周波数成分を見つける
 5-3 肉声を電話の声に変換する
 5-4 FFTは信用できるのか
 5-5 Pythonでリアルタイムに動くグラフを描く
 5-6 変化する周波数成分を表示する
第6章 イコライザの原理を学ぶ
 6-1 離散フーリエ係数の値を変える際の注意点
 6-2 最も基本的なイコライザを作る
付録A フーリエ級数・DFT・FFTまとめ、DFTの導出
 A-1 実フーリエ級数まとめ
 A-2 複素フーリエ級数まとめ
 A-3 複素フーリエ級数からDFT(離散フーリエ変換)の式を導く
 A-4 FFT(高速フーリエ変換)とはどんなものか
付録B 離散フーリエ係数について成立する公式の証明
付録C 本書とSciPyのFFTの離散フーリエ係数の違いについて
索引
あとがき
著者紹介

④本書で扱う実験のリスト
・2音を鳴らすwavファイルを作る
・平均律、純正律のドミソの和音を聞き比べる
・周波数の近い2音を鳴らしてうなりを確認する
・プッシュボタンを使わずに電話をかけられるか
・wavファイルのパラメータを読み取る
・matplotlibモジュールでグラフを描く
・wavファイルで、サウンドデータの符号を一斉に反転する
・クリッピングされたデータでグラフを描く
・wavファイルでクリッピングする
・逆再生する、ドレミファソラシドを鳴らす
・変声機の原理を確認する
・SciPyのFFT、IFFTを使ったわかりやすい例
・ノイズ入りのサウンドからノイズを消す
・ノイズ入りの信号から周波数成分を見つける
・肉声を電話の声に変換する
・FFTは信用できるのか
・Pythonでリアルタイムに動くグラフを描く
・変化する周波数成分を表示する
・離散フーリエ係数の値を変える際の注意点
・最も基本的なイコライザを作る

⑤実験のための準備
●音楽のwavファイル(Windows標準の音楽ファイル)
手持ちのCDからメディアプレーヤーを使ってwavファイルを作成するか(手順は載せてあります)、フリーの音楽を扱っているサイトからダウンロードするなどしてください。
●ステレオスピーカー
実験には左右のスピーカーで異なる音を出す必要のあるものがあります。筆者は1000円台のステレオスピーカーを利用しました。
●Pythonの科学技術計算ライブラリであるSciPy、NumPy、グラフ描画用のmatplotlibがインストールされていることが必要です。インストール方法を紹介しているサイトがたくさんありますのでそちらをご利用ください。

⑥動作環境など
 掲載コードはWindows10、Python3.7.4で動作を確認しました。本書ではwavファイル(Windows標準の音楽ファイル)を用いています。Macについては筆者のところに環境がないため、wavファイルを扱えるのかなどは不明です。

⑦著者紹介
吉田 節
1987年 筑波大学第一学群自然学類(数学主専攻)卒業
1989年 筑波大学大学院修士課程教育研究科修了

著書『Pythonでインタプリタを作る コンピュータ言語を設計・実装してインタプリタの動作を理解しよう』
(株式会社インプレスR&D,2021)

シリーズ一覧

  • 同シリーズの電子書籍はありませんでした。

 

  Kindle Unlimitedは、現在30日間無料体験キャンペーンを行っています!

この期間中は料金が980円→0円となるため、この記事で紹介している電子書籍は、すべてこのKindle Unlimited無料体験で読むことが可能です。

Kindle Unlimited 無料体験に登録する