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. |