|
From: <pst...@us...> - 2008-05-26 21:18:35
|
Revision: 567
http://jazzplusplus.svn.sourceforge.net/jazzplusplus/?rev=567&view=rev
Author: pstieber
Date: 2008-05-26 14:18:33 -0700 (Mon, 26 May 2008)
Log Message:
-----------
Added more portmidi files from the latest svn.
Added Paths:
-----------
trunk/jazz/portmidi/CHANGELOG.txt
trunk/jazz/portmidi/license.txt
trunk/jazz/portmidi/pm_cl/
trunk/jazz/portmidi/pm_cl/README_CL.txt
trunk/jazz/portmidi/pm_cl/cffi-portmidi.lisp
trunk/jazz/portmidi/pm_cl/test-no-cm.lisp
trunk/jazz/portmidi/pm_linux/Makefile
trunk/jazz/portmidi/portmidi.sln
trunk/jazz/portmidi/portmidi.vcproj
trunk/jazz/portmidi/portmusic_logo.png
Added: trunk/jazz/portmidi/CHANGELOG.txt
===================================================================
--- trunk/jazz/portmidi/CHANGELOG.txt (rev 0)
+++ trunk/jazz/portmidi/CHANGELOG.txt 2008-05-26 21:18:33 UTC (rev 567)
@@ -0,0 +1,158 @@
+/* CHANGELOG FOR PORTMIDI
+ *
+ * 17Jan07 Roger Dannenberg
+ * - Lots more help for Common Lisp user in pm_cl
+ * - Minor fix to eliminate a compiler warning
+ * - Went back to single library in OS X for both portmidi and porttime
+ *
+ * 16Jan07 Roger Dannenberg
+ * - OOPS! fixed bug where short messages all had zero data
+ * - Makefile.osx static library build now makes universal (i386 + ppc)
+ * binaries
+ *
+ * 15Jan07 Roger Dannenberg
+ * - multiple rewrites of sysex handling code to take care of
+ * error-handling, embedded messages, message filtering,
+ * driver bugs, and host limitations.
+ * - fixed windows to use dwBufferLength rather than
+ * dwBytesRecorded for long buffer output (fix by Nigel Brown)
+ * - Win32 MME code always appends an extra zero to long buffer
+ * output to work around a problem with earlier versions of Midi Yoke
+ * - Added mm, a command line Midi Monitor to pm_test suite
+ * - Revised copyright notice to match PortAudio/MIT license (requests
+ * are moved out of the license proper and into a separate paragraph)
+ *
+ * 18Oct06 Roger Dannenberg
+ * - replace FIFO in pmutil with Light Pipe-based multiprocessor-safe alg.
+ * - replace FIFO in portmidi.c with PmQueue from pmutil
+ *
+ * 07Oct06 cpr & Roger Dannenberg
+ * - overhaul of CoreMIDI input to handle running status and multiple
+ * - messages per packet, with additional error detection
+ * - added Leigh Smith and Rick Taube support for Common Lisp and
+ * - dynamic link libraries in OSX
+ * - initialize static global seq = NULL in pmlinuxalsa.c
+ *
+ * 05Sep06 Sebastien Frippiat
+ * - check if (ALSA) seq exists before closing it in pm_linuxalsa_term()
+ *
+ * 05Sep06 Andreas Micheler and Cecilio
+ * - fixed memory leak by freeing someo objects in pm_winmm_term()
+ * - and another leak by freeing descriptors in Pm_Terminate()
+ *
+ * 23Aug06 RBD
+ * - various minor fixes
+ *
+ * 04Nov05 Olivier Tristan
+ * - changes to OS X to properly retrieve real device name on CoreMidi
+ *
+ * 19Jul05 Roger Dannenberg
+ * - included pmBufferMaxSize in Pm_GetErrorText()
+ *
+ * 23Mar05 Torgier Strand Henriksen
+ * - cleaner termination of porttime thread under Linux
+ *
+ * 15Nov04 Ben Allison
+ * - sysex output now uses one buffer/message and reallocates buffer
+ * - if needed
+ * - filters expanded for many message types and channels
+ * - detailed changes are as follows:
+ * ------------- in pmwinmm.c --------------
+ * - new #define symbol: OUTPUT_BYTES_PER_BUFFER
+ * - change SYSEX_BYTES_PER_BUFFER to 1024
+ * - added MIDIHDR_BUFFER_LENGTH(x) to correctly count midihdr buffer length
+ * - change MIDIHDR_SIZE(x) to (MIDIHDR_BUFFER_LENGTH(x) + sizeof(MIDIHDR))
+ * - change allocate_buffer to use new MIDIHDR_BUFFER_LENGTH macro
+ * - new macros for MIDIHDR_SYSEX_SIZE and MIDIHDR_SYSEX_BUFFER_LENGTH
+ * - similar to above, but counts appropriately for sysex messages
+ * - added the following members to midiwinmm_struct for sysex data:
+ * - LPMIDIHDR *sysex_buffers; ** pool of buffers for sysex data **
+ * - int num_sysex_buffers; ** how many sysex buffers **
+ * - int next_sysex_buffer; ** index of next sysexbuffer to send **
+ * - HANDLE sysex_buffer_signal; ** to wait for free sysex buffer **
+ * - duplicated allocate_buffer, alocate_buffers and get_free_output_buffer
+ * - into equivalent sysex_buffer form
+ * - changed winmm_in_open to initialize new midiwinmm_struct members and
+ * - to use the new allocate_sysex_buffer() function instead of
+ * - allocate_buffer()
+ * - changed winmm_out_open to initialize new members, create sysex buffer
+ * - signal, and allocate 2 sysex buffers
+ * - changed winmm_out_delete to free sysex buffers and shut down the sysex
+ * - buffer signal
+ * - create new function resize_sysex_buffer which resizes m->hdr to the
+ * - passed size, and corrects the midiwinmm_struct accordingly.
+ * - changed winmm_write_byte to use new resize_sysex_buffer function,
+ * - if resize fails, write current buffer to output and continue
+ * - changed winmm_out_callback to use buffer_signal or sysex_buffer_signal
+ * - depending on which buffer was finished
+ * ------------- in portmidi.h --------------
+ * - added pmBufferMaxSize to PmError to indicate that the buffer would be
+ * - too large for the underlying API
+ * - added additional filters
+ * - added prototype, documentation, and helper macro for Pm_SetChannelMask
+ * ------------- in portmidi.c --------------
+ * - added pm_status_filtered() and pm_realtime_filtered() functions to
+ * separate filtering logic from buffer logic in pm_read_short
+ * - added Pm_SetChannelMask function
+ * - added pm_channel_filtered() function
+ * ------------- in pminternal.h --------------
+ * - added member to PortMidiStream for channel mask
+ *
+ * 25May04 RBD
+ * - removed support for MIDI THRU
+ * - moved filtering from Pm_Read to pm_enqueue to avoid buffer ovfl
+ * - extensive work on Mac OS X port, especially sysex and error handling
+ *
+ * 18May04 RBD
+ * - removed side-effects from assert() calls. Now you can disable assert().
+ * - no longer check pm_hosterror everywhere, fixing a bug where an open
+ * failure could cause a write not to work on a previously opened port
+ * until you call Pm_GetHostErrorText().
+ * 16May04 RBD and Chris Roberts
+ * - Some documentation wordsmithing in portmidi.h
+ * - Dynamically allocate port descriptor structures
+ * - Fixed parameter error in midiInPrepareBuffer and midiInAddBuffer.
+ *
+ * 09Oct03 RBD
+ * - Changed Thru handling. Now the client does all the work and the client
+ * must poll or read to keep thru messages flowing.
+ *
+ * 31May03 RBD
+ * - Fixed various bugs.
+ * - Added linux ALSA support with help from Clemens Ladisch
+ * - Added Mac OS X support, implemented by Jon Parise, updated and
+ * integrated by Andrew Zeldis and Zico Kolter
+ * - Added latency program to build histogram of system latency using PortTime.
+ *
+ * 30Jun02 RBD Extensive rewrite of sysex handling. It works now.
+ * Extensive reworking of error reporting and error text -- no
+ * longer use dictionary call to delete data; instead, Pm_Open
+ * and Pm_Close clean up before returning an error code, and
+ * error text is saved in a system-independent location.
+ * Wrote sysex.c to test sysex message handling.
+ *
+ * 15Jun02 BCT changes:
+ * - Added pmHostError text handling.
+ * - For robustness, check PortMidi stream args not NULL.
+ * - Re-C-ANSI-fied code (changed many C++ comments to C style)
+ * - Reorganized code in pmwinmm according to input/output functionality (made
+ * cleanup handling easier to reason about)
+ * - Fixed Pm_Write calls (portmidi.h says these should not return length but Pm_Error)
+ * - Cleaned up memory handling (now system specific data deleted via dictionary
+ * call in PortMidi, allows client to query host errors).
+ * - Added explicit asserts to verify various aspects of pmwinmm implementation behaves as
+ * logic implies it should. Specifically: verified callback routines not reentrant and
+ * all verified status for all unchecked Win32 MMedia API calls perform successfully
+ * - Moved portmidi initialization and clean-up routines into DLL to fix Win32 MMedia API
+ * bug (i.e. if devices not explicitly closed, must reboot to debug application further).
+ * With this change, clients no longer need explicitly call Pm_Initialize, Pm_Terminate, or
+ * explicitly Pm_Close open devices when using WinMM version of PortMidi.
+ *
+ * 23Jan02 RBD Fixed bug in pmwinmm.c thru handling
+ *
+ * 21Jan02 RBD Added tests in Pm_OpenInput() and Pm_OpenOutput() to prevent
+ * opening an input as output and vice versa.
+ * Added comments and documentation.
+ * Implemented Pm_Terminate().
+ *
+ */
Added: trunk/jazz/portmidi/license.txt
===================================================================
--- trunk/jazz/portmidi/license.txt (rev 0)
+++ trunk/jazz/portmidi/license.txt 2008-05-26 21:18:33 UTC (rev 567)
@@ -0,0 +1,40 @@
+/*
+ * PortMidi Portable Real-Time MIDI Library
+ *
+ * license.txt -- a copy of the PortMidi copyright notice and license information
+ *
+ * Latest version available at: http://www.cs.cmu.edu/~music/portmidi/
+ *
+ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
+ * Copyright (c) 2001-2006 Roger B. Dannenberg
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortMidi license; however,
+ * the PortMusic community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also
+ * requested that these non-binding requests be included along with the
+ * license above.
+ */
Added: trunk/jazz/portmidi/pm_cl/README_CL.txt
===================================================================
--- trunk/jazz/portmidi/pm_cl/README_CL.txt (rev 0)
+++ trunk/jazz/portmidi/pm_cl/README_CL.txt 2008-05-26 21:18:33 UTC (rev 567)
@@ -0,0 +1,104 @@
+README_CL.txt for PortMidi
+Roger B. Dannenberg
+17 Jan 2007
+
+This is a Common Lisp interface to PortMidi.
+
+On Mac OSX, you need to build PortMidi as a dynamic link library
+before you can use PortMidi from Common Lisp.
+
+You can build PortMidi as a dynamic link library by running this:
+
+cd portmidi
+make -F pm_mac/Makefile.osx install-with-xcode
+
+This is just a shortcut for:
+
+cd portmidi/pm_mac
+sudo xcodebuild -project pm_mac.xcodeproj -configuration Deployment install DSTROOT=/
+
+You can check the file and the architecture for which it is built using:
+ file /usr/local/lib/libportmidi.dylib
+
+If you've done this install of portmidi, then you should also have
+ /usr/local/include/portmidi.h
+This will be necessary to successfully build the cffi interface below.
+
+To test PortMidi with Common Lisp, I (RBD) am using SBCL, which I
+downloaded from http://prdownloads.sourceforge.net/sbcl. Currently, I use
+ sbcl-0.9.17-x86-darwin-binary.tar.bz2
+To install this, I unpacked it by just double-clicking in the finder. Then,
+from a command window, I became root using "sudo sh", and then typed:
+# INSTALL_ROOT=/usr/local
+# sh install.sh
+# exit
+
+I also downloaded cffi-061012.tar.gz from
+ http://common-lisp.net/project/cffi/tarballs/?M=D
+
+To compile cffi, use the following, where "/Lisp/cffi/" is replaced by
+the actual directory of cffi, e.g.
+ "/Users/rbd/sbcl-0.9.17-x86-darwin/cffi-061012":
+
+% sbcl
+* (require 'asdf)
+* (push "/Lisp/cffi/" asdf:*central-registry*)
+* (asdf:oos 'asdf:load-op :cffi)
+* (quit)
+
+Download Common Music's portmidi module from cvs and build the c side:
+(Replace "/Lisp" with your lisp directory, e.g.
+"/Users/rbd/sbcl-0.9.17-x86-darwin". These cvs commands will create
+a new directory, portmidi.)
+
+% cd /Lisp
+% export CVSROOT=:pserver:ano...@co...:/cvsroot/commonmusic
+% cvs login # press Return at password prompt
+% cvs checkout portmidi
+% cd portmidi
+% ./configure
+% make
+% cd ..
+
+Now compile/load the portmidi module just like cffi. Again, change
+"/Lisp/cffi/" and "/Lisp/portmidi" to correspond to your local file system.
+(Note that /Lisp becomes your lisp directory, and "cffi" becomes your
+cffi folder name, e.g. "cffi-061012".
+
+% sbcl
+* (require 'asdf)
+* (push "/Lisp/cffi/" asdf:*central-registry*)
+* (asdf:oos 'asdf:load-op :cffi)
+* (push "/Lisp/portmidi/" asdf:*central-registry*)
+* (asdf:oos 'asdf:load-op :portmidi)
+
+Look in the file /Lisp/portmidi/test.lisp for a test of the lisp interface to
+portmidi. For example, while still running sbcl:
+
+* (pm:portmidi) ; initialize portmidi
+* (pt:start) ; start time
+* (pt:time) ; get time
+* (pprint (pm:GetDeviceInfo)) ; get list of devices
+((:ID 0 :NAME "IAC Driver Bus 1" :TYPE :INPUT :OPEN NIL)
+ (:ID 1 :NAME "IAC Driver Bus 1" :TYPE :OUTPUT :OPEN NIL))
+
+Notice that test.lisp assumes MIDI input devices are connected
+and uses some hard-wired device numbers, so it may not run
+as is without error.
+
+Since test.lisp uses some Common Music calls, I (RBD) wrote a
+simpler test, test-no-cm.lisp, which is in the same folder as
+this (README_CL.txt) file. To use it, first check that the
+values for outid (4) and inid (1) actually match PortMidi device
+id's for output and input devices, and make sure the input
+device is a keyboard that can generate a middle-C -- otherwise
+the program will hang waiting for input. Run sbcl from this
+pm_cl folder, and type:
+
+(load "test-no-cm.lisp")
+
+The program pauses frequently by calling (READ), so you
+should type t or something, then <RETURN> to continue.
+
+
+(Thanks to Leigh Smith and Rick Taube)
Added: trunk/jazz/portmidi/pm_cl/cffi-portmidi.lisp
===================================================================
--- trunk/jazz/portmidi/pm_cl/cffi-portmidi.lisp (rev 0)
+++ trunk/jazz/portmidi/pm_cl/cffi-portmidi.lisp 2008-05-26 21:18:33 UTC (rev 567)
@@ -0,0 +1,387 @@
+;;; **********************************************************************
+;;; Copyright (C) 2005 Heinrich Taube, <taube (at) uiuc (dot) edu>
+;;;
+;;; This program is free software; you can redistribute it and/or
+;;; modify it under the terms of the Lisp Lesser Gnu Public License.
+;;; See http://www.cliki.net/LLGPL for the text of this agreement.
+;;; **********************************************************************
+
+;;; $Name: rel-2_0_0 $
+;;; $Revision: 1.1 $
+;;; $Date: 2006/04/30 15:00:28 $
+
+;;; A CFFI interface to Portmidi. Should run in most Common Lisp
+;;; implementations on Linux, OS X and Windows. For information about
+;;; CFFI see http://common-lisp.net/project/cffi/
+
+(in-package :cl-user)
+
+(defvar *libportmidi*
+ (let ((type #+(or darwin macos macosx) "dylib"
+ #+(or linux linux-target (and unix pc386) freebsd) "so"
+ #+(or win32 microsoft-32 cygwin) "dll")
+ (paths (list "/usr/lib/" "/usr/local/lib/" *load-pathname*)))
+ (loop for d in paths
+ for p = (make-pathname :name "libportmidi" :type type
+ :defaults d)
+ when (probe-file p) do (return p)
+ finally
+ (error "Library \"portmidi.~A\" not found. Fix *libportmidi*."
+ type))))
+
+;;; linux: guess i need to load porttime.so first (?) osx doesnt seem
+;;; to need this lib at all...
+
+#+(or linux (and clisp unix (not macos)))
+(let ((lpt (merge-pathnames "libporttime" *libportmidi*)))
+ (if (probe-file lpt)
+ (cffi:load-foreign-library lpt)
+ (error "Porttime: ~a not found. Fix *libportmidi* path." lpt)))
+
+;;; load portmidi lib
+
+(cffi:load-foreign-library *libportmidi*)
+
+(defpackage :portmidi
+ (:use :common-lisp)
+ (:nicknames :pm :pt)
+ (:shadow :initialize :terminate :time :start :stop :abort
+ :close :read :write :poll)
+ (:export :Initialize :Terminate
+ :HasHostError :GetErrorText :GetHostErrorText
+ :CountDevices :GetDefaultInputDeviceID
+ :GetDefaultOutputDeviceID :GetDeviceInfo
+ :Message :Message.status :Message.data1 :Message.data2
+ :Event.message :Event.timestamp
+ ;; event buffers added to api
+ :EventBufferNew :EventBufferFree :EventBufferElt
+ :EventBufferMap
+ :OpenInput :OpenOutput :SetFilter :SetChannelMask
+ :Abort :Close :Read :Write :Poll :WriteShort :WriteSysex
+ ;; filtering constants
+ :filt-active :filt-sysex :filt-clock :filt-play :filt-f9
+ :filt-fd :filt-reset :filt-note :filt-channel-aftertouch
+ :filt-poly-aftertouch :filt-program :filt-control
+ :filt-pitchbend :filt-mtc :filt-song-position
+ :filt-song-select :filt-tune :filt-tick :filt-undefined
+ :filt-realtime :filt-aftertouch :filt-systemcommon
+ ;; porttime.
+ :Start :Stop :Started :Time
+ ;; initialization insurers added to api
+ :portmidi :*portmidi* ))
+
+(in-package :portmidi)
+
+(cffi:defcstruct pm-device-info
+ (struct-version :int)
+ (interf :pointer)
+ (name :pointer)
+ (input :int)
+ (output :int)
+ (opened :int))
+
+(cffi:define-foreign-type pm-message () ':long)
+(cffi:define-foreign-type pm-timestamp () ':long)
+(cffi:defcstruct pm-event
+ (message pm-message)
+ (timestamp pm-timestamp))
+(cffi:define-foreign-type pm-error () ':int)
+
+(cffi:define-foreign-type port-midi-stream () ':void)
+(cffi:define-foreign-type pm-device-id () ':int)
+(cffi:define-foreign-type pm-time-proc-ptr () ':pointer)
+(cffi:defcfun ("Pm_WriteSysEx" pm-write-sys-ex) pm-error (stream :pointer) (when pm-timestamp) (msg :pointer))
+(cffi:defcfun ("Pm_WriteShort" pm-write-short) pm-error (stream :pointer) (when pm-timestamp) (msg :long))
+(cffi:defcfun ("Pm_Write" pm-write) pm-error (stream :pointer) (buffer :pointer) (length :long))
+(cffi:defcfun ("Pm_Poll" pm-poll) pm-error (stream :pointer))
+(cffi:defcfun ("Pm_Read" pm-read) pm-error (stream :pointer) (buffer :pointer) (length :long))
+(cffi:defcfun ("Pm_Close" pm-close) pm-error (stream :pointer))
+(cffi:defcfun ("Pm_Abort" pm-abort) pm-error (stream :pointer))
+;(cffi:defcfun ("Pm_SetChannelMask" pm-set-channel-mask) pm-error (stream :pointer) (mask :int))
+(cffi:defcfun ("Pm_SetFilter" pm-set-filter) pm-error (stream :pointer) (filters :long))
+(cffi:defcfun ("Pm_OpenOutput" pm-open-output) pm-error (stream :pointer) (output-device pm-device-id) (output-driver-info :pointer) (buffer-size :long) (time-proc pm-time-proc-ptr) (time-info :pointer) (latency :long))
+(cffi:defcfun ("Pm_OpenInput" pm-open-input) pm-error (stream :pointer) (input-device pm-device-id) (input-driver-info :pointer) (buffer-size :long) (time-proc pm-time-proc-ptr) (time-info :pointer))
+(cffi:defcfun ("Pm_GetDeviceInfo" pm-get-device-info) :pointer (id pm-device-id))
+(cffi:defcfun ("Pm_GetDefaultOutputDeviceID" pm-get-default-output-device-id) pm-device-id)
+(cffi:defcfun ("Pm_GetDefaultInputDeviceID" pm-get-default-input-device-id) pm-device-id)
+(cffi:defcfun ("Pm_CountDevices" pm-count-devices) :int)
+(cffi:defcfun ("Pm_GetHostErrorText" pm-get-host-error-text) :void (msg :pointer) (len :unsigned-int))
+(cffi:defcfun ("Pm_GetErrorText" pm-get-error-text) :pointer (errnum pm-error))
+(cffi:defcfun ("Pm_HasHostError" pm-has-host-error) :int (stream :pointer))
+(cffi:defcfun ("Pm_Terminate" pm-terminate) pm-error)
+(cffi:defcfun ("Pm_Initialize" pm-initialize) pm-error)
+
+;;; porttime.h
+
+(cffi:define-foreign-type pt-error () ':int)
+(cffi:define-foreign-type pt-timestamp () ':long)
+(cffi:defcfun ("Pt_Start" pt-start) pt-error (a :int) (b :pointer) (c :pointer))
+(cffi:defcfun ("Pt_Stop" pt-stop) pt-error )
+(cffi:defcfun ("Pt_Started" pt-started) :int)
+(cffi:defcfun ("Pt_Time" pt-time) pt-timestamp)
+
+(defconstant true 1)
+(defconstant false 0)
+(defconstant pmNoError 0)
+(defconstant pmHostError -10000)
+(defconstant pm-no-device -1)
+(defconstant pm-default-sysex-buffer-size 1024)
+(defconstant filt-active 1)
+(defconstant filt-sysex 2)
+(defconstant filt-clock 4)
+(defconstant filt-play 8)
+(defconstant filt-f9 16)
+(defconstant filt-fd 32)
+(defconstant filt-reset 64)
+(defconstant filt-note 128)
+(defconstant filt-channel-aftertouch 256)
+(defconstant filt-poly-aftertouch 512)
+(defconstant filt-program 1024)
+(defconstant filt-control 2048)
+(defconstant filt-pitchbend 4096)
+(defconstant filt-mtc 8192)
+(defconstant filt-song-position 16384)
+(defconstant filt-song-select 32768)
+(defconstant filt-tune 65536)
+(defconstant filt-tick filt-f9)
+(defconstant filt-undefined (logior filt-f9 filt-fd))
+(defconstant filt-realtime (logior filt-active filt-sysex
+ filt-clock filt-play
+ filt-undefined filt-reset))
+(defconstant filt-aftertouch (logior filt-channel-aftertouch
+ filt-poly-aftertouch ))
+(defconstant filt-systemcommon (logior filt-mtc filt-song-position
+ filt-song-select filt-tune))
+(defvar *portmidi* nil) ; t if loaded
+
+;;;
+;;; utils
+;;;
+
+(defvar host-error-text (make-string 256 :initial-element #\*))
+
+(defmacro with-pm-error (form)
+ (let ((v (gensym)))
+ `(let ((,v ,form))
+ (if (not (= ,v pmNoError))
+ (if (= ,v pmHostError)
+ (cffi:with-foreign-string (host-error host-error-text)
+ (pm-get-host-error-text host-error
+ (length host-error-text))
+ (error "Host error is: ~a"
+ (cffi:foreign-string-to-lisp host-error)))
+ (error (cffi:foreign-string-to-lisp
+ (pm-get-error-text ,v))))
+ ,v))))
+
+(defun portmidi ()
+ ;; initializer, call before using lib
+ (or *portmidi*
+ (progn (pm-initialize)
+ (setq *portmidi* t))))
+
+(defun Message (status data1 data2)
+ ;; portmidi messages are just unsigneds
+ (logior (logand (ash data2 16) #xFF0000)
+ (logand (ash data1 08) #xFF00)
+ (logand status #xFF)))
+
+(defun Message.status (m)
+ (logand m #xFF))
+
+(defun Message.data1 (m)
+ (logand (ash m -08) #xFF))
+
+(defun Message.data2 (m)
+ (logand (ash m -16) #xFF))
+
+;;; accessors
+
+(defun DeviceInfo.interf (ptr)
+ (cffi:foreign-string-to-lisp
+ (cffi:foreign-slot-value ptr 'pm-device-info 'interf)))
+
+(defun DeviceInfo.name (ptr)
+ (cffi:foreign-string-to-lisp
+ (cffi:foreign-slot-value ptr 'pm-device-info 'name)))
+
+(defun DeviceInfo.input (ptr)
+ (if (= (cffi:foreign-slot-value ptr 'pm-device-info 'input) 0)
+ nil
+ t))
+
+(defun DeviceInfo.output (ptr)
+ (if (= (cffi:foreign-slot-value ptr 'pm-device-info 'output) 0)
+ nil
+ t))
+
+(defun DeviceInfo.opened (ptr)
+ (if (= (cffi:foreign-slot-value ptr 'pm-device-info 'opened) 0)
+ nil
+ t))
+
+(defun Event.message (e &optional (v nil vp))
+ (if vp
+ (progn
+ (setf (cffi:foreign-slot-value e 'pm-event 'message) v)
+ v)
+ (cffi:foreign-slot-value e 'pm-event 'message)))
+
+(defun Event.timestamp (e &optional (v nil vp))
+ (if vp
+ (progn
+ (setf (cffi:foreign-slot-value e 'pm-event 'timestamp) v)
+ v)
+ (cffi:foreign-slot-value e 'pm-event 'timestamp)))
+
+;;; functions
+
+(defun Initialize ()
+ (with-pm-error (pm-initialize)))
+
+(defun terminate ()
+ (with-pm-error (pm-terminate)))
+
+
+(defun HasHostError (pms)
+ (pm-has-host-error pms))
+
+(defun GetErrorText (err)
+ (pm-get-error-text err))
+
+; how do i do this?
+;(progn
+; (defalien "pm-GetHostErrorText" void (a c-string) (b unsigned-int))
+; (defun GetHostErrorText ()
+; (pm-GetHostErrorText 256)))
+
+(defun CountDevices ()
+ (portmidi)
+ (pm-count-devices ))
+
+(defun GetDefaultInputDeviceID ()
+ (let ((id (pm-get-default-input-device-id )))
+ (if (= id pm-no-device) nil id)))
+
+(defun GetDefaultOutputDeviceID ()
+ (let ((id (pm-get-default-output-device-id )))
+ (if (= id pm-no-device) nil id)))
+
+;replaced by lispy version end of file.
+;(defun GetDeviceInfo (id) (pm-get-device-info id))
+
+(defun OpenInput (device bufsiz)
+ ;; portmidi: timer must be running before opening
+ (unless (Started) (Start))
+ (cffi:with-foreign-object (p1 :pointer)
+ (let ((err (pm-open-input p1 device (cffi:null-pointer)
+ bufsiz (cffi:null-pointer) (cffi:null-pointer))))
+ (if (= err pmNoError)
+ (cffi:mem-ref p1 :pointer)
+ (error (pm-get-error-text err))))))
+
+(defun OpenOutput (device bufsiz latency)
+ (unless (Started) (Start))
+ (cffi:with-foreign-object (p1 :pointer) ;(p (* PortMidi))
+ (let ((err (pm-open-output p1 device (cffi:null-pointer)
+ bufsiz (cffi:null-pointer) (cffi:null-pointer)
+ latency)))
+ (if (= err pmNoError)
+ (cffi:mem-ref p1 :pointer)
+ (error (pm-get-error-text err))))))
+
+(defun SetFilter (a filts)
+ (with-pm-error
+ (pm-set-filter a filts)))
+
+;(defun SetChannelMask (pms mask)
+; (with-pm-error (pm-set-channel-mask pms mask)))
+
+(defun Abort (pms)
+ (with-pm-error (pm-abort pms)))
+
+(defun Close (pms)
+ (with-pm-error (pm-close pms)))
+
+(defun EventBufferFree (buf)
+ (cffi:foreign-free buf))
+
+(defun EventBufferNew (len)
+ (cffi:foreign-alloc 'pm-event :count len))
+
+(defun EventBufferElt (buf i)
+ ;; buf is POINTER to buf
+ (cffi:mem-aref buf 'pm-event i))
+
+(defun EventBufferSet (buffer index timestamp message)
+ (setf (cffi:foreign-slot-value
+ (cffi:mem-aref buffer 'pm-event index) 'pm-event 'timestamp)
+ timestamp)
+ (setf (cffi:foreign-slot-value
+ (cffi:mem-aref buffer 'pm-event index) 'pm-event 'message)
+ message)
+ (values))
+
+(defun EventBufferMap (fn buf end)
+ (loop for i below end
+ for e = (EventBufferElt buf i)
+ do (funcall fn (Event.message e) (Event.timestamp e)))
+ (values))
+
+(defun Read (pms *evbuf len)
+ (let ((res (pm-read pms *evbuf len)))
+ (if (< res 0)
+ (error (pm-get-error-text res))
+ res)))
+
+(defun Poll (pms)
+ (let ((res (pm-poll pms)))
+ (cond ((= res 0) nil)
+ ((= res 1) t)
+ (t (error (pm-get-error-text res))))))
+
+(defun Write (pms *evbuf len)
+ (with-pm-error (pm-write pms *evbuf len)))
+
+(defun WriteShort (pms when msg)
+ (with-pm-error (pm-write-short pms when msg)))
+
+(defun WriteSysex (pms when string)
+ (cffi:with-foreign-string (ptr string)
+ (with-pm-error (pm-write-sys-ex pms when ptr))))
+
+;;; porttime.h
+
+(defun Started ()
+ (let ((res (pt-started)))
+ (if (= res false) nil t)))
+
+(defun Start ()
+ ;; NB: This has to be called before opening output or input.
+ ;; it seems that if its called 2x we get an error.
+ (unless (Started)
+ (with-pm-error (pt-start 1 (cffi:null-pointer) (cffi:null-pointer))))
+ (values))
+
+(defun Stop ()
+ (when (Started)
+ (with-pm-error (pt-stop)))
+ (values))
+
+(defun Time ()
+ (pt-time))
+
+(defun GetDeviceInfo (&optional id)
+ (flet ((getone (id)
+ (let ((d (pm-get-device-info id)))
+ (list :id id
+ :name (DeviceInfo.name d)
+ :type (if (DeviceInfo.input d) ':input ':output)
+ :open (DeviceInfo.opened d)))))
+ ;; make sure lib is initialized before checking devices
+ (portmidi)
+ (if id (getone id)
+ (loop for i below (CountDevices)
+ collect (getone i)))))
+
+(pushnew ':portmidi *features*)
Added: trunk/jazz/portmidi/pm_cl/test-no-cm.lisp
===================================================================
--- trunk/jazz/portmidi/pm_cl/test-no-cm.lisp (rev 0)
+++ trunk/jazz/portmidi/pm_cl/test-no-cm.lisp 2008-05-26 21:18:33 UTC (rev 567)
@@ -0,0 +1,112 @@
+;; this is a half-baked sequence of PortMidi calls to test the interface
+;; No calls to Common Music are made, hence test-no-cm.lisp
+
+; setup cffi if it has not been done already
+(if (not (boundp '*clpath*))
+ (load "setup-pm.lisp"))
+
+(defun println (s) (print s) (terpri))
+
+;; initialize portmidi lib
+(pm:portmidi)
+;; timer testing
+(pt:Start )
+(pt:Started)
+(format t "time is ~A, type something~%" (pt:Time))
+(read)
+(format t "time is ~A, type something~%" (pt:Time))
+(read)
+(pt:Time)
+(format t "time is ~A, type something~%" (pt:Time))
+
+;; device testing
+(pm:CountDevices)
+(pprint (pm:GetDeviceInfo ))
+(defparameter inid (pm:GetDefaultInputDeviceID ))
+(pm:GetDeviceInfo inid)
+(defparameter outid (pm:GetDefaultOutputDeviceID ))
+(pm:GetDeviceInfo outid)
+;; output testing
+(defparameter outid 4) ; 4 = my SimpleSynth
+(defparameter outdev (pm:OpenOutput outid 100 1000))
+(pm:getDeviceInfo outid) ; :OPEN should be T
+;; message tests
+(defun pm (m &optional (s t))
+ (format s "#<message :op ~2,'0x :ch ~2,'0d :data1 ~3,'0d :data2 ~3,'0d>"
+ (ash (logand (pm:Message.status m) #xf0) -4)
+ (logand (pm:Message.status m) #x0f)
+ (pm:Message.data1 m)
+ (pm:Message.data2 m)))
+(defparameter on (pm:message #b10010000 60 64))
+(terpri)
+(pm on)
+(pm:Message.status on)
+(logand (ash (pm:Message.status on) -4) #x0f)
+(pm:Message.data1 on)
+(pm:Message.data2 on)
+(pm:WriteShort outdev (+ (pm:time) 100) on)
+(defparameter off (pm:message #b10000000 60 64))
+(terpri)
+(pm off)
+(terpri)
+(println "type something for note off")
+(read)
+(pm:WriteShort outdev (+ (pm:time) 100) off)
+(println "type something to close output device")
+(read)
+(pm:Close outdev)
+;; event buffer testing
+(defparameter buff (pm:EventBufferNew 8))
+(loop for i below 8 for x = (pm:EventBufferElt buff i)
+ ;; set buffer events
+ do
+ (pm:Event.message x (pm:message #b1001000 (+ 60 i) (+ 100 i)))
+ (pm:Event.timestamp x (* 1000 i)))
+(loop for i below 8 for x = (pm:EventBufferElt buff i)
+ ;; check buffer contents
+ collect (list (pm:Event.timestamp x)
+ (pm:Message.data1 (pm:Event.message x))
+ (pm:Message.data2 (pm:Event.message x))))
+(pm:EventBufferFree buff)
+;; input testing -- requires external midi keyboard
+(println (pm:GetDeviceInfo ))
+(defparameter inid 1) ; 1 = my external keyboard
+(defparameter indev (pm:OpenInput inid 256))
+(pm:GetDeviceInfo inid) ; :OPEN should be T
+(pm:SetFilter indev pm:filt-realtime) ; ignore active sensing etc.
+(println "poll says:")
+(println (pm:Poll indev))
+(println "play midi keyboard and type something")
+(read)
+;;
+;; ...play midi keyboard, then ...
+;;
+(println "poll says")
+(println (pm:Poll indev))
+(defparameter buff (pm:EventBufferNew 32))
+(defparameter num (pm:Read indev buff 32))
+(println "pm:Read gets")
+(println num)
+(println "input messages:")
+(pm:EventBufferMap (lambda (a b) b (terpri) (pm a))
+ buff num)
+(pm:Poll indev)
+
+(println "play keyboard, to stop, play middle-C")
+
+;;; recv testing
+
+(defparameter pitch 0)
+(loop while (/= pitch 60) do
+ (let ((n (pm:Read indev buff 1)))
+ (cond ((= n 1)
+ (pm:EventBufferMap
+ (lambda (a b)
+ b (pm a) (terpri)
+ (setf pitch (pm:Message.data1 a)))
+ buff n)))))
+
+(pm:EventBufferFree buff)
+(pm:Close indev)
+
+
Added: trunk/jazz/portmidi/pm_linux/Makefile
===================================================================
--- trunk/jazz/portmidi/pm_linux/Makefile (rev 0)
+++ trunk/jazz/portmidi/pm_linux/Makefile 2008-05-26 21:18:33 UTC (rev 567)
@@ -0,0 +1,100 @@
+# MAKEFILE FOR PORTMIDI AND PORTTIME
+
+# NOTE: make should be run from the portmidi directory, but this
+# Makefile is in pm_linux, so you should run:
+# make -f pm_linux/Makefile
+# I suggest putting this command line into a script or alias, e.g.
+# do this:
+#-----------------
+# cd; cd portmidi; cat > m
+# make -f pm_linux/Makefile
+# <CONTROL-D>
+# chmod +x m
+#-----------------
+# Now you can just type ./m to run make. (the script "m" is not
+# part of PortMidi because it is different for OS X and it's so
+# simple to create.)
+
+# For debugging, define PM_CHECK_ERRORS
+# Define NEWBUFFER to use new FIFO code that is multiprocessor safe
+# (Besides, it looks like old code (non-NEWBUFFER) is broken now. -RBD)
+PMFLAGS = -DPM_CHECK_ERRORS -DNEWBUFFER
+# Otherwise do not define PM_CHECK_ERRORS
+# PMFLAGS = -DNEWBUFFER
+
+# Use this for linux alsa (0.9x) version
+versions = pm_linux/pmlinuxalsa.o
+ALSALIB = -lasound
+VFLAGS = -DPMALSA
+
+# Use this for null (a dummy implementation for no Midi I/O:
+# versions = pmlinuxnull.o
+# ALSALIB =
+# VFLAGS = -DPMNULL
+
+pmlib = pm_linux/libportmidi.a
+
+ptlib = porttime/libporttime.a
+
+CC = gcc $(VFLAGS) $(PMFLAGS) -g -Ipm_common -Iporttime
+
+pmobjects = pm_common/pmutil.o $(versions) pm_linux/pmlinux.o \
+ pm_common/portmidi.o
+
+ptobjects = porttime/porttime.o porttime/ptlinux.o
+
+current: all
+
+all: $(pmlib) $(ptlib) pm_test/test pm_test/sysex pm_test/midithread \
+ pm_test/latency pm_test/midithru pm_test/qtest pm_test/mm
+
+$(pmlib): pm_linux/Makefile $(pmobjects)
+ ar -cr $(pmlib) $(pmobjects)
+
+$(ptlib): pm_linux/Makefile $(ptobjects)
+ ar -cr $(ptlib) $(ptobjects)
+
+pm_linux/pmlinuxalsa.o: pm_linux/Makefile pm_linux/pmlinuxalsa.c pm_linux/pmlinuxalsa.h
+ $(CC) -c pm_linux/pmlinuxalsa.c -o pm_linux/pmlinuxalsa.o
+
+pm_test/test: pm_linux/Makefile pm_test/test.o $(pmlib) $(ptlib)
+ $(CC) pm_test/test.o -o pm_test/test $(pmlib) $(ptlib) $(ALSALIB)
+
+pm_test/sysex: pm_linux/Makefile pm_test/sysex.o $(pmlib) $(ptlib)
+ $(CC) pm_test/sysex.o -o pm_test/sysex $(pmlib) $(ptlib) $(ALSALIB)
+
+pm_test/midithread: pm_linux/Makefile pm_test/midithread.o $(pmlib) $(ptlib)
+ $(CC) pm_test/midithread.o -o pm_test/midithread \
+ $(pmlib) $(ptlib) $(ALSALIB)
+
+pm_test/latency: pm_linux/Makefile $(ptlib) pm_test/latency.o
+ $(CC) pm_test/latency.o -o pm_test/latency $(pmlib) $(ptlib) \
+ $(ALSALIB) -lpthread -lm
+
+pm_test/midithru: pm_linux/Makefile $(ptlib) pm_test/midithru.o
+ $(CC) pm_test/midithru.o -o pm_test/midithru $(pmlib) $(ptlib) \
+ $(ALSALIB) -lpthread -lm
+
+pm_test/mm: pm_linux/Makefile $(ptlib) pm_test/mm.o
+ $(CC) pm_test/mm.o -o pm_test/mm $(pmlib) $(ptlib) \
+ $(ALSALIB) -lpthread -lm
+
+porttime/ptlinux.o: pm_linux/Makefile porttime/ptlinux.c
+ $(CC) -c porttime/ptlinux.c -o porttime/ptlinux.o
+
+pm_test/qtest: pm_linux/Makefile pm_test/qtest.o $(pmlib) $(ptlib)
+ $(CC) pm_test/qtest.o -o pm_test/qtest $(pmlib) $(ptlib) $(ALSALIB)
+
+clean:
+ rm -f *.o *~ core* */*.o */*.so */*~ */core* pm_test/*/pm_dll.dll
+ rm -f *.opt *.ncb *.plg pm_win/Debug/pm_dll.lib pm_win/Release/pm_dll.lib
+ rm -f pm_test/*.opt pm_test/*.ncb
+
+cleaner: clean
+
+cleanest: cleaner
+ rm -f $(pmlib) $(ptlib) pm_test/test pm_test/sysex pm_test/midithread
+ rm -f pm_test/latency pm_test/midithru pm_test/qtest pm_test/mm
+
+backup: cleanest
+ cd ..; zip -r portmidi.zip portmidi
Property changes on: trunk/jazz/portmidi/pm_linux/Makefile
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/jazz/portmidi/portmidi.sln
===================================================================
--- trunk/jazz/portmidi/portmidi.sln (rev 0)
+++ trunk/jazz/portmidi/portmidi.sln 2008-05-26 21:18:33 UTC (rev 567)
@@ -0,0 +1,101 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pm_dll", "pm_win\pm_dll.vcproj", "{6573A21B-6AE4-4084-A7AC-2691B611DA45}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portmidi", "portmidi.vcproj", "{33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}"
+ ProjectSection(ProjectDependencies) = postProject
+ {338224B8-D575-408D-BACF-95C557B429BE} = {338224B8-D575-408D-BACF-95C557B429BE}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "porttime", "porttime\porttime.vcproj", "{338224B8-D575-408D-BACF-95C557B429BE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "latency", "pm_test\latency.vcproj", "{EDC3A027-917B-4D23-AE70-73C409B47F85}"
+ ProjectSection(ProjectDependencies) = postProject
+ {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A} = {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}
+ {338224B8-D575-408D-BACF-95C557B429BE} = {338224B8-D575-408D-BACF-95C557B429BE}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "midithread", "pm_test\midithread.vcproj", "{4E555AA6-B348-41C9-A685-0B76149BBBAF}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6573A21B-6AE4-4084-A7AC-2691B611DA45} = {6573A21B-6AE4-4084-A7AC-2691B611DA45}
+ {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A} = {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}
+ {338224B8-D575-408D-BACF-95C557B429BE} = {338224B8-D575-408D-BACF-95C557B429BE}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "midithru", "pm_test\midithru.vcproj", "{B4B4240D-7022-4C47-838F-913B4878E938}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6573A21B-6AE4-4084-A7AC-2691B611DA45} = {6573A21B-6AE4-4084-A7AC-2691B611DA45}
+ {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A} = {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}
+ {338224B8-D575-408D-BACF-95C557B429BE} = {338224B8-D575-408D-BACF-95C557B429BE}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sysex", "pm_test\sysex.vcproj", "{300F59F8-5E94-492B-A899-0EB2B1140E20}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6573A21B-6AE4-4084-A7AC-2691B611DA45} = {6573A21B-6AE4-4084-A7AC-2691B611DA45}
+ {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A} = {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}
+ {338224B8-D575-408D-BACF-95C557B429BE} = {338224B8-D575-408D-BACF-95C557B429BE}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "pm_test\test.vcproj", "{49FA3196-A8F8-4E22-98C3-F3A5197CD06D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6573A21B-6AE4-4084-A7AC-2691B611DA45} = {6573A21B-6AE4-4084-A7AC-2691B611DA45}
+ {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A} = {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}
+ {338224B8-D575-408D-BACF-95C557B429BE} = {338224B8-D575-408D-BACF-95C557B429BE}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qtest", "pm_test\qtest.vcproj", "{8C30CCF4-0D5F-4CC0-9EF3-76D491B829DF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mm", "pm_test\mm.vcproj", "{2FC1D7B8-E434-4D6F-A50D-AB262C825BCD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {6573A21B-6AE4-4084-A7AC-2691B611DA45}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6573A21B-6AE4-4084-A7AC-2691B611DA45}.Debug|Win32.Build.0 = Debug|Win32
+ {6573A21B-6AE4-4084-A7AC-2691B611DA45}.Release|Win32.ActiveCfg = Release|Win32
+ {6573A21B-6AE4-4084-A7AC-2691B611DA45}.Release|Win32.Build.0 = Release|Win32
+ {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}.Debug|Win32.Build.0 = Debug|Win32
+ {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}.Release|Win32.ActiveCfg = Release|Win32
+ {33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}.Release|Win32.Build.0 = Release|Win32
+ {338224B8-D575-408D-BACF-95C557B429BE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {338224B8-D575-408D-BACF-95C557B429BE}.Debug|Win32.Build.0 = Debug|Win32
+ {338224B8-D575-408D-BACF-95C557B429BE}.Release|Win32.ActiveCfg = Release|Win32
+ {338224B8-D575-408D-BACF-95C557B429BE}.Release|Win32.Build.0 = Release|Win32
+ {EDC3A027-917B-4D23-AE70-73C409B47F85}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EDC3A027-917B-4D23-AE70-73C409B47F85}.Debug|Win32.Build.0 = Debug|Win32
+ {EDC3A027-917B-4D23-AE70-73C409B47F85}.Release|Win32.ActiveCfg = Release|Win32
+ {EDC3A027-917B-4D23-AE70-73C409B47F85}.Release|Win32.Build.0 = Release|Win32
+ {4E555AA6-B348-41C9-A685-0B76149BBBAF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4E555AA6-B348-41C9-A685-0B76149BBBAF}.Debug|Win32.Build.0 = Debug|Win32
+ {4E555AA6-B348-41C9-A685-0B76149BBBAF}.Release|Win32.ActiveCfg = Release|Win32
+ {4E555AA6-B348-41C9-A685-0B76149BBBAF}.Release|Win32.Build.0 = Release|Win32
+ {B4B4240D-7022-4C47-838F-913B4878E938}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B4B4240D-7022-4C47-838F-913B4878E938}.Debug|Win32.Build.0 = Debug|Win32
+ {B4B4240D-7022-4C47-838F-913B4878E938}.Release|Win32.ActiveCfg = Release|Win32
+ {B4B4240D-7022-4C47-838F-913B4878E938}.Release|Win32.Build.0 = Release|Win32
+ {300F59F8-5E94-492B-A899-0EB2B1140E20}.Debug|Win32.ActiveCfg = Debug|Win32
+ {300F59F8-5E94-492B-A899-0EB2B1140E20}.Debug|Win32.Build.0 = Debug|Win32
+ {300F59F8-5E94-492B-A899-0EB2B1140E20}.Release|Win32.ActiveCfg = Release|Win32
+ {300F59F8-5E94-492B-A899-0EB2B1140E20}.Release|Win32.Build.0 = Release|Win32
+ {49FA3196-A8F8-4E22-98C3-F3A5197CD06D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {49FA3196-A8F8-4E22-98C3-F3A5197CD06D}.Debug|Win32.Build.0 = Debug|Win32
+ {49FA3196-A8F8-4E22-98C3-F3A5197CD06D}.Release|Win32.ActiveCfg = Release|Win32
+ {49FA3196-A8F8-4E22-98C3-F3A5197CD06D}.Release|Win32.Build.0 = Release|Win32
+ {8C30CCF4-0D5F-4CC0-9EF3-76D491B829DF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8C30CCF4-0D5F-4CC0-9EF3-76D491B829DF}.Debug|Win32.Build.0 = Debug|Win32
+ {8C30CCF4-0D5F-4CC0-9EF3-76D491B829DF}.Release|Win32.ActiveCfg = Release|Win32
+ {8C30CCF4-0D5F-4CC0-9EF3-76D491B829DF}.Release|Win32.Build.0 = Release|Win32
+ {2FC1D7B8-E434-4D6F-A50D-AB262C825BCD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2FC1D7B8-E434-4D6F-A50D-AB262C825BCD}.Debug|Win32.Build.0 = Debug|Win32
+ {2FC1D7B8-E434-4D6F-A50D-AB262C825BCD}.Release|Win32.ActiveCfg = Release|Win32
+ {2FC1D7B8-E434-4D6F-A50D-AB262C825BCD}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Property changes on: trunk/jazz/portmidi/portmidi.sln
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/jazz/portmidi/portmidi.vcproj
===================================================================
--- trunk/jazz/portmidi/portmidi.vcproj (rev 0)
+++ trunk/jazz/portmidi/portmidi.vcproj 2008-05-26 21:18:33 UTC (rev 567)
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="portmidi"
+ ProjectGUID="{33E3B196-B9F4-4D0A-85E1-31C7BBD4967A}"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\pm_win\Debug"
+ IntermediateDirectory=".\pm_win\Debug"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="pm_common,porttime,pm_win"
+ PreprocessorDefinitions="_LIB;DEBUG;PM_CHECK_ERRORS;WIN32;_DEBUG"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ PrecompiledHeaderFile=".\pm_win\Debug/portmidi.pch"
+ AssemblerListingLocation=".\pm_win\Debug/"
+ ObjectFile=".\pm_win\Debug/"
+ ProgramDataBaseFileName=".\pm_win\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile=".\pm_win\Debug\portmidi.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\pm_win\Debug/portmidi.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\pm_win\Release"
+ IntermediateDirectory=".\pm_win\Release"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="pm_common,porttime,pm_win"
+ PreprocessorDefinitions="WIN32;_LIB"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile=".\Release/portmidi.pch"
+ AssemblerListingLocation=".\pm_win\Release/"
+ ObjectFile=".\pm_win\Release/"
+ ProgramDataBaseFileName=".\pm_win\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile=".\pm_win\Release\portmidi.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\pm_win\Release/portmidi.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="pm_common\pmutil.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="pm_win\pmwin.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="pm_win\pmwinmm.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="pm_common\portmidi.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="pm_common\pminternal.h"
+ >
+ </File>
+ <File
+ RelativePath="pm_common\pmutil.h"
+ >
+ </File>
+ <File
+ RelativePath="pm_win\pmwinmm.h"
+ >
+ </File>
+ <File
+ RelativePath="pm_common\portmidi.h"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Property changes on: trunk/jazz/portmidi/portmidi.vcproj
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/jazz/portmidi/portmusic_logo.png
===================================================================
(Binary files differ)
Property changes on: trunk/jazz/portmidi/portmusic_logo.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|