'===========================================================================
' Subject: PLAYING MUSIC (JURASSIC PARK)      Date: 11-30-95 (08:27)       
'  Author: Jarno Peschier                     Code: PB                     
'  Origin: alt.lang.basic                   Packet: SOUND.ABC
'===========================================================================
'>  I'm looking for music written in the MS basic PLAY language.  Does anyone 
'>know of an FTP site where I could find songs for basic?  Also If you have 
'>music for Basic maybe you could E-mail them to me.

'Making PLAY-music in Basic isn't that difficult (if you can read sheet
'music). Just take a piece of sheet music and translate it almost
'litterally into PLAY commands. Easy...

'I've written a few pieces of PLAY music myself (even own adaptions of
'known songs, by just trying to play it on my electronic keyboard, then
'translating it into PLAY statements).

'I'll include an example below in PB 3.0c. I hope you don't mind all
'text and comments in the source are in Dutch. If you want, I could
'translate. And look how easy you can get *real* background music with
'PLAY statements for the actual music in Basic! This is PB, but I've
'even used the same principle in GWBasic before I knew about Basic
'compilers.


%No = 0
%Yes = NOT %No

DIM Muziek AS SHARED INTEGER        'Achtergrondmuziek aan of uit?
DIM VolgendeMaat AS SHARED INTEGER  'Volgende maat voor in de buffer

ON PLAY(8) GOSUB MuziekBufferBijvullen  'Bijvullen als nog 8 noten in buffer
KEY 15, CHR$(&H08,50,&H77)      'Alt+M = hotkey voor muziek aan/uit
ON KEY(15) GOSUB MuziekHotkey
StartMuziek

'=== Zet hier je eigen programma
CLS
PRINT
PRINT
PRINT"Dit is een dummy programma in een loop."
PRINT
PRINT"Op de achtergrond loopt nu een muziekje."
PRINT"Zet de muziek aan/uit met Alt+M."
PRINT
PRINT"Gebruik hiervan is uit de source hopelijk wel duidelijk."
PRINT"Het enige waarop je letten moet is dat je in de SUB"
PRINT"SpeelVolgendeMaat de muziek in blokjes opslaat in de"
PRINT"SELECT-CASE in stukjes die allemaal ongeveer even lang zijn!"
PRINT"Neem bijvoorbeeld, zoals de naam van de SUB aangeeft, echt"
PRINT"maten van de bladmuziek."
PRINT
PRINT"Druk op een toets om te stoppen."
DO
  LOCATE 1,1
  PRINT TIME$
LOOP WHILE INKEY$=""
CLS
PRINT"Dit is werkelijk alles..."
'=== Einde eigen programma

StopMuziek
END


'ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
' Routines voor de achtergrondmuziek
'ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ


MuziekHotKey:
  KEY(15) STOP              'Vang maar ‚‚m Alt+M tegelijk
  Muziek = NOT Muziek           'Toggle muziek flag
  IF Muziek THEN
	StartMuziek             'Zet muziek (weer) aan als nodig
  ELSE
	StopMuziek              'Zet muziek (weer) uit als nodig
	KEY(15) ON              'En kijk weer naar Alt+M
  END IF
RETURN


MuziekBufferBijvullen:
  SpeelVolgendeMaat         'Volgende maat in buffer zetten
RETURN


SUB StartMuziek INLINE
  Muziek = %Yes             'Muziek nu aan
  PLAY"MBT116L8O2MN"            'Instellingen (MB, tempo, octaaf)
  PLAY"O1MSE16P.E16P.E16P.E16P.O2MN"    'Intro spelen
  VolgendeMaat = 1          'De volgende maat is de eerst
  SpeelVolgendeMaat         'Zet die maar in de buffer
  PLAY ON               'Muziek loopt (bekijk bufferlengte)
  KEY(15) ON                'Bekijk Alt+M ook natuurlijk
END SUB


SUB SpeelVolgendeMaat INLINE
  PLAY"MB"              'De maat moet in de achtergrond!
  SELECT CASE VolgendeMaat      'Hier zet je de eigenlijke muziek
	CASE 1: PLAY"EF4G#A4B4 >C<B4>C<B>C16<B16AF"
	CASE 2: PLAY"MLE1MSEMN E4DC#DEC#"
	CASE 3: PLAY"D1 F4.C#D4F4 E1.F4D4"
  END SELECT
  INCR VolgendeMaat         'Hoog de teller op
  IF VolgendeMaat > 3 THEN VolgendeMaat = 1 'En begin muziek
opnieuw
END SUB


SUB StopMuziek INLINE
  PLAY OFF              'Kijk niet meer naar muziekbuffer
  KEY(15) OFF               'Kijk niet meer naar Alt+M
  SOUND 0,0             'Stop muziek in de buffer direct
END SUB


'And here is another example of PLAY music; my own adaption of the
'Jurassic Park movie theme. It's just the data you should play with
'PLAY. And yes, it's cut up in 20 chunks because this was part of a
'GWBasic program that had background music that you could turn on/off
'with a hotkey.


DATA 20
DATA"mlt110o2l8c<b>l4c<gf>l8c<b>l4c<g","f>l8c<mnbmlb>c4.<l4gcl8mnb-2.ml>"
DATA"c<b>l4c<gf>l8c<b>l4c<gf>l8c<mnbml","b>c4mndmld4.mnfmlf2.ecd4.<mngml"
DATA"g4>ecd2.gcf4.mnemle4.mndd2.mlc<b",">l4c<gf>l8c<b>l4c<gf>l8c<mnbmlb>"
DATA"c4.<l4gcl8mnb-2.ml>c<b>l4c<gf>l8","c<b>l4c<gf>l8c<mnbmlb>c4mndmld4.."
DATA"mnfmlf2.ecd4.<mngmlg4>ecd2.gcf4.","mnemle4.mndmld4.mncc4mlc<b>l2mn"
DATA"c.mll8c<b>l2mnc.mll8c<b>c4.mndml","d4.mnfmlf2.ecd4.<mngmlg4>ecd2.gc"
DATA"f4.mnemle4.mndmld2.ecd4.<mngmlg4",">ecd2.t105gcf4.mnt100emlt97e4.mn"
DATA"t95dmlt92d4.mnt90ct87c4mlt100>c<","b>t110l4c<gf>l8c<b>l4c<gf>l8c<mn"
DATA"bmlb>c4.<l4gcl8mnb-2.ml>c<b>l4c<","gf>l8c<b>l4c<gf>l8c<mnbmlb>c<gf#"
DATA"g4>fef2.c<mnbmlb>c<gf#g4>fed2d4.mncmsc8p4.p2p2.","p1p1"

'Happy music!

'          Jarno Peschier, jpeschie@cs.ruu.nl, 2:2802/245.1@Fido
'      162:100/100.1@Agora, 74:3108/102.1@QuaZie, 27:2331/214.1@SigNet


