[Back to COMM SWAG index] [Back to Main SWAG index] [Original]

    {
    This is a Unit for chat doors written in JsDoor, I've written my
    own chat door, and I Really missed my old IceChat Tunes, So i've
    Come up with a Note-By-Note Playing Routine for Icechat .ICE files..

    This can be used Multi-Node, because it loads the file into memory..
    Instead of reading it from disk..

    Usage is easy, it's just

    GETBANK('FILENAME.ICE');
    and then just
    PLAYNEXTNOTE;
    as long as you want, it will only play one note at a time so you
    can use it in a LOOP,  I use it to Display the moving Status Bar
    while playing the note and watching for local/remote keys....

    CJ Cliffe  *  Shareware Overload BBS  (613)382-1924 & (613)382-8503
                  Voice:  (613)382-4194

      Please feel free to use this anywhere you want...
         As long as someone gets good use out of it i'm happy..        }

    Unit PlayIce;   (* 1995 by CJ Cliffe *)
    Interface
    Uses Jsdoor,Jsmisc,Crt;

    Procedure Getbank(filename: String);
    Procedure PlayNextNote;

    Implementation
    Var
    Counter : Integer;
    Cbank   : Integer;
    Soundbnk: Array [1..1500] of String[20];     {Loads To Memory for faster}
                                                 {  or Multinode Operation  }

    Function Str2Num(Convertme: String): LongInt;  {Cheap Way Of Converting}
    Var
      Counting: Longint;                         {a Numeric String to an }
    Begin
    {        Integer        }
    For Counting := 1 to 1000000 do
    begin          { 1 Mil is High, But It }
    If Convertme = Strfunc(Counting) then
    begin    { Will Stop Long before }
      Str2Num := Counting;  {   It Gets that far,   }
    Exit;                                          { Because of this
    Exit; }
    End;
    End;
    End;

    Procedure Getbank(filename: String);

    var fil  : Text;

    Begin
    Counter := 0;
    { Reset All Old Tones and Counter }
    For Cbank := 1 to 1500 do begin
    {            If Any               }
    Soundbnk[cbank] := '';
    end;
    cbank := 0;
    Assign(fil,filename);                  { Get Filname }
    Reset(Fil);
    Repeat
    inc(cbank);
    Readln(fil,soundbnk[cbank]);           { Load File Into Memory }
    Until (cbank = 1500) or (EOF(fil));Close(fil);
    End;

    Procedure PlayNextNote;

    var func     : String[4];     {Function WAIT, TONE or Comment}
        tone     : String[5];     {Tone In String Form}
        dura     : String[4];     {String Form Of Duration / 10}
        Temptone : String;        {Temporary Storage String}

    Label Top;

    Begin

    Nosound;                           {Stop Sound }

    Top:                               {Label for Non-Notes}

    Inc(Counter);                      {Update Note}

    If counter = cbank then counter := 1;    {Song Has Ended, Restart!}

    Temptone := SoundBnk[Counter];     {Make a Temporary Copy of the Note}

    Func := Temptone;                  {Get All The Values}
    Tone := Copy(Temptone,5,5);        {Note Tone}
    Dura := Copy(Temptone,10,5);       {Note Duration}

    Func := Ltrim(Rtrim(Func));        {Strip Spaces For Number Conversion}
    Tone := Ltrim(Rtrim(Tone));
    Dura := Ltrim(Rtrim(Dura));

    If Copy(Func,1,2) = ';' then Goto Top;    {Comment Found, Skip Note}

    If Func = 'WAIT' then begin
    {WAIT found, Stop Sound and wait} Nosound;
    {      Stop Sound For Wait      } Delay(Str2Num(Tone)*10);
    Exit;
    End;

    If Func = 'TONE' then begin         {Tone Found, Play Note and Wait for}
    Sound(Str2Num(Tone));               {            Dura(tion)            }
    Delay(Str2Num(Dura)*10);            {Dura is in  / 10 format, * 10 for }
    NoSound;                            {            Normal Play           }
    Exit;
    End;
    End;

    Begin
    End.

    { I'm Working on a keyboard for recording .ICE files,  Watch for it in this
     Echo...                                                                    }

    { -------------------------------------------------------------------------}

    { Example Usage Of PLAYICE.PAS }

    {

    Program IcePlay;
    Uses PlayIce,Crt;

    Begin
    Clrscr;
    Writeln('Playing Song, Any key to Stop');
    GetBank('LARRY.ICE');
    Repeat
    PlayNextNote;
    Until Keypressed;
    End.

    }

[Back to COMM SWAG index] [Back to Main SWAG index] [Original]