銀月の符号

Python 使い見習いの日記・雑記

現在進行中、おーぷんMIDIぷろじぇくと、 MIDIData の Python ラッパー作成3

くずさんのおーぷんMIDIプロジェクト 、 MIDIDataライブラリの Python ラッパー作成中。現在、 __del__ メソッドでのメモリの自動開放を行えるようにしようとしているが、うまく動作せず。多重開放してしまう。上位のオブジェクトを Delete すると、下位のトラック、イベントのメモリも開放されてしまうため。もう少し考える必要あり。

MIDIData のラッパーの前に MIDIIO, MIDIClock のラッパーのほうが先に完成してしまいそうな予感。これらのほうが MIDIData よりもラッパー作るにあたっての作業量、課題が圧倒的に少ない。各種メソッド、プロパティを作る単純作業を数十分おこなったが、これだけで形になってきた。現時点の MIDIClock ラッパーを使うコードはこんな感じ。

# coding: utf-8
import sys
from midiclock.midiclock import *

def test_master():
    millisec = 0
    tick_count = 0
    # MIDI クロックの生成
    midi_clock = MIDIClock.create(u'MASTERTPQNBASE', 120, 60000000/100)
    midi_clock.reset()
    midi_clock.start()
    while millisec < 100:
        millisec = midi_clock.millisec
        tick_count = midi_clock.tick_count
        print u'%6d[ミリ秒]、%6d[tick]' % (millisec, tick_count)
    midi_clock.stop()

def test_slave():
    millisec = 0
    tick_count = 0
    # MIDI クロックの生成
    midi_clock = MIDIClock.create(
            u'SLAVEMIDITIMINGCLOCK', 120, 60000000/100)
    midi_clock.reset()
    midi_clock.start()
    while tick_count < 60:
        if sys.stdin.read(1) == '\n':
            midi_clock.put_message('\xf8')
        millisec = midi_clock.millisec
        tick_count = midi_clock.tick_count
        print u'%6d[ミリ秒]、%6d[tick]' % (millisec, tick_count)
    midi_clock.stop()

def main():
    test_master()
    test_slave()

if __name__ == '__main__':
    main()