Category : Files from Magazines
Archive   : MAY91.ZIP
Filename : 2N05059A

 
Output of file : 2N05059A contained in archive : MAY91.ZIP

/*******************************************************
* PlaySong - Play specified song or sound effect
* Parameters:
* nNumber - song number to play
*
* Files: song* in resource file
*
* Notes:
* 1. MAX_SONGS is defined as maximum available songs
* 2. Voice 1 must be opened externally to this routine.
*
* Copyright:
* Original code by William H. Roetzheim (619) 669-6970
* Copyright 1990 by William H. Roetzheim
* All rights reserved.
***********************************************************/

void PlaySong (int nNumber)
{
int i;
char szBuffer[255];
char szTemp[6];
int nDefault;
int nNote;
int nDuration;
int nDot;
int nPointer;
int nOctave;
int nSpeedAdjust;


StopSound (); /* stop old song, if any */
i = LoadString (hInstance, IDS_SONG0 + nNumber,
szBuffer, 250);
szBuffer[i] = 0;

/* Change queue size based on length of song */
nPointer = 0;
while (isdigit (szBuffer[nPointer]))
{
szTemp[nPointer] = szBuffer[nPointer];
nPointer++;
}
szTemp[nPointer] = 0;
i = atoi (szTemp);
i += 20; /* safety margin */
i *= 8; /* 8 bytes per note */
SetVoiceQueueSize (1, i);

nDefault = 1; /* default note duration */
while (nPointer < lstrlen (szBuffer))
{
switch (szBuffer[nPointer++])
{
case 'O': /* octave */
szTemp[0] = szBuffer[nPointer++];
if (isdigit(szBuffer[nPointer]))
{
szTemp[1] = szBuffer[nPointer++];
szTemp[2] = 0;
}
else szTemp[1] = 0;
nOctave = 12 * (atoi (szTemp));
continue;

case 'S': /* Speed adjust */
szTemp[0] = szBuffer[nPointer++];
if (isdigit(szBuffer[nPointer]))
{
szTemp[1] = szBuffer[nPointer++];
szTemp[2] = 0;
}
else szTemp[1] = 0;
nSpeedAdjust = atoi (szTemp);
continue;

case 'L': /* reset default duration */
szTemp[0] = szBuffer[nPointer++];
if (isdigit(szBuffer[nPointer]))
{
szTemp[1] = szBuffer[nPointer++];
szTemp[2] = 0;
}
else szTemp[1] = 0;
nDefault = atoi (szTemp);
continue;

case 'A':
nNote = 1;
break;

case 'B':
nNote = 3;
break;

case 'C':
nNote = 5;
break;

case 'D':
nNote = 6;
break;

case 'E':
nNote = 8;
break;

case 'F':
nNote = 10;
break;

case 'G':
nNote = 12;
break;

case 'R': /* rest */
nNote = 0;
break;

default:
continue;
}

/* check for sharps */
if ((szBuffer[nPointer] == '#') || (szBuffer[nPointer]
== '+'))
{
nNote++;
nPointer++;
}
else if (szBuffer[nPointer] == '-') /* and flats */
{
nNote--;
nPointer++;
}

/* See if duration is explicitely called out */
if (isdigit (szBuffer[nPointer]))
{
i = 0;
szTemp[i++] = szBuffer[nPointer++];
if (isdigit (szBuffer[nPointer])) szTemp[i++] =
szBuffer[nPointer++];
szTemp[i] = 0;
nDuration = atoi (szTemp);
}
else nDuration = nDefault;

/* Dotted note? */
nDot = 0;
if (szBuffer[nPointer] == '.')
{
nDot = 1;
nPointer++;
}

SetVoiceNote (1, nNote + nOctave, nDuration *
nSpeedAdjust, nDot);
}
/* Optional unless you use GetThresholdStatus() */
SetVoiceThreshold (1, 0);

StartSound ();
}







  3 Responses to “Category : Files from Magazines
Archive   : MAY91.ZIP
Filename : 2N05059A

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/