Begin implementing performance layer

This commit is contained in:
Jeremy Dormitzer 2018-08-05 22:53:20 -04:00
parent f5853bf37d
commit 44511732c0

32
src/performance.clj Normal file
View File

@ -0,0 +1,32 @@
(ns performance)
;; A performance is a data structure that describes the act
;; of performing a piece of music. It is a vector of events,
;; where each event describes the playing of a single note
(def simple-performance
[{:time 0 ;; the start time in seconds from the beginning of the performance
:pitch 27 ;; the note's absolute pitch (see music/abs-pitch)
:duration 3/8 ;; duration of the note in seconds
:instrument "Cello" ;; instrument playing the note
:volume 50 ;; volume at which to play the note
:params []}]) ;; an array of doubles -- not clear what this is for yet
;; A context represents the context in which a musical value is performed.
;; It is passed around during the interpretation of a musical value to represent
;; changing tempo, key signature, tempo, etc.
(def my-context
{:time 0 ;; time at which the performance starts in seconds
:player {:?? :??} ;; not sure what this is
:instrument "Cello" ;; instrument currently playing (?)
:duration-t 2 ;; the duration in seconds of a whole note
:pitch-offset 0 ;; a pitch offset -- number of semitones to transpose notes up or down
:volume 50 ;; volume of performance
:key [:C :major]}) ;; current key signature
(defn metro
"Generates a duration-t value (the duration in seconds of a whole note)
from the number of beats per minute and the duration of a beat (1/4 for
quarter notes, 1/2 for half notes, etc.)"
[bpm beat-duration]
(/ 60 (* bpm beat-duration)))