pysndobj

Python26用PySndObjの新機能

普段Pythonは25なので26用のPySndObjのチェックが遅れました。 新年も迎えまして、時間もあるので少し書いてみます。さて26用のPySndObjはインストーラ化されました。 これで初心者にも扱いやすくなったと思ったのですが、、、 起動するとNumpyがないとエラ…

おしゃべりする。

前回の記事で、フォルマント合成をしました。今回はマイクから入力した声の固定した周波数の振幅を検出し、その周波数のサインウェーブをいくつか作り合成して、ロボットボイスを生成します。なんかボコーダです。さて、具体的に難しいのはマイクから入力し…

「アイウエオ」と発音させる

少し長いのですが、まずはコードを見てもらおう。 """ 参考 http://www.sfu.ca/sca/Manuals/Csound/Hamel/Week9.html """ from sndobj import * import time #ブザーのようなサウンドを生成 tab = HarmTable(8192, 22, 4) interp = Interp(0, 0, 0.1) osc = …

組み込みモジュールとともに

新しく使用するモジュールはwaveとarrayです。これらは組み込みモジュールと呼ばれていて、PySndObjのようにインストールする必要はありません。さて、この2つのモジュールを使って音声ファイル(モノラル)からデータを取得し、バイナリをint型に変換し、それ…

音量変化とグリッチ

例えば、ボタンを押した後、またはスライダを動かした後、さらにはマウスを動かした後、急激に音量変化させるとき(SetAmpを使う場合)は注意しないといけない。急激な音量変化はグリッチを生みます。そこで非常に短い時間を持たせて滑らかに変化させる。PySnd…

FastOscとOscとOsciとOscilとOsciliとOsciltとPhOscili

(注:後で多少修正するかも、しないかも。) ひとまずグループ分けしてみよう。 FastOsc => Osc => Osci Oscil => Oscili => PhOscili => Oscilt => は継承関係を表している。まず1つめの親であるFastOscから。FastOscはテーブルサイズ(2,4,8,16,,,256,512,,…

Tableは、なぜSndThreadと関係しないのか

Xヶ所村「習作ですがPythonでシンセ」を読んでいて、いくつか注意したいところがある。それはSndTableのところである、他にもあるけど。SndTableはTableを継承したものでありコンストラクタした時点で入力したSndWaveから音声データをテーブルに読み込んでい…

少ない配列で複雑な配列を

例えばオシレータに任意で周波数の配列をあたえたいとする。ここではEnvTableを使用する。EnvTableはとても大きな配列であると考える、一方で12個ぐらいの配列をfloatArrayで作る。この小さいほうの配列を大きな方の配列に張りつける。もちろん間がスカスカ…

楽器をスイッチ

ノイズをローパスフィルタに通している状態、今、ローパス・フィルタからハイパス・フィルタにスイッチしたい。この場合、変数に新たにハイパスフィルタを代入してもうまくない、落ちたり、グリッチが起きるだろう。楽器の上位のクラスであるSndObjを上手に…

ユーザ定義の波形テーブル

(4/23 コードの7行目を修正) 以前からUsrDefTable()がうまく扱えなかった。サインの波形を生成するテーブルにHarmTable(1024, 1, SINE)が使えるのだが、例えばランダムな波形を生成したければHarmTable()では無理です。そこでUsrDefTable()を使えばいいと考…

デバイス名の取得の怪

デバイスIDから入出力デバイスの名前を取得する関数はInputDeviceNameとOutputDeviceNameですが、引数がちょっと変だ。 sndobj.InputDeviceName(0, "hoge") #2つ目の引数に何か文字列が必要だこれによりデバイスIDが0の入力デバイス名が取得できる。が、コメ…

デバイス一覧

PySndObjのマニュアルは無いみたい、よってSndObjのマニュアルを参考にしているのだけれども。そのマニュアルに書いている利用可能なデバイスを一覧表示する関数DeviceListは使えません。PySndObjでは import sndobj sndobj.ListDevices()これで入力と出力の…

スライダで再生速度を変える。

昨日の日記をふまえて、読み込んだ音声ファイルの再生速度を動的に変えてみる。その際GUIのスライダを作り、それによりコントロールする。GUIはwxPythonを使います。 from sndobj import * import wx class SndSpeed: def __init__(self, name="loop.wav" ):…

ファイルサイズの取得

以前、説明したファイル読み込みのクラスであるSndWaveは、上位クラスのSndFIOを継承しています。であるからSndFIOのメソッドのGetDataFrames()でファイルサイズを取得できます。使い方は file = SndWave("loop.wav", READ) size = file.GetDataFrames()こん…

クラス

自ら楽器を定義してみましょう。楽器といっても笛やギターやフィルタなど様々ですが、それぞれ独自の振る舞いがあります、そしてその振る舞いを定義するのがクラスです。トレモロというオブジェクトは多分PySndObjにはありませんので作ってみます、Ringとい…

GUIその2(ボタン入力)

Linuxの音楽環境のセットアップと夏風邪で前回の日記からちょい間があきました。しかし少しづつ地味に続けていきます。今日はGUIのボタンを作ってそれを1度押すと正弦波が鳴り、もう1度押すと鳴り止む、それの繰り返し。 import wx from sndobj import * tab…

GUIその1(キー入力)

PySndObjそのものにはGUIを持ちえていません。そこでwxPythonを使ってパソコンキーボードのpを押せば正弦波が鳴る、sを押せば鳴り止む、最後にqを押せば終了する。以上を作ってみる。wxPythonの入門には以下のページを参考にしました。 import wx from sndob…

MIDI入力

MIDIキーボードなどのデバイスからOscili()の周波数を変えてみましょう。 from sndobj import * import time MidiDeviceList() #利用可能なMIDIデバイスを表示します port = int(raw_input("Enter MIDI port:")) #入力待ち midi = SndMidiIn(port) note = Mi…

スレッドを使わない

昨日の日記の修正に時間を使ったので今日はサクッと。基本的にPythonで対話的に音を作れるのが嬉しいPySndObjなのでSndThreadというスレッドを使うのが1番ですが、使わない方法もあります。 from sndobj import * import time tab = HarmTable(256, 3, 4) os…

オーディオレートとコントロールレートとベクトルの大きさ

大幅に書き換えました。(2007 4/13) 昨日の日記で取り上げたローパスフィルタは引数が省略されていました。多くの(すべてではない)SndObjにおいて最後2つの引数はvector sizeとサンプリングレートです。 まずvector size(ベクトルの大きさ)ですが、これはコ…

フィルタ

PySndObjにはたくさんのフィルタがありますが、基本のローパスフィルタを使ってみる。カットオフ周波数が定数のLowPass()ではなく、オシレータなどでコントロールできるButtLP()を、例によって4つ目の引数以上は省略。 ButtLP(fr, SndObj, SndObj) #3つ目の…

エンベロープ

例として1つ取り上げます。残念ながらちょっと物足りない感じではありますが、そのうち、もうちょっといい方法が思いつくかもしれません。 エンベロープはADSRを使います。以下は8つ目の引数以上は省略しています。 ADSR(att, maxamp, dec, sus, rel, dur, S…

ファイル書き込み

正弦波をpyo.wavに書き込む。昨日の日記、SndWaveをファイル書き込みに使用します。再生しながらファイルに書き込む方法は今調査中。 from sndobj import * import time tab = HarmTable() osc = Oscili(tab, 440, 3000) write = SndWave("pyo.wav", OVERWRI…

ファイルの読み込み

何通りかの方法が考えられるんですが、PySndObjにはSndObjクラスの下にSndReadがあり、SndIOクラスの下にはSndWaveなどがあって、多くの入出力がSndObjをあつかうので、SndWaveは1度SndInに突っ込んでからになってします。ちょっと面倒くさいのでSndReadから…

周波数変調

正弦波の次はその周波数変調。調べたところ2通りあるようで、その1つはOsciliの4番目の引数に周波数をコントロールするためにサウンドオブジェクトを代入できる、下のコードではmodですね。 from sndobj import * import time tab = HarmTable() mod = Oscil…

PySndObjはじめました。

ChucKも続けていきますがちょっと休憩。グループで書く日記もあるようなのでそちらのほうに移していこうかと。次はNyquistかCommonLispMusicなどの関数型の音響言語を勉強しようと思っていたんですが、なんかノイジーパイソンって事で。 さてPySndObjですが…