"""SoundFarmer """ import os from math import sin from struct import pack import objc from PyObjCTools import NibClassBuilder from Foundation import NSData import AppKit import PyCoreAudio import ToolbarHelper _16BIT = 2**16.0/2.0-0.5 NibClassBuilder.extractClasses('MainMenu.nib') class SFAppDelegate(NibClassBuilder.AutoBaseClass): def applicationDidFinishLaunching_(self, notification): self.offset = 0 self.audio.setBufferMultiplier_(1) def toggle_(self, sender): pass def play_(self, sender): if hasattr(sender, 'audio'): print "DOCUMENT" self.audio.setDelegate_(sender.audio()) self.audio.setSendPlaybackNeedsRefillNotifications_(True) self.audio.setDeviceOpen_(True) def stop_(self, sender): self.audio.setSendPlaybackNeedsRefillNotifications_(False) self.audio.setDeviceOpen_(False) def receiveAudioSampleData_(self, data): pass def playbackNeedsRefill_(self, half): print "half", half offset = self.offset bytes = '' for frame in xrange(256): v = int( (0.5 * sin(3.1415*440.0/8000.0*(frame+offset))) * _16BIT) bytes += pack('b', v >> 8) bytes += pack('b', 0x0f & v) self.audio.queueAudioSampleData_sequenceNumber_( NSData.alloc().initWithBytes_length_(bytes, 512), 0) self.offset += 256