Pyoの紹介チュートリアル

pyoは、Pythonシンセサイザーやドラムマシンなどの音楽ソフトウェアを簡単に作れるモジュールです。サウンド処理部分はCで書かれていて、Linux、Win、Macに対応しています。同様の音楽モジュールにPySndObjというものがあります、この日記でよく取り上げていたものです。pyoの機能はココで一覧できます、素晴らしい!。さて以下の文章ですが、短いチュートリアルの翻訳です。

>>>それでは本文

Pyoの紹介チュートリアル

これは、Pyoのクイックチュートリアルだ。君が、すでにPythonオブジェクト指向についての知識があるものと仮定している。

PyoサーバーとGUI

Pyoを使用するために、はじめに君がすることは、pythonモジュールpyoを読み込み、そしてサーバーを起動することだ。このオーディオ・サーバーは、オーディオとmidiインターフェイスをオープンし、そして別のpyoオブジェクトによって生み出されるオーディオやMIDIを、サーバーに送れるようにする。さて音をだすには以下のようにするんだ。

from pyo import *
s = Server().boot()
s.start()
a = Sine(mul=0.01).out()

変数sは、boot関数を使って、起動されたサーバーのインスタンスを保持するんだ。オーディオとMIDIインターフェイスをオープンすることに加え、サーバーを起動し、そしてサンプリングレートとチャンネル数を設定する、しかしサーバーは、start()メソッドが呼ばれるまではオーディオ処理しないぞ。Sineオブジェクトをつくったその後に、outメソッドが呼ばれ、変数aに保持される。Sineクラスはサインウェーブオシレータを定義する。sineクラスのoutメソッドは、オシレータの出力をサーバーの出力につなげる。このコードを再生させるときに、君の耳がふっどばないようにSineオブジェクトのmul属性を設けている、クリッピングする前の最大振幅は、つまり標準の振幅の乗数は1ってことだよ(属性についてはあとで話していくぞ)。以下のようにサーバーはストップできる

s.stop()

対話すべきか、対話しないべきか

君が、対話型のpythonシェルから上記のスクリプトを実行したのなら、サイン音が聞こえたはずだが、もし対話型ではなくスクリプトを走らせていたら、なんでなんにも聞こえないのと自答していたかもしれないな。理由は、サーバーが出力にオーディオを送る前に、スクリプトは終了していたからなんだ。だから対話型ではないpythonをつかっているのなら、こちら例を試してみてくれ。

from pyo import *
s = Server().boot()
s.start()
a = Sine(mul=0.01).out()
s.gui(locals())

最後の行に、このインスタンスために小さい制御GUIをつくる、サーバークラスにあるとても便利なメソッドを見ることができる。serverオブジェクトのguiメソッドは、スクリプトを走らせ続け、君にサーバーの開始と停止、出力音量、サーバーで生成されたオーディオファイルの録音をさせる。サーバーGUIの便利な機能は、下にある対話型のテキストボックスだ。そこから君は対話的にインタプリタにコマンドを送り、オブジェクトをスタートそしてストップし、オブジェクトを生成、破壊などができる。

オブジェクトの特性を変更

Sineクラスは以下のように定義される。

Sine(self, freq=1000, phase=0, mul=1, add=0)

君は、この式に周波数、初期位相、乗数、DCオフセットの値を与える。また、もし君がサーバーguiを使わないで同じようにしたければ、スクリプトでサーバーのstart()メソッドを使用できる、だけれども、君がPythonを非対話型で走らせたいのなら、スクリプトでサーバーを起動している間はtimeモジュールのsleep関数を使う必要があるだろう。

from pyo import *
import time
s = Server().boot()
a = Sine(440, 0, 0.1).out()
s.start()
time.sleep(1)

気づいた、君は上で定義したSineのように順番にパラメータを設定できるんだ、ただ、君が標準の状態のままで使いたいなら、パラメータに名前をつけれる。

a = Sine(mul=0.1).out()

いったんオブジェクトが作られたら、メソッドでアクセスすることで属性を修正できる。例えば、生成されたオシレータオブジェクトの周波数を修正するのに使える。

a.freq = 1000

しかし直接、属性に設定できる。

オブジェクトを変更

Sineクラスのようなオブジェクトは他のクラスを入力として使える、例えば周波数変調。

from pyo import *
s = Server().boot()
mod = Sine(freq=6, mul=50)
a = Sine(freq=mode + 440, mul=0.1).out()
s.gui(locals())

このようにサイン波のためのエンベロープが作れる。

from pyo import *
s = Server().boot()
f = Adsr(attack=.01, decay=.2, sustain=.5, release=.1, dur=.5, mul=.5)
a = Sine(mul=f).out()
f.play()
s.gui(locals())

クラスの例

pyoのすべてのクラスは使い方を示した例が付属している。例を実行するためにはこうしよう。

from pyo import *
example(Harmonizer)

これはHarmonizerクラスの例を示し、実行するだろう。<12/8>誤字脱字修正