信号処理のためのプログラミング入門
〜オーディオファイルの読み込み・書き込みからリアルタイム信号処理まで〜

[表紙]信号処理のためのプログラミング入門 〜オーディオファイルの読み込み・書き込みからリアルタイム信号処理まで〜

紙版発売

B5変形判/256ページ

定価3,168円(本体2,880円+税10%)

ISBN 978-4-7741-3789-6

ただいま弊社在庫はございません。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

C/C++で信号処理を学びたい学生や開発者に向け,信号処理の身近な題材(オーディオ)をベースに基礎と応用を解説する。PCオーディオなどMP3などデジタルオーディオが身近になった昨今,オーディオエディタとしてメジャーなオープンソースの「Audacity」を利用することで,信号処理初心者から開発者まで幅広くカバーできる。

こんな方におすすめ

  • C/C++で信号処理を学びたい学生/開発者

著者の一言

本書では,信号処理,特にオーディオ処理にフォーカスしたプログラミングの解説をしています。信号処理といえばMATLABが定番ですが,MATLABはPCでリアルタイム処理を行うには向いていません。本書は,オープンソースのライブラリをVisual C++から呼び出して,初心者でも手軽に信号処理を実現できるようにしています。また,初心者でもオープンソースのライブラリをビルドしたり,Visual C++の設定をできるように解説しています。

オーディオファイルの読み込み/書き込みをして信号処理を勉強したい方,オーディオの再生/録音をしたい方はぜひ本書を手にとってください。

目次

第1章 PCとディジタル信号処理

  • 1.1 ディジタル信号とは?
  • 1.2 ディジタル信号の特徴
  • 1.3 オーディオファイル
  • 1.4 Audacity
  • 1.5 終わりに

第2章 AFspによるコンソール信号処理

  • 2.1 コンソール
  • 2.2 コンソールプログラム
  • 2.3 CUIを使う理由
  • 2.4 AFspの概要
  • 2.5 AFspのダウンロード
  • 2.6 AFspのインストール
  • 2.7 AFspのユーティリティツール
  • 2.8 終わりに
  • まとめ

第3章 オーディオプログラミングのソフトウェア

  • 3.1 ソフトウェア概要
  • 3.2 Visual C++ 2005 Express Edition
  • 3.3 Windows Platform SDK
  • 3.4 DirectX SDK
  • 3.5 libsndfile
  • 3.6 PortAudio
  • 3.7 ASIO SDK
  • 3.8 環境変数の設定
  • 3.9 終わりに
  • まとめ

第4章 Visual C++の基礎

  • 4.1 Visual C++とは?
  • 4.2 ソリューションとプロジェクト
  • 4.3 Visual C++の起動
  • 4.4 プロジェクトの作成
  • 4.5 アプリケーションの種類の選択
  • 4.6 Visual C++の作業スペース
  • 4.7 ソリューションとプロジェクトの違い
  • 4.8 プロジェクトの依存関係
  • 4.9 ソースコードの追加
  • 4.10 ソースコードの編集
  • 4.11 ビルド
  • 4.12 プログラムの実行
  • 4.13 プロパティの修正
  • 4.14 デバッグの実行
  • 4.15 デバッグモードとリリースモード
  • 4.16 検索
  • 4.17 VC++ディレクトリ
  • 4.18 ライブラリの追加
  • 4.19 終わりに
  • まとめ

第5章 サンプリングレート,チャネル数を表示するプログラム

  • 5.1 プロジェクト作成
  • コラム コンソールアプリケーションしか作成できない?
  • 5.2 プロジェクト設定の変更
  • コラム ランタイムライブラリについて
  • 5.3 sndfile.hのインクルード
  • 5.4 オーディオファイルのOpen/Close
  • 5.5 ライブラリの追加
  • 5.6 サンプリングレートとチャネル数を表示する
  • 5.7 PATHの変更
  • 5.8 終わりに
  • まとめ

第6章 PCMをカウントするプログラム

  • 6.1 sf_seekを使う方法
  • 6.2 sf_read関数を使う方法
  • 6.3 終わりに
  • 6.4 ソースコード
  • まとめ

第7章 gnuplot

  • 7.1 gnuplotとは?
  • 7.2 gnuplotのインストール
  • 7.3 gnuplotの起動
  • 7.4 Gnuplotの使い方
  • 7.5 基本的なプロット方法
  • 7.6 時間信号のプロット
  • 7.7 終わりに
  • まとめ

第8章 FFTとFFTW

  • 8.1 FFTとは?
  • 8.2 DFTの導入
  • 8.3 アナログからデジタルへ
  • 8.4 DFTとFFT
  • 8.5 FFTWとは?
  • 8.6 FFTW3のインストール
  • 8.7 プロジェクト作成
  • 8.8 オーディオファイル処理のテンプレート
  • 8.9 fftw3.hのインクルード
  • 8.10 fftwの変数宣言
  • 8.11 バッファの確保
  • 8.12 FFTWプランの作成
  • 8.13 FFTの実行
  • 8.14 Gnuplotによるスペクトルの描画
  • 8.15 描画設定の変更
  • 8.16 IFFT
  • 8.17 窓関数
  • 8.18 終わりに
  • 8.19 ソースコード
  • まとめ

第9章 PortAudio

  • 9.1 DLLプロジェクトの作成
  • 9.2 ディレクトリ構造
  • 9.3 ファイルの追加
  • 9.4 ビルドエラーの対処
  • 9.5 ランタイムライブラリの変更
  • 9.6 バッチビルド
  • コラム libportaudioのランタイムライブラリ
  • 9.7 インポートライブラリの作成
  • 9.8 終わりに
  • まとめ

第10章 オーディオデバイスを一覧表示するプログラム

  • 10.1 プロジェクトの追加
  • 10.2 依存関係の追加
  • 10.3 portaudio.hのインクルード
  • 10.4 PortAudioのAPI
  • 10.5 初期化&後処理
  • 10.6 オーディオデバイスの数の取得
  • 10.7 オーディオデバイスの一覧
  • 10.8 ソースコード
  • まとめ

第11章 オーディオファイルを再生するプログラム

  • 11.1 変数宣言
  • 11.2 入出力の設定
  • 11.3 ユーザーデータの準備
  • 11.4 Callback関数の定義
  • 11.5 ストリームのオープン
  • 11.6 コールバック関数の修正
  • 11.7 ストリームの開始/停止/クローズ
  • 11.8 オーディオプレイヤーの完成
  • 11.9 ソースコード
  • まとめ

第12章 オーディオを録音するプログラム

  • 12.1 プロジェクト作成
  • 12.2 ファイルポインタの追加
  • 12.3 サンプリング周波数とチャネル数の設定
  • 12.4 ファイルを書き込みモードで開く
  • 12.5 読み込みファイル情報の削除
  • 12.6 PCMバッファサイズの変更
  • 12.7 録音パラメータの設定
  • 12.8 ユーザーデータの設定
  • 12.9 ストリームのオープン
  • 12.10 コメントの変更
  • 12.11 コールバック関数の修正
  • 12.12 録音のテスト
  • 12.13 ソースコード
  • まとめ

第13章 オーディオの録音/再生を同時に行うプログラム

  • 13.1 プログラムの引数の修正
  • 13.2 ファイルポインタの無効化
  • 13.3 再生パラメータの設定
  • 13.4 エフェクト処理の記述
  • 13.5 ソースコード
  • まとめ

第14章 WDM Kernel Streamingによるオーディオプログラミング

  • 14.1 WDM Kernel Streamingとは?
  • 14.2 WDM-KSのソースコードの追加
  • 14.3 WDM-KSの有効化
  • 14.4 WASAPIの無効化
  • 14.5 setupapi.libの追加
  • 14.6 オーディオデバイスの確認
  • 14.7 再生/録音パラメータの修正
  • 14.8 ソースコード
  • まとめ

第15章 getopt

  • 15.1 getoptとは?
  • 15.2 getoptによるコマンドライン例
  • 15.3 getoptの入手
  • 15.4 プロジェクトの作成
  • 15.5 ソースコードのコピー
  • 15.6 getoptの修正
  • 15.7 getoptのプロジェクトへの追加
  • 15.8 getopt_long.hのインクルード
  • 15.9 struct option構造体の変数宣言
  • 15.10 getopt_longの呼び出し
  • 15.11 プロジェクトのビルド
  • 15.12 getopt_longのデバッグ
  • 15.13 パラメータのスキャン
  • 15.14 必須オプションのチェック
  • 15.15 エラーの表示位置
  • 15.16 デフォルトパラメータの設定
  • 15.17 パラメータの値のチェック
  • 15.18 パラメータの表示
  • 15.19 オプションの後ろの引数
  • 15.20 終わりに
  • 15.21 ソースコード
  • まとめ

第16章 Linuxにおけるコンソールプログラミング

  • 16.1 MakefileからAutomakeへの移行
  • 16.2 automake&autoconfの概要
  • 16.3 automake&autoconfのインストール
  • 16.4 簡単なautomakeサンプル
  • 16.5 automakeによるビルド
  • 16.6 有用なmakeのターゲット
  • 16.7 Linuxにおけるlibsndfileのインストール
  • 16.8 Visual C++とAutomakeの関係
  • 16.9 終わりに
  • まとめ

サンプルソースコード一覧

  • 5.1 サンプリングレートとチャンネル数を表示するプログラム(au-dioinfo.cpp)
  • 6.1 PCMをカウントするプログラム(count_samples.cpp)
  • 8.1 FFTのテストプログラム(ffttest.cpp)
  • 10.1 オーディオデバイスを一覧表示するプログラム(devicelist.cpp)
  • 11.1 オーディオファイルを再生するプログラム(consoleplayer.cpp)
  • 12.1 オーディオを録音するプログラム(xxxxxxxxx.cpp)
  • 13.1 オーディオを録音/再生するプログラム(consoleeffect.cpp)
  • 14.1 WDM-KS対応(consoleplayer.cpp)
  • 15.1 getoptのサンプルプログラム(getopt_test.cpp)

著者プロフィール

松下耕二郎(まつしたこうじろう)

1977年東京都世田谷区に生まれる。2002年慶應義塾大学大学院 修士課程修了。現在,電気メーカー勤務。学生時代に男声合唱に興味を持ったことから信号処理を専攻。C/C++を使ったオーディオアプリケーションプログラマ。