# start_tempo: beats per minute # end_tempo: beats per minute # nth: beat whose position we want # beats: total beats in ramp interval return 0 if $nth == 1; Audio::Nama::throw("$nth: zero or missing nth beat"), return if ! $nth; # To determine the start of a beat we accumlate # time through the end of the previous beat. # we will change time by a constant delta # delta = total change / number of steps (n) # increment first note length by 0 delta # increment second note by 1 delta # increment (nth) note by (n-1) delta # we only increment (no. of steps - 1) times, since the measure # following the ramp will presumably continue with the tempo # at ramp end. # example: For 4 measures of 4/4, the delta is total change in beat length/16, # we then increment length of subsequent beats from beat 2 to beat 16 by # delta. The first note of the next measure will be at the intended tempo my $t1 = bpm_to_length($start_bpm); my $tn = bpm_to_length($end_bpm); my $pos = $m * ($t1 + ($tn - $t1) / $n * ($m - 1) / 2); # Consider this ramp. The initial time interval # # t0 = 60 s / 100 bpm = 0.6 s. # # The final time interval after 16 beats is # # t16 = 60 s / 120 bpm = 0.5 s. # # There are two ways I can think of for the time interval between beats to # change. One is when the time interval changes linearly with the number of # beats; the other is that the time interval changes by a constant ratio with # each beat. # # Let's consider the linear change first. For your case, the time change # with each beat delta ("d") is given by # # d = (tn - t1) / n Where n is the number of notes in the chunk # # The time Tm when the mth note ends is # Tm = t1 + ...+ tm # = t1 + (t1 + d) + (t1 + 2 d) + ,,, (t0 + (m-1)d ) # = m t1 + (1 + ... m - 1) d # # There are m - 1 terms in the sum (1 + 2 + ... m - 1), and # the average term is (m / 2) # # sum = (m - 1)(m / 2) # # Plugging into T, # # Tm = m t1 + d (m-1) m / 2 # # substitute d to get # # Tm = m t1 + (tn - t1) / n * (m - 1) * m / 2 # Tm = m (t1 + (tn - t1) / n * (m - 1) / 2 )
1 POD Error
The following errors were encountered while parsing the POD:
Unknown directive: =comment
To install Audio::Nama, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Audio::Nama
CPAN shell
perl -MCPAN -e shell install Audio::Nama
For more information on module installation, please visit the detailed CPAN module installation guide.