home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-04-18 | 3.9 KB | 117 lines | [TEXT/CCL2] |
- ;;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
- ;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
- ;;
- ;;
- ;; MIDIFile.lisp
- ;;
- ;; ©1995, GRAME.
- ;;
- ;;
- ;;========================================================================================
-
- (eval-when (:compile-toplevel :load-toplevel :execute)
- (require 'ff)
- (ff-load "ccl:MIDIFile.o"
- :entry-names '("MidiFileGetVersion"
- "MidiFileReadEv"
- "MidiFileChooseTrack"
- "MidiFileNewTrack"
- "MidiFileReadTrack"
- "MidiFileOpen"
- "MidiFileClose"
- "MidiFileWriteEv"
- "MidiFileCloseTrack"
- "MidiFileOpenTrack"
- "MidiFileWriteTrack"
- "MidiFileCreate"
- "MidiFileGetMFErrno"
- "MidiFileGetErrno"
- )
- :ffenv-name 'MidiFile
- :replace t)
- )
-
- ;;(in-package :midishare)
-
- (export '(midifile-get-version
- midifile-read-ev
- midifile-choose-track
- midifile-new-track
- midifile-read-track
- midifile-open
- midifile-close
- midifile-write-ev
- midifile-close-track
- midifile-open-track
- midifile-write-track
- midifile-create
- midifile-get-mferrno
- midifile-get-errno))
-
-
- ;; Constants
- ;;========================================================================================
-
- (defparameter MidiFileReadMode 0)
- (defparameter MidiFileAppendMode 1)
-
- (defparameter MidiFileFormat0 0)
- (defparameter MidiFileFormat1 1)
- (defparameter MidiFileFormat2 2)
-
- (defparameter TicksPerQuarterNote 0)
- (defparameter Smpte24 24)
- (defparameter Smpte25 25)
- (defparameter Smpte29 29)
- (defparameter Smpte30 30)
-
- ;; C functions interface
- ;;========================================================================================
-
- ;; opening and closing
- (deffcfun (midifile-open "MidiFileOpen") ((string :cstring) (fixnum :long)) :ptr)
- (deffcfun (midifile-create "MidiFileCreate") ((string :cstring) (fixnum :long) (fixnum :long) (fixnum :long) ) :ptr)
- (deffcfun (midifile-close "MidiFileClose") ((macptr :ptr)) :long)
-
- ; tracks management
- (deffcfun (midifile-open-track "MidiFileOpenTrack") ((macptr :ptr)) :long)
- (deffcfun (midifile-new-track "MidiFileNewTrack") ((macptr :ptr)) :long)
- (deffcfun (midifile-close-track "MidiFileCloseTrack") ((macptr :ptr)) :long)
- (deffcfun (midifile-choose-track "MidiFileChooseTrack") ((macptr :ptr) (fixnum :long)) :long)
-
- ;; reading
- (deffcfun (midifile-read-ev "MidiFileReadEv") ((macptr :ptr)) :ptr)
- (deffcfun (midifile-read-track "MidiFileReadTrack") ((macptr :ptr)) :ptr)
-
- ;; writing
- (deffcfun (midifile-write-ev "MidiFileWriteEv") ((macptr :ptr) (macptr :ptr)) :long)
- (deffcfun (midifile-write-track "MidiFileWriteTrack") ((macptr :ptr) (macptr :ptr)) :long)
-
- (deffcfun (midifile-get-version "MidiFileGetVersion") () :ptr)
-
- ;; error codes
- (deffcfun (midifile-get-mferrno "MidiFileGetMFErrno") () :long)
- (deffcfun (midifile-get-errno "MidiFileGetErrno") () :long)
-
- ;; Records
- ;;========================================================================================
- (defrecord midiFILE
- (format (:integer))
- (ntrks (:integer))
- (time (:integer))
- (fd (:ptr))
- (trkHeadOffset (:long))
- (_cnt (:long))
- (keyOff (:ptr))
- (curDate (:long))
- (mode (:word)))
-
- (defrecord MDF_versions
- (src (:word))
- (MidiFile (:word)))
-
- ;; Macros
- ;;========================================================================================
- (defmacro track-opened (fd)
- `(if (> (rref ,fd :midiFILE.trkHeadOffset) 0) T nil))
-