PyAudioでドレミファソラシド

PyAudioというAudio I/Oライブラリがあると知ったのでさっそく使ってみた。


easy_installではエラーになったので、以下のURLからdmgをダウンロードしてインストールしたらOKだった。
http://people.csail.mit.edu/hubert/pyaudio/


とりあえずドレミファソラシド。
全然音楽的なコードじゃないし、クリック音がしてる。。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import math
import array
import pyaudio


def tone(freq, sec=1, velocity=.2, rate=44100):
    w = rate / freq
    def gen():
        for i in xrange(int(rate * sec)):
            yield math.sin(float(i % w) / w * 2. * math.pi) * velocity
    return array.array('f', gen()).tostring()

p = pyaudio.PyAudio()
stream = p.open(rate=44100, channels=1, format=pyaudio.paFloat32, output=True)

scale = [ 261.63, # C
          293.66, # D
          329.63, # E
          349.23, # F
          392.00, # G
          440.00, # A
          493.88, # H
          261.63 * 2, # C
          ]

for freq in scale:
    stream.write(tone(freq, sec=.5))

stream.close()
p.terminate()