mirror of
				https://github.com/cookiengineer/audacity
				synced 2025-11-03 23:53:55 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			105 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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:anonymous@commonmusic.cvs.sourceforge.net:/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)
 |