課題講評回
課題内容:Fine Collection of Curious Sound Objectsを参考に、録音、再生、音響合成を使用して、簡単なインタラクションによって、音を発生する「楽器 (ソフトウェア版)」を作成する。
参考:Fine Collection of Curious Sound Objects
インタフェイスについて
- 久保田先生による、導電布を用いたインタフェイス制作のデモ
ソフトウェア楽器とデバイスを連携させる
この解説のオリジナル(英語)のページはこちら → playground – MaxMSP
Arduino2Max (Version .4)
Arduino2Maxは、Arduinoの12コのデジタル入力と6つのアナログ入力を、Max/MSPの環境で読むことを可能にする、Maxパッチとそれに付随するArduinoのコードのセットです。使用するためには、下記のリンクにあるArduino2MaxのZipファイルをダウンロードして、中に含まれるArduinoのコードを使用して、Arduinoをプログラムします。
次に、中に含まれているMAXファイルをコピーします。

上に示したプルダウンメニューは、通信するシリアルポートの選択をあらわしています。このパッチの「Start」で開始すると、名前をつけた受信用のオブジェクトから、Arduinoのピンから受信された値を受信することが可能となります。

これはデジタル入力の読取方法です。

Arduino2Maxは、Arduinoからの入力を読み取るだけです。しかし、すこし改良すれば、シリアルの書き出しも可能となります。自由に改変して、プログラムバージョンを上げてリポストしてください。
Arduino2Max, Version .40 October 30th, 2007 DOWNLOAD v .4
- Max 4.5以上の実行環境が必要
- Intel Mac 1.83/OSX10.4/Diecimila/Freeduino/MAX4.5 以上で作動
- USBポートを選択するプルダウンメニューを追加
サンプリングについて
サンプリグ (標本化)とは
- 時間的に連続した信号を一定の間隔をおいて測定することにより、離散的な(連続でない)データとして収集すること
- 時間的に連続した信号 = アナログ信号
- 離散的な信号 = デジタル信号

信号のサンプリング(標本化) (wikipediaより)
音響における、サンプリング・プレイバック
- オーディオ信号をデジタル・レコーディングして、再生すること
- サンプリング – アナログ信号をデジタル信号に→AD変換
- プレイバック – デジタル信号をアナログ信号に→DA変換
コンピュータで音響を処理する際の情報の流れ

- マイクで音を収録、物理振動を電気信号に
- サンプリング周波数の半分以上の周波数の波形は折り返し雑音となってしまう
- ローパスフィルタ(アンチエイリアシングフィルタ)で、余計な高周波成分をカット
- アナログからデジタルに変換 (AD変換)
- メモリに保存
- 保存したメモリー内の信号を様々な手法で加工、処理 ← この部分が創作の主な部分
- デジタルからアナログに変換 (DA変換)
- サンプリングのした信号のままでは、余計な高周波成分が含まれている(量子化ノイズ)
- ローパスフィルタ(平準化フィルタ)で、余計な高周波成分をカット
- アンプ(amplifier)で信号を増幅
- スピーカーから音を物理振動へ変換
サンプリング周波数と量子化ビット数
- サンプリング周波数 – 1秒間にいくつのサンプルを使用してサンプリングするか、単位はHz
- 量子化ビットレイト – AD変換の際に信号を何段階の数値で表現するか、単位はbit

サンプリング周波数と量子化ビット数
主なメディアのサンプリング周波数と量子化ビット数
- CD – サンプリング周波数:44,100Hz、量子化ビット数:16bit
- DV(ビデオ) – サンプリング周波数:48,000Hz、量子化ビット数:16bit
- DVD-Video – サンプリング周波数:48,000Hz/96,000Hz、量子化ビット数:16bit/24bit
- コンピュータ(Mac, win) – 設定やオーディオインタフェイスの性能により異なる
- Macの場合は「Audio MIDI 設定」で現在の設定を確認可能

Audio MIDI 設定
ナイキストの定理 (標本化定理)
- 情報理論分野における重要な定理
- 原信号に含まれる最大周波数成分をfとすると2fよりも高い周波数fsで標本化した信号は、低域通過(ローパス)フィルターで高域成分を除去することによって原信号を完全に復元することができる
- つまり、復元したい周波数の上限の2倍のサンプリング周波数でサンプリングすることで、完全に元の音声を再現できることができる
- CDのサンプリング周波数は、44,100Hzに設定されている。これは人間の耳が20Hzから20,000Hzまでしか聞くことができないという性質から導きだされている

サンプリング周波数の1/2以上の周波数の波形は再現できない (wikipediaより)
Max/MSPでサンプリング&プレイバック
ディスクベース v.s. メモリベース
- ディスクベースのサンプリング
- ハードディクス上のサウンドデータを直接再生
- プログラミングが楽←→自由度が低い
- 長時間のサウンドもへっちゃら
- メモリベースのサンプリング
- ハードディスク上のサウンドデータをメインメモリに読み込んでから再生する
- 自由度が高い←→プログラミングが大変
- 長時間のサウンドを扱うとメモリを大量に消費してしまう
ディスクベースのサンプリング・プレイバック
- sfrecord~
- ハードディスクへサウンドを録音する
- 第1引数はチャンネル数
- sfplay~
- ハードディスクからサウンドを再生する
- 第1引数はチャンネル数
サウンドファイルの再生
- sfplay~ サウンドファイルを再生する
- メッセージ “open” を入力すると、サウンドファイル選択画面に
- トグルボタンで、start / stop
- “speed 値” で再生スピードを変化させられる

サウンドファイルへ録音
- sfrecord~ サウンドファイルを録音しファイルに保存
- 録音に際しては、手順が重要
- sfrecrod~に”open”を入れて、サウンドファイルを保存
- “adc~” をonにすると録音準備状態になる
- トグルスイッチをonにすると録音が開始する

メモリベースのサンプリング
- メインメモリ上に指定した容量の容器を用意する必要がある
- “buffer~” オブジェクトがこの容器の相当する
- buffer~
- サンプリングのためのバッファーを確保するためのオブジェクト
- buffer~ [バッファー名] [バッファーサイズ] [チャンネル数]
- 下の例の場合
- バッファー名:mybuf
- サイズ:10000ms
- チャンネル数:2

buffer~ オブジェクト
“buffer~” に録音 (サンプリング) する
- record~ オブジェクトを使用する
- record~ バッファー名
- 例:オーディオ入力を mybuf という名前のバッファーに録音する

“buffer~” に録音したサンプルの中身を表示する
- waveform~ オブジェクトを使用する
- 「set バッファー名」というメッセージを入れると内容を表示する
- buffer~ に「read」というメッセージを入れるとオーディオファイルを読み込んでメモリに取り込むことができる

- buffer~, recod~, waveform~ を組合せることで、リアルタイムに録音した音をメモリに保存し、その内容を波形として確認することができる

メモリーベースのプレイバック
- groove~を利用すると、高度なプレイバックが実現できる
- 再生範囲の指定、スピード、ループ など

メモリーベースのプレイバック:応用
- 2つの buffer~ を並列して使用
- buffer~ の名前に注意 (同じ名前は使ってはいけない)


- sah~ と組合せる
- sah~:サンプル&ホールド:一定の間隔に信号を切り刻んで変化させる装置

フィルタと組み合わせる

来週までの課題
Fine Collection of Curious Sound Objectsを参考に、録音、再生、音響合成を使用して、簡単なインタラクションによって、音を発生する「楽器 (ソフトウェア版)」を作成する。
サンプルファイルのダウンロード
解説で触れた全てのファイルはダウンロード可能です。以下のリンクからダウンロードしてください。
サンプルファイルのダウンロード
解説で触れた全てのファイルはダウンロード可能です。以下のリンクからダウンロードしてください。
課題「4つ以上のオシレータを使用した楽器」のミニ講評回
- 課題をB-labのファイルサーバにアップ
- ひとりずつ、作成したパッチの簡単なデモ+解説をお願いします
パッチを便利にする工夫
GUI機能
- Numberboxをマウスでドラッグして数値を変更することも可能だが、UIの使い易さとしては若干不親切
- Max/MSPには、便利なGUIパーツが多数用意されている
- 数値を設定 – diarl、slider、multiSlider
- シグナルのゲイン(音量)の設定 – gain~
- 鍵盤 – keybord
- 複数の値を設定 – multiSlider
- (x,y)平面にグラフを描いて、その値を記録 – function
GUI機能の使用例

dial sliderでオシレータの周波数を設定、gain~で音量を設定

keybordで音程を入力、functionでエンベロープ(音の時間的変化)を設定

multisliderで複数のオシレータの周波数と音量をコントロール
パラメータの記憶、preset
- パフォーマンスの前に、大量のパラメータを設定していくのは大変
- preset を使用することで、ナンバーボックスや slider や dial などの値を記憶することができる
- パラメータを記憶させたくないオブジェクトには、preset の第3アウトレットの出力を入力する
- shift + クリックで値を記憶、クリックで記憶した値に設定

multislider の例に preset 機能を付加
cycle~ 以外のオシレータ
- rect~ – 矩形波
- saw~ – ノコギリ波
- try~ – 三角波
- noise~ – ホワイトノイズ
シグナルのふりわけ

いろいろな波形のオシレータを切り替えて再生
左から、sin波、矩形波(パルス)、ノコギリ波、三角波
send と receive
- パッチケーブルなしにメッセージをやりとりする
- 送信側「s hoo」受信側「r hoo」※hooの部分は任意に名前をつける
- シグナルの場合は、「send~ hoo」「receive~ hoo」

send と receive
サブパッチを使用する
- 同じようなオブジェクトのブロックがくりかえし用いられている場合、サブパッチ化したほうがすっきりとまとまる
- 「p patchname」というオブジェクトを作成し、ダブルクリックすると中にもうひとつパッチが出現する
- サブパッチへの入力は「inlet」、サブパッチから出力は「outlet」

エンベロープ付きのオシレータをサブパッチ化する

サブパッチ「partial」
プレゼンテーションモード
- プレゼンテーションモード – 選択したオブジェクトだけを画面上に残して、余計な部分は隠してしまうことができる
- パッチをunlockして編集している状態で、オブジェクトを選択し、[option] + クリックでメニューを表示して、その中から”Add to Presentation” を選択
- 画面下のPresentation Modeボタンを押すと、登録したオブジェクト以外は表示されなくなる
- この状態で、表示されたオブジェクトを、自分の好きな場所に再配置することも可能
- より洗練されたGUIを構築可能

エンベロープ付きのオシレータをサブパッチ化したものを、プレゼンテーションモード化
いろいろな音響合成の手法
加算合成
- 音の足し算による合成
- すべての周期のある波形は理論的にsin波とcos波の組み合わせで表現することができる → フーリエ級数展開
- 歴史は古い – パイプオルガン、ハモンドオルガン
- 倍音成分を多く含んだ複雑な音色は合成が困難
- サブパッチの例で作成した cycle~ を足しあわせるサンプルが、まさに加算合成

パイプオルガン – 加算合成を利用した楽器

加算合成の例
減算合成:
- 音の引き算による合成
- 倍音成分をたくさん含んだ音(ノコギリ波、パルス波など)もしくはノイズを、フィルタで削っていく
- アナログシンセサイザーの多くは、減算合成を使用
- 比較的に、直感的な音作りが可能

Moogシンセサイザ – 減算合成方式を使用

減算合成の例
変調合成1:音量の変調 – AM (Amplitude Modulation)、RM (Ring Modulation)
- 変調 – 元になる信号のパラメータを別のオシレータをつかって変化させる
- 信号の振幅(= 音量)をオシレーターで変化させる – RM変調、AM変調
- 変調させるオシレータの振幅の範囲が、-1.0〜1.0の場合 – RM変調
- 変調させるオシレータの振幅の範囲が、0.0〜1.0の場合 – AM変調

RM変調合成の例

AM変調合成の例
変調合成2:周波数の変調 – FM (Frequency Modulation)
- 信号の周波数を別のオシレータで変調する音響合成方式
- ジョン・チョウニングを中心としてスタンフォード大学のCCRMA(Center for Computer Research in Music and Acoustics)で開発
- ヤマハがライセンスを受け実用化 (1975)
- Yamaha DX7 (1983) が80年代の音楽シーンを席巻
- わずかなパラメータで非常に複雑な倍音成分をもった音響を生成することが可能

YAMAHA DX7

FM変調合成の例1 – シンプルなFM

FM変調合成の例2 – エンベロープ付きFM

サブパッチ「simplefm」キャリアとモジュレータの比率からFM合成する
サンプリング&プレイバック導入
課題「サンプリング&プレイバックを使用したライブパフォーマンス」
- adc~ record~ buffer~ waveform~ groove~ を使用したサンプルパッチを配布
- adc~ – オーディオ信号を入力する
- record~ – 入力した信号をbuffer~に記録する
- buffer~ – 入力したオーディオを格納する場所、[read]メッセージを使用してサウンドファイルを読みこむことも可能
- waveform~ – buffer~ に格納された音を波形表示する、表示した波形の一部を選択する
- groove~ – buffer~ に格納された音を様々な手法で再生することができる、ループ、ピッチの変更、ランダムに読み出しなど
- サンプルパッチを改造して自分専用のライブパフォーマンス楽器を作成する

サンプリング&プレイバックのサンプル
サンプルファイルのダウンロード
この授業で説明したプログラムは下記からダウンロードできます。
イントロダクション
この授業について
- 春学期の前期の第1クォーター(4月12日〜5月24日)に行います (授業回数は6回)
- 教室は206教室
- 選択必修
この授業の構成
- 全体の統括、久保田さん
- 月曜担当:田所 – 主にソフトウェアによる音響プログラミング(Max/MSP)担当
- 火曜担当:矢坂さん – 主にデバイス(Arduino)を使用したコントローラ制作を担当
最終的な目標
- オリジナル「楽器」を作る
- 物理的なコントローラをArduinoで制作
- ソフトウェアによる音響合成をMax/MSPで行う
- 最後の講評会では、自作楽器によるパフォーマンスを行います
月曜授業のおおまかなスケジュール
- 04/12:イントロダクション、Max/MSP入門
- 04/19:Max/MSPによる音響合成
- 04/26:Max/MSPによるサンプリング&プレイバック
- 05/10:インタフェイスについて、Max/MSPと外部デバイスの連携
- 05/17:個人制作プレゼンテーション
- 05/25 (※火曜日と統合):最終発表会 (自作楽器パフォーマンス)
Max/MSP Jitter入門
Max/MSP Jitterとは?

- Max/MSP Jitter:サンフランシスコのソフトウェア企業Cycling ’74が開発・保守している音楽とマルチメディア向けのグラフィカルな統合開発環境(ビジュアルプログラミング言語)
- Max:グラフィカルな音楽プログラミング言語
- MSP:MAXにデジタル信号処理(DSP)機能を追加 → 直接音響を生成、操作することを可能に
- Jitter:2D、3Dグラフィック、マトリクス操作を可能にするオブジェクト群 → 映像の生成、操作を可能にする
簡単な歴史
- 専用ハードウェアの自体 1:1981年、Miller PucketteがパリのIRCAMで、Sogitec 4X というデジタル音響処理専門のワークステーションをコントロールするために使用する専門のソフトウェア「Pathcer」として開発。
- 専用ハードウェアの時代 2:1991年、音響処理のための専用ボード、ISPW(IRCAM Signal Processing Workstation)+Max/FTSとして、NeXTコンピュータに移植される。しかし、その後NeXTがハードウェア事業から撤退。
- パーソナルな環境への移行 1:1991年 Macintosh版MAX – MIDIの処理を中心にした機能。DSP(デジタル信号処理)には未対応。
- パーソナルな環境への移行 2:1997年 MSP発売 – MaxにDSP機能を追加。Macintosh単体で音響生成が可能に。
- マルチメディアプログラミング環境へ:2002年 Jitter発売 – グラフィカルプラグラミングのためのオブジェクト群。
- 現在もバージョンアップをしながら開発は継続している。2010年4月現在の最新版はMax 5 (ver 5.1.3)。

4X

NextコンピュータとISPWボード
Max/MSP Jitterの兄弟たち

pdとjMax
Max/MSPを利用した作品例
とりあえず起動してみる
- “MaxMSP.app”を起動する。
- 注意:“MaxMSP Runtime.app” ではないRuntimeは既にできあがったプログラム(パッチ)の実行専用、Runtimeはフリーでダウンロードできる。

Max/MSPの基本構成
- Maxウィンドウ:処理結果やエラーなどのテキスト情報を表示。
- Patcherウィンドウ:ここにプログラムを作成する。
- オブジェクトパレット:Patcherウィンドウの画面をダブルクリックすると出現。分野別に整理された「道具箱」のようなもの。

Maxウィンドウ

Patcherウィンドウ

オブジェクトパレット
簡単なパッチを作成してみる

オブジェクトの種類
- プログラムの処理をする単位
- Maxでは、このオブジェクトを接続していくことで、プログラムを構築していく

基本的なオブジェクト

GUIオブジェクト
インレットとアウトレット
- 上についている「ポッチ」がインレット。オブジェクトに値を入力する。
- 下についている「ポッチ」がアウトレット。オブジェクトから値を出力する。
- 数値や信号などが、上から下に流れ落ちていくイメージ

インレットとアウトレット
音を出してみる
- Sin波を生成する簡単なパッチ(プログラム)を作成する
- 「cycle~」:Sin波の信号を生成するオブジェクト。オシレータ。
- 「dac~」:音を出力するオブジェクト。Digital Analog Converter
- cycle~ と dac~ を繋いでいるパッチケーブルが黄色と黒の縞模様になっているところに注目。この線の中にシグナル(つまり音響信号)が流れていることを表現している。

sin波を出力(※大音量で再生されるので、ボリュームに注意!!)
音程(周波数)を変化させる
- 方法1:「cycle~」の箱のなかに数値を直接記入する
- 方法2:「cycle~」の第1インレットに数値を入力する

sin波を出力
周波数を変化させる
音量を変化させる – 音のかけ算
- 音量を調整するには? 全ての音の信号に一定の値をかけ算する
- 「*~」オブジェクト:シグナルのかけ算 (※単独の数値のかけ算「*」との違いに注意)

音量を変化させる
2つの音を混ぜる – 音の足し算
- 2つの音を混ぜるには、信号の足し算
- 「+~」オブジェクト:シグナルの足し算 (※単独の数値の足し算「+」との違いに注意)
- 複数のパッチケーブルを同じインレットに繋ぐことでも表現可能

音を足し合わせる
音を見る
- 音の波形を表示してみる
- 「scope~」を使う
- scope~ オブジェクトを配置して接続した後、オブジェクトを右クリックして「Inspector」を選択
- Valueタブを選択。Buffer Sizeを100に、Buffers per pixelsを2に設定

scope~ オブジェクトの設定

波形の表示
宿題!!
- 来週までに以下のパッチを作成して発表する
- 課題:4つ以上のオシレータを用いたソフトウェア楽器(Max/MSPパッチ)をデザインせよ
課題制作のヒント
キーボードで音程を変化させる

オシレータの音量を別のオシレータで変化させてみる(AM)

オシレータの音程を別のオシレータで変化させてみる(FM)

音量を時間的に変化させる(エンベロープ)
