home *** CD-ROM | disk | FTP | other *** search
/ Computer Music Interactif…cial Edition 1999 Winter / cd 3.iso / mac / Mac / Shares / Midishare™1.68 / Development Tools / Libraries / MidiFiles / MIDIFile.Lisp < prev    next >
Encoding:
Text File  |  1996-04-18  |  3.9 KB  |  117 lines  |  [TEXT/CCL2]

  1. ;;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
  2. ;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
  3. ;;
  4. ;;
  5. ;;                                     MIDIFile.lisp
  6. ;;
  7. ;;                                     ©1995, GRAME.
  8. ;;
  9. ;;
  10. ;;========================================================================================
  11.  
  12. (eval-when (:compile-toplevel :load-toplevel :execute)
  13.   (require 'ff)
  14.   (ff-load "ccl:MIDIFile.o"
  15.            :entry-names '("MidiFileGetVersion" 
  16.                           "MidiFileReadEv" 
  17.                           "MidiFileChooseTrack" 
  18.                           "MidiFileNewTrack" 
  19.                           "MidiFileReadTrack" 
  20.                           "MidiFileOpen"
  21.                           "MidiFileClose"
  22.                           "MidiFileWriteEv"
  23.                           "MidiFileCloseTrack"
  24.                           "MidiFileOpenTrack"
  25.                           "MidiFileWriteTrack"
  26.                           "MidiFileCreate"
  27.                           "MidiFileGetMFErrno"
  28.                           "MidiFileGetErrno"
  29.                           )
  30.            :ffenv-name 'MidiFile
  31.            :replace t)
  32.   )
  33.  
  34. ;;(in-package :midishare)
  35.  
  36. (export '(midifile-get-version
  37.       midifile-read-ev
  38.       midifile-choose-track
  39.       midifile-new-track
  40.       midifile-read-track
  41.       midifile-open
  42.       midifile-close
  43.       midifile-write-ev
  44.       midifile-close-track
  45.       midifile-open-track
  46.       midifile-write-track
  47.       midifile-create
  48.       midifile-get-mferrno
  49.       midifile-get-errno))
  50.  
  51.  
  52. ;;                                Constants
  53. ;;========================================================================================
  54.  
  55. (defparameter MidiFileReadMode         0)
  56. (defparameter MidiFileAppendMode     1)
  57.  
  58. (defparameter MidiFileFormat0         0)
  59. (defparameter MidiFileFormat1         1)
  60. (defparameter MidiFileFormat2         2)
  61.  
  62. (defparameter TicksPerQuarterNote    0)
  63. (defparameter Smpte24            24)
  64. (defparameter Smpte25            25)
  65. (defparameter Smpte29            29)
  66. (defparameter Smpte30            30)
  67.  
  68. ;;                               C functions interface
  69. ;;========================================================================================
  70.  
  71. ;; opening and closing
  72. (deffcfun (midifile-open   "MidiFileOpen")    ((string :cstring) (fixnum :long)) :ptr)
  73. (deffcfun (midifile-create "MidiFileCreate")  ((string :cstring) (fixnum :long) (fixnum :long) (fixnum :long) ) :ptr)
  74. (deffcfun (midifile-close  "MidiFileClose")   ((macptr :ptr)) :long)
  75.  
  76. ; tracks management
  77. (deffcfun (midifile-open-track   "MidiFileOpenTrack")   ((macptr :ptr)) :long)
  78. (deffcfun (midifile-new-track    "MidiFileNewTrack")    ((macptr :ptr)) :long)
  79. (deffcfun (midifile-close-track  "MidiFileCloseTrack")  ((macptr :ptr)) :long)
  80. (deffcfun (midifile-choose-track "MidiFileChooseTrack") ((macptr :ptr) (fixnum :long)) :long)
  81.  
  82. ;; reading
  83. (deffcfun (midifile-read-ev    "MidiFileReadEv")      ((macptr :ptr)) :ptr)
  84. (deffcfun (midifile-read-track "MidiFileReadTrack")   ((macptr :ptr)) :ptr)
  85.  
  86. ;; writing
  87. (deffcfun (midifile-write-ev    "MidiFileWriteEv")    ((macptr :ptr) (macptr :ptr)) :long)
  88. (deffcfun (midifile-write-track "MidiFileWriteTrack") ((macptr :ptr) (macptr :ptr)) :long)
  89.  
  90. (deffcfun (midifile-get-version "MidiFileGetVersion") () :ptr)
  91.  
  92. ;; error codes
  93. (deffcfun (midifile-get-mferrno  "MidiFileGetMFErrno") () :long)
  94. (deffcfun (midifile-get-errno    "MidiFileGetErrno")   () :long)
  95.  
  96. ;;                                Records
  97. ;;========================================================================================
  98. (defrecord midiFILE
  99.   (format (:integer))
  100.   (ntrks (:integer))
  101.   (time (:integer))
  102.   (fd (:ptr))
  103.   (trkHeadOffset (:long))
  104.   (_cnt (:long))
  105.   (keyOff (:ptr))
  106.   (curDate (:long))
  107.   (mode (:word)))
  108.  
  109. (defrecord  MDF_versions
  110.   (src (:word))
  111.   (MidiFile (:word)))
  112.  
  113. ;;                                Macros
  114. ;;========================================================================================
  115. (defmacro track-opened (fd)
  116.   `(if (> (rref ,fd :midiFILE.trkHeadOffset) 0) T nil))
  117.