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>誤字脱字修正