I'm really rusty with scripting since I literally haven't touched it for a few months. So hopefully this FFC Script works somewhat like what you wanted (the input values are documented in the comments at the top). If not, then I just goofed horribly.

I had to take some liberties since ZC cannot automatically determine the length of a sound effect and wait for it to finish playing. So basically, you need to enter a pause value (in frames) before the SFX plays followed by how long you want the pause to continue once the SFX
starts playing (in frames). So for instance, you could enter 60 frames for D1 to make ZC wait around for a second then you could enter 140 frames for D2 if your sfx lasts for around 80 frames and you want to add one second of padding afterwards.
Also, this script will only work with permanent secrets. If you want to use temporary secrets to trigger it, checking for combo flags on the screen or something similar would have to be done.
CODE
import "std.zh"
// D0 = SFX to play
// D1 = Length to wait before playing SFX in frames (60 frames ~ 1 second)
// D2 = Length to wait when SFX starts playing until the string happens in frames (ZC doesn't have a way to wait for a SFX to finish playing automatically)
// D3 = String to play
// Note: This will only work with permanent secrets. If you want temporary secrets, you'd probably have to keep track of secret flags on the screen.
// Note2: This will not freeze FFCs since they kind of need to remain running for the script to work.
ffc script soundFreeze
{
void run(int sfx, int pause_length, int sfx_length, int string)
{
bool firstRun = Screen->State[ST_SECRET]; // Check to see if secrets were set off already to avoid triggering script immediately on a screen entrance.
while(!firstRun)
{
if(Screen->State[ST_SECRET]) // Secrets activated while on the screen.
{
int tempComboType = Screen->ComboT[0]; // Store combo type to restore it later.
// Pause for pause length
Screen->ComboT[0] = CT_SCREENFREEZE;
Waitframes(pause_length);
// Play Sound
Game->PlaySound(sfx);
// Wait for "length" of sfx and then padding
Waitframes(sfx_length);
// Unpause
Screen->ComboT[0] = tempComboType;
// Play String
Screen->Message(string);
// Set script as executed
firstRun = true;
}
Waitframe();
}//!End while(!firstRun)
}//!End void run()
}//!End ffc script soundFreeze