Software Documentation

Software Documentation


Last updated: November 18, 2023

7 FSK timecode frame rates and alignment

The Pyrodigital, Pyromate, FireOne, and StarFire firing systems support, in addition to SMPTE, another form of timecode called “FSK”, which is short for the encoding scheme used by the protocol.  Unlike SMPTE, FSK protocols are generally different for every firing system.  If you have a Pyrodigital firing system, you need to use Pyrodigital FSK; if you have a FireOne firing system, you need to use FireOne FSK.

Finale 3D reads and writes all the firing system FSK protocols, as shown in Table 1.


Table 1 – FSK timecode formats supported by Finale 3D

Timecode format Frame rate Finale 3D writes it Finale 3D reads it
Pyrodigital FSK 10 fps YES YES
Pyromate FSK 10 fps YES YES
FireOne FSK 1 fps YES YES
StarFire FSK 4 fps YES YES


To write FSK for your firing system, simply do the command “File > Export > Export soundtrack…” and select the version of timecode you want to export in one of the channels of your soundtrack, as shown in Figure 1.  The export function combines the music and the timecode in the exported WAV file.  No manual alignment is required.

Figure 1 – Choose whatever version of SMPTE or FSK timecode you want to add to the exported WAV file.


Frame rates

The firing system FSK protocols encode regularly spaced data packets in the WAV file.  The data packets contain what is essentially a frame count, counting in the frame rate of the FSK protocol.  FireOne FSK, for example, has exactly one data packet per second; its data packets thus count seconds: 1s, 2s, 3s, 4s, etc.  Pyrodigital FSK has ten data packets per second, so frame 1 corresponds to 0.1s; frame 2 corresponds to 0.2s, and so on, with frame 10 corresponding to 1s.

The frame rate of the FSK is unrelated to the frame rate of the firing system script.  For example, you might script a Pyrodigital show with event times expressed as 30 fps SMPTE frames, each frame representing 1/30th of a second.  If you shoot that show using Pyrodigital FSK timecode, the FSK will contain data packets at 10 fps, not 30 fps.  The FSK timecode drives an internal clock in the controller, which then processes the script events in whatever their frame rate is.



Similar to SMPTE, the times represented by FSK data packets can be notated as HH:MM:SS:FF, except the frame count FF only goes from 0 to the frame rate of the FSK protocol, minus one.  In this notation, Pyrodigital and Pyromate frames go from 00 to 09; StarFire frames go from 00 to 03; FireOne frames are always 00.


Table 2 – FSK frames notation

Hours 0-23 Minutes 0-59 Seconds 0-59 Frames 0-N (depends on frame rate)


Alignment of data packet in the frame

FSK timecode data packets carried in a signal or stored in a WAV file are encoded as a string of audio samples representing a waveform.  The standard for SMPTE and the convention for FSK timecode is that the time represented by the data packet corresponds to the position of the last sample of the data packet in the signal or WAV file.  For example, the frame rate for StarFire FSK is 4 fps, so the first four frames represent 0.25s, 0.5s, 0.75s, and 1.0s.  According to the alignment convention, the last sample of the data packet for the first frame would be at 0.25s in the file.


Figure 2 – The end of the data packet aligns with the time represented by data packet — approximately.



If you happen to know the details of the StarFire FSK protocol and are able to discern FSK frequencies from the waveform, then you can see in Figure 2 that the last sample of the data packet for the first frame is actually at 0.2497 in the file.  Thus it doesn’t follow the alignment convention exactly.  The other firing system FSK protocols are also off by a little bit.    Each FSK protocol has a de facto convention for how the data packet is aligned in the frame that its time represents.  The conventions were established by the reference FSK files that the firing system manufacturers distributed and that fireworks display companies have used for years or decades.  Whatever the data packet alignment is in the reference FSK files, that’s the de facto convention.

Finale 3D exports FSK timecode in keeping with the de facto alignment conventions of the FSK reference files.  The data packet of frame number 1 for each of the FSK protocols is shown in Table 3Table 3 does not contain any information that you generally need to know to use FSK, except that if you use Finale 3D‘s “File > Tools > Analyze timecode in soundtrack file” function you will see in the summary dialog and the optional log the exact data packet end times in the file, and you may wonder why they don’t seem to be exactly aligned with the represented times.


Figure 3 – The “File > Tools > Analyze timecode in soundtrack file…” shows the alignment of every FSK frame.


Figure 3 shows the timecode analysis of a Pyrodigital reference FSK file.  The first frame (00:00:04:05, representing 4.5 seconds) is frame number 45 since there are 10 frames per second in Pyrodigital FSK files and the first frame is frame #1.  In this reference file, the last sample of the frame’s data packet reads at time 4.492 seconds in the file.  By the convention that data packets end at the time they represent, this data packet is thus 4.5 seconds – 4.492 seconds = 0.008 seconds early (8 ms), which is very close to exact.  In actuality, the last sample of the data packet is at 4.4925 seconds, and the dialog is rounding down to 4.492 seconds.  The Pyrodigital earliness shown in Table 3 (8 ms) is from the FSK file exported from Finale 3D.  As you can see in this example, the alignment of Finale 3D exported soundtracks matches the reference file within a fraction of a millisecond.


Table 3 – FSK first data packet alignment

Timecode format Frame rate Time represented by first frame Position of last sample of first data packet in signal or WAV file Earliness
Pyrodigital FSK 10 fps 0.10 seconds 0.093 seconds 7 ms
Pyromate FSK 10 fps 0.10 seconds 0.093 seconds 7 ms
FireOne FSK 1 fps 1.00 seconds 0.967 seconds 33 ms
StarFire FSK 4 fps 0.25 seconds 0.249 seconds 1 ms


You may be wondering why in Figure 3 the first frame of the Pyrodigital reference FSK file is at 4.5 seconds in the file, instead of at the beginning of the file, ending at 0.1 seconds.  The answer: no good reason.  The provenance of the Pyrodigital reference FSK files that have been used for decades is a mystery lost in time, and no one seems to know why there is 4.5 seconds of empty time with no data packets at the beginning of the file.  The Pyrodigital controller derives no benefit from the empty time since it cannot lock onto an empty signal, so the 4.5 seconds is just wasted.


Figure 4 – Pyrodigital FSK files exported from Finale 3D begin with frame 1 at 0.093s, not frame #45 at 4.492s.


The Pyrodigital FSK files exported from Finale 3D start right at the beginning of the file as shown in Figure 4, with the first frame ending at 0.093 seconds.  Since controllers can lock onto the data packets as quickly as they arrive, you will find that Pyrodigital controllers lock onto FSK files exported from Finale 3D about 4.5 seconds quicker than they do with reference FSK files.