Loop detection in some NSF players has false positives and false negatives, and the way Pently handles tempo (particularly with PENTLY_USE_TEMPO_ROUNDING_* off) is likely to trigger them. It'd be better to include actual playback times in an NSFe or NSF2 format file.
VGM taggers assume these conventions:
For songs using fine, write the duration, and don't fade out.
For songs using da capo, write twice the duration.
For songs using dal segno, write the duration plus the portion of
the duration after segno.
How to calculate: The handler for at (which emits waitRows) will need to count not only musical time but also wall time, which is musical time divided by the tempo at which each row was played.
NSFe durations are in a time chunk, with each track's duration expressed in milliseconds as a 32-bit integer. The fade chunk expresses fade times similarly: $00000000 for immediate cut, $FFFFFFFF for fade of unspecified duration, or a custom value for a specific fade.
Steps toward solving this:
[ ] Write the duration of each track as source code comments
[ ] After #39, if duration estimation is USEd, write the durations to NSFe as time and fade chunks
Loop detection in some NSF players has false positives and false negatives, and the way Pently handles tempo (particularly with
PENTLY_USE_TEMPO_ROUNDING_*
off) is likely to trigger them. It'd be better to include actual playback times in an NSFe or NSF2 format file.VGM taggers assume these conventions:
fine
, write the duration, and don't fade out.da capo
, write twice the duration.dal segno
, write the duration plus the portion of the duration aftersegno
.How to calculate: The handler for
at
(which emitswaitRows
) will need to count not only musical time but also wall time, which is musical time divided by the tempo at which each row was played.NSFe durations are in a
time
chunk, with each track's duration expressed in milliseconds as a 32-bit integer. Thefade
chunk expresses fade times similarly:$00000000
for immediate cut,$FFFFFFFF
for fade of unspecified duration, or a custom value for a specific fade.Steps toward solving this:
time
andfade
chunks