# # AudioWindow.py # SoundFarmer # # Created by Donovan Preston on 8/25/04. # Copyright (c) 2004 Ulaluma. All rights reserved. # import os import pickle from math import sin import objc from Carbon import File from PyObjCTools import NibClassBuilder from Foundation import * from AppKit import * NibClassBuilder.extractClasses("AudioDocument") class AudioDocument(NibClassBuilder.AutoBaseClass): slices = objc.ivar('slices') audioFile = None _myZoomLevel = 1 audioView = objc.ivar('audioView') def zoomLevel(self): return self._myZoomLevel zoomLevel = objc.selector(zoomLevel, returnType="i") def setZoomLevel_(self, level): print "LEVEL", level self._myZoomLevel = level #self.audioView.setFrameSize_((self.frames() / level, self.audioView.frame()[1])) self.audioView.setNeedsDisplay_(True) def windowNibName(self): return "AudioDocument" def writeToFile_ofType_(self, fl, aType): return True def readFromFile_ofType_(self, fl, aType): self.audioFile = objc.lookUpClass('PyAudioFile').alloc().initWithFile_( fl) audio = NSApp().delegate().audio self.audioFile.setOutput_(audio) #audio.setDelegate_(self.audioFile) audio.setBufferMultiplier_(20) audio.setSendPlaybackNeedsRefillNotifications_(True) return True def frames(self): if self.audioFile is None: return 0 return self.audioFile.frames() frames = objc.selector(frames, returnType="i") def length(self): print "LENGTH", self.audioFile if self.audioFile is None: return 0 return self.audioFile.length() length = objc.selector(length, returnType="i") def channels(self): print "CHANNELS", self.audioFile if self.audioFile is None: return 2 return self.audioFile.channels() channels = objc.selector(channels, returnType="i") def audio(self): return self.audioFile def samplesForChannel_start_width_(self, channel, start, width): if self.audioFile is None: return NSData.dataWithBytes_length_('', 0) return self.audioFile import sys print sys.version