Page 1 of 1

Retro Sound

Posted: Mon Feb 23, 2009 2:46 pm
by flaith
A "old-school" playing song, programmed quickly
here it's PACMAN :wink:

Code: Select all

; *************************
; ***                   ***
; *** Retro Sound 8Bits ***
; ***                   ***
; *************************
;
; Flaith 23.02.09 - 31.05.09
;
; Procedure Makesound from GPI modified for my needs
; (GPI:  http://www.purebasic.fr/english/viewtopic.php?p=25292#25292 )
; 24.02 : Modified structure (thx ts-soft & Rings)
; 31.05 : Added Function PokeStringWithUnicodeMode from Zapman for Unicode support

; On commence à octave 2
#TON      = 2

#__C = 262/#TON
#_CD = 277/#TON
#__D = 294/#TON
#_DD = 311/#TON
#__E = 330/#TON
#__F = 349/#TON
#_FD = 370/#TON
#__G = 392/#TON
#_GD = 415/#TON
#__A = 440/#TON
#_AD = 466/#TON
#__B = 494/#TON

#WAVE_FORMAT_PCM  = $0001
#MONO             = $0001
#SAMPLE_RATE      = 8000                  ; 8000, 11025, 22050, or 44100
#RIFF_ID          = "RIFF"
#WAVE_ID          = "WAVE"
#FMT_ID           = "fmt "
#DATA_ID          = "data"

Structure TNOTE
  note1.s
  note2.s
  note3.s
  note4.s
EndStructure

Structure TWAVE
  wFormatTag.w
  nChannels.w
  nSamplesPerSec.l
  nAvgBytesPerSec.l
  nBlockAlign.w
  wBitsPerSample.w
  cbSize.w
EndStructure

Global *new_snd

Global C2.i,Cd2.i,D2.i,Dd2.i,E2.i,F2.i,Fd2.i,G2.i,Gd2.i,A2.i,Ad2.i,B2.i
Global C3.i,Cd3.i,D3.i,Dd3.i,E3.i,F3.i,Fd3.i,G3.i,Gd3.i,A3.i,Ad3.i,B3.i
Global C4.i,Cd4.i,D4.i,Dd4.i,E4.i,F4.i,Fd4.i,G4.i,Gd4.i,A4.i,Ad4.i,B4.i
Global C5.i,Cd5.i,D5.i,Dd5.i,E5.i,F5.i,Fd5.i,G5.i,Gd5.i,A5.i,Ad5.i,B5.i
Global C6.i,Cd6.i,D6.i,Dd6.i,E6.i,F6.i,Fd6.i,G6.i,Gd6.i,A6.i,Ad6.i,B6.i

Procedure PokeStringWithUnicodeMode (*adr,str$)
  For ct = 1 To Len(str$)
    PokeB(*adr+ct-1,Asc(Mid(str$,ct,1)))
  Next
EndProcedure

Procedure MakeSound(Frequency.f, Duration.i)
  Protected SoundValue.b
  Protected nr.i
  Protected TWaveFormat.i
  Protected w.f                                      ; omega ( 2 * pi * frequency)
  Protected DataCount.i, RiffCount.i
  Protected *MS.i

  WaveFormatEx.TWAVE
  WaveFormatEx\wFormatTag      = #WAVE_FORMAT_PCM
  WaveFormatEx\nChannels       = #MONO
  WaveFormatEx\nSamplesPerSec  = #SAMPLE_RATE
  WaveFormatEx\wBitsPerSample  = $0008
  WaveFormatEx\nBlockAlign     = (WaveFormatEx\nChannels * WaveFormatEx\wBitsPerSample) / 8
  WaveFormatEx\nAvgBytesPerSec = WaveFormatEx\nSamplesPerSec * WaveFormatEx\nBlockAlign
  WaveFormatEx\cbSize          = 0
 
  DataCount = (Duration * #SAMPLE_RATE)/1000          ; sound data
  RiffCount = 4 + 4 + 4 + SizeOf(TWAVE) + 4 + 4 + DataCount
 
  *new_snd=AllocateMemory(RiffCount+100)
  *MS=*new_snd
 
  PokeStringWithUnicodeMode(*MS,#RIFF_ID):*MS+4       ; 'RIFF'
  PokeL(*MS,RiffCount):*MS+4                          ; file Data size
  PokeStringWithUnicodeMode(*MS,#WAVE_ID):*MS+4       ; 'WAVE'
  PokeStringWithUnicodeMode(*MS,#FMT_ID):*MS+4        ; 'fmt '
  TWaveFormat = SizeOf(TWAVE)
  PokeL(*MS,TWaveFormat):*MS+4                        ; TWaveFormat data size
 
  PokeW(*MS,WaveFormatEx\wFormatTag):*MS+2            ; WaveFormatEx record
  PokeW(*MS,WaveFormatEx\nChannels):*MS+2
  PokeL(*MS,WaveFormatEx\nSamplesPerSec):*MS+4
  PokeL(*MS,WaveFormatEx\nAvgBytesPerSec):*MS+4
  PokeW(*MS,WaveFormatEx\nBlockAlign):*MS+2
  PokeW(*MS,WaveFormatEx\wBitsPerSample):*MS+2
  PokeW(*MS,WaveFormatEx\cbSize):*MS+2
 
  PokeStringWithUnicodeMode(*MS,#DATA_ID):*MS+4       ; 'data'
  PokeL(*MS,DataCount):*MS+4                          ; sound data size
 
  ; Calculate And write out the tone signal : now the Data values
  w = 2 * #PI * Frequency                             ; omega

  For i = 0 To DataCount - 1
    ;SoundValue = Frequency * Pow(2,(i / Duration))
    SoundValue = 127 + 127 * Sin(i * w / #SAMPLE_RATE)
    PokeB(*MS,SoundValue)
    *MS+1
  Next
 
  nr = CatchSound(#PB_Any,*new_snd)
  FreeMemory(*new_snd)
  ProcedureReturn nr

EndProcedure

Procedure QuitSound(sound)
 StopSound(sound)
 FreeSound(sound)
EndProcedure

Procedure InitInstrument(DURATION.i)
  C2 = MakeSound(#__C,DURATION)
  Cd2= MakeSound(#_CD,DURATION)
  D2 = MakeSound(#__D,DURATION)
  Dd2= MakeSound(#_DD,DURATION)
  E2 = MakeSound(#__E,DURATION)
  F2 = MakeSound(#__F,DURATION)
  Fd2= MakeSound(#_FD,DURATION)
  G2 = MakeSound(#__G,DURATION)
  Gd2= MakeSound(#_GD,DURATION)
  A2 = MakeSound(#__A,DURATION)
  Ad2= MakeSound(#_AD,DURATION)
  B2 = MakeSound(#__B,DURATION)
 
  C3 = MakeSound(#__C*2,DURATION)
  Cd3= MakeSound(#_CD*2,DURATION)
  D3 = MakeSound(#__D*2,DURATION)
  Dd3= MakeSound(#_DD*2,DURATION)
  E3 = MakeSound(#__E*2,DURATION)
  F3 = MakeSound(#__F*2,DURATION)
  Fd3= MakeSound(#_FD*2,DURATION)
  G3 = MakeSound(#__G*2,DURATION)
  Gd3= MakeSound(#_GD*2,DURATION)
  A3 = MakeSound(#__A*2,DURATION)
  Ad3= MakeSound(#_AD*2,DURATION)
  B3 = MakeSound(#__B*2,DURATION)
 
  C4 = MakeSound(#__C*3,DURATION)
  Cd4= MakeSound(#_CD*3,DURATION)
  D4 = MakeSound(#__D*3,DURATION)
  Dd4= MakeSound(#_DD*3,DURATION)
  E4 = MakeSound(#__E*3,DURATION)
  F4 = MakeSound(#__F*3,DURATION)
  Fd4= MakeSound(#_FD*3,DURATION)
  G4 = MakeSound(#__G*3,DURATION)
  Gd4= MakeSound(#_GD*3,DURATION)
  A4 = MakeSound(#__A*3,DURATION)
  Ad4= MakeSound(#_AD*3,DURATION)
  B4 = MakeSound(#__B*3,DURATION)
 
  C5 = MakeSound(#__C*4,DURATION)
  Cd5= MakeSound(#_CD*4,DURATION)
  D5 = MakeSound(#__D*4,DURATION)
  Dd5= MakeSound(#_DD*4,DURATION)
  E5 = MakeSound(#__E*4,DURATION)
  F5 = MakeSound(#__F*4,DURATION)
  Fd5= MakeSound(#_FD*4,DURATION)
  G5 = MakeSound(#__G*4,DURATION)
  Gd5= MakeSound(#_GD*4,DURATION)
  A5 = MakeSound(#__A*4,DURATION)
  Ad5= MakeSound(#_AD*4,DURATION)
  B5 = MakeSound(#__B*4,DURATION)
 
  C6 = MakeSound(#__C*5,DURATION)
  Cd6= MakeSound(#_CD*5,DURATION)
  D6 = MakeSound(#__D*5,DURATION)
  Dd6= MakeSound(#_DD*5,DURATION)
  E6 = MakeSound(#__E*5,DURATION)
  F6 = MakeSound(#__F*5,DURATION)
  Fd6= MakeSound(#_FD*5,DURATION)
  G6 = MakeSound(#__G*5,DURATION)
  Gd6= MakeSound(#_GD*5,DURATION)
  A6 = MakeSound(#__A*5,DURATION)
  Ad6= MakeSound(#_AD*5,DURATION)
  B6 = MakeSound(#__B*5,DURATION)
EndProcedure

Procedure.i getNote(note.s)
Protected valnote.i

  Select note
    Case "---": valnote = -1

    Case "C2" : valnote = C2
    Case "C#2": valnote = Cd2
    Case "D2" : valnote = D2
    Case "D#2": valnote = Dd2
    Case "E2" : valnote = E2
    Case "F2" : valnote = F2
    Case "F#2": valnote = Fd2
    Case "G2" : valnote = G2
    Case "G#2": valnote = Gd2
    Case "A2" : valnote = A2
    Case "A#2": valnote = Ad2
    Case "B2" : valnote = B2

    Case "C3" : valnote = C3
    Case "C#3": valnote = Cd3
    Case "D3" : valnote = D3
    Case "D#3": valnote = Dd3
    Case "E3" : valnote = E3
    Case "F3" : valnote = F3
    Case "F#3": valnote = Fd3
    Case "G3" : valnote = G3
    Case "G#3": valnote = Gd3
    Case "A3" : valnote = A3
    Case "A#3": valnote = Ad3
    Case "B3" : valnote = B3

    Case "C4" : valnote = C4
    Case "C#4": valnote = Cd4
    Case "D4" : valnote = D4
    Case "D#4": valnote = Dd4
    Case "E4" : valnote = E4
    Case "F4" : valnote = F4
    Case "F#4": valnote = Fd4
    Case "G4" : valnote = G4
    Case "G#4": valnote = Gd4
    Case "A4" : valnote = A4
    Case "A#4": valnote = Ad4
    Case "B4" : valnote = B4

    Case "C5" : valnote = C5
    Case "C#5": valnote = Cd5
    Case "D5" : valnote = D5
    Case "D#5": valnote = Dd5
    Case "E5" : valnote = E5
    Case "F5" : valnote = F5
    Case "F#5": valnote = Fd5
    Case "G5" : valnote = G5
    Case "G#5": valnote = Gd5
    Case "A5" : valnote = A5
    Case "A#5": valnote = Ad5
    Case "B5" : valnote = B5

    Case "C6" : valnote = C6
    Case "C#6": valnote = Cd6
    Case "D6" : valnote = D6
    Case "D#6": valnote = Dd6
    Case "E6" : valnote = E6
    Case "F6" : valnote = F6
    Case "F#6": valnote = Fd6
    Case "G6" : valnote = G6
    Case "G#6": valnote = Gd6
    Case "A6" : valnote = A6
    Case "A#6": valnote = Ad6
    Case "B6" : valnote = B6
  EndSelect

  ProcedureReturn valnote
EndProcedure

Global DURATION.i
Global Duree.i

;- *** Main ***
InitSound()

Global note1.i, note2.i, note3.i, note4.i
Global NewList channel.TNOTE()

Restore zelda:
; Restore pacman:

Read.i DURATION
Read.i Duree

InitInstrument(DURATION*Duree)

Read.s tmp$
While tmp$ <> "END"
  Read.s tmp1$
  Read.s tmp2$
  Read.s tmp3$

  AddElement(channel())
    channel()\note1  = tmp$
    channel()\note2  = tmp1$
    channel()\note3  = tmp2$
    channel()\note4  = tmp3$
  Read.s tmp$
Wend

OpenConsole()

ForEach channel()
  note1 = getNote(channel()\note1)
  note2 = getNote(channel()\note2)
  note3 = getNote(channel()\note3)
  note4 = getNote(channel()\note4)

  PrintN(LSet(channel()\note1,3," ")+" "+LSet(channel()\note2,3," ")+" "+LSet(channel()\note3,3," ")+" "+LSet(channel()\note4,3," "))

  If note1 >= 0
    PlaySound(note1,#PB_Sound_MultiChannel)
  EndIf

  If note2 >= 0
    PlaySound(note2,#PB_Sound_MultiChannel)
  EndIf

  If note3 >= 0
    PlaySound(note3,#PB_Sound_MultiChannel)
  EndIf

  If note4 >= 0
    PlaySound(note4,#PB_Sound_MultiChannel)
  EndIf

  Delay(DURATION*duree)
Next

Print("Hit a key"):Input()
CloseConsole()
End

DataSection
;-zelda:
zelda:
    Data.i 60,1
; Legend Of Zelda Twilight Princess
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "D4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "D4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "C4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "D4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","C5" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "D4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A3" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A#3","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","C4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","D4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","E4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","F4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","G4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","A4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","D4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","D4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","A4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","G4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","F4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","E4" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "C4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "D4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","C5" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","C5" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","C5" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","D5" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "D4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "D4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "D4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "A4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E4" ,"---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;

    Data.s "END"

;-pacman:
pacman:
    Data.i 60,1
    Data.s "B2" ,"B4" ,"---","---"    ;0
    Data.s "---","---","---","---"    ;1
    Data.s "---","B5" ,"---","---"    ;2
    Data.s "---","---","---","---"    ;3
    Data.s "B3" ,"F#5","---","---"    ;4
    Data.s "---","---","---","---"    ;5
    Data.s "---","D5" ,"---","---"    ;6
    Data.s "---","---","---","---"    ;7
    Data.s "B2" ,"---","---","---"    ;8
    Data.s "---","B5" ,"---","---"    ;9
    Data.s "---","---","---","---"    ;0
    Data.s "---","F#5","---","---"    ;1
    Data.s "B3" ,"---","---","---"    ;2
    Data.s "---","D5" ,"---","---"    ;3
    Data.s "---","---","---","---"    ;4
    Data.s "---","---","---","---"    ;5
    Data.s "---","C5" ,"---","---"    ;6
    Data.s "C3" ,"---","---","---"    ;7
    Data.s "---","C6" ,"---","---"    ;8
    Data.s "---","---","---","---"    ;9
    Data.s "---","G6" ,"---","---"    ;0
    Data.s "C4" ,"---","---","---"    ;1
    Data.s "---","E6" ,"---","---"    ;2
    Data.s "---","---","---","---"    ;3
    Data.s "---","---","---","---"    ;4
    Data.s "C3" ,"C6" ,"---","---"    ;5
    Data.s "---","---","---","---"    ;6
    Data.s "---","G6" ,"---","---"    ;7
    Data.s "---","---","---","---"    ;8
    Data.s "C4" ,"E6" ,"---","---"    ;9
    Data.s "---","---","---","---"    ;0
    Data.s "---","---","---","---"    ;1
    Data.s "---","---","---","---"    ;2
    Data.s "B2" ,"B4" ,"---","---"    ;3
    Data.s "---","---","---","---"    ;4
    Data.s "---","B5" ,"---","---"    ;5
    Data.s "---","---","---","---"    ;6
    Data.s "B3" ,"F#5","---","---"    ;7
    Data.s "---","---","---","---"    ;8
    Data.s "---","D#5","---","---"    ;9
    Data.s "---","---","---","---"    ;0
    Data.s "B3" ,"---","---","---"    ;1
    Data.s "---","B5" ,"---","---"    ;2
    Data.s "---","---","---","---"    ;3
    Data.s "---","F#5","---","---"    ;4
    Data.s "B3" ,"---","---","---"    ;5
    Data.s "---","D#5","---","---"    ;6
    Data.s "---","---","---","---"    ;7
    Data.s "---","---","---","---"    ;8
    Data.s "F#3","D#5","---","---"    ;9
    Data.s "---","E5" ,"---","---"    ;0
    Data.s "---","F5" ,"---","---"    ;1
    Data.s "---","F5" ,"---","---"    ;2
    Data.s "G#3","F#5","---","---"    ;3
    Data.s "---","---","---","---"    ;4
    Data.s "---","G5" ,"---","---"    ;5
    Data.s "---","G5" ,"---","---"    ;6
    Data.s "A#3","G#5","---","---"    ;7
    Data.s "---","---","---","---"    ;8
    Data.s "---","A5" ,"---","---"    ;9
    Data.s "---","A5" ,"---","---"    ;0
    Data.s "B3" ,"A#5","---","---"    ;1
    Data.s "---","B2" ,"---","---"    ;2
    Data.s "---","---","---","---"    ;3
    Data.s "---","---","---","---"    ;4
    Data.s "END"
EndDataSection
(code changed to x64 compatibility by Rings)

Posted: Mon Feb 23, 2009 8:42 pm
by idle
I'm sure people can have some fun with that.

Posted: Mon Feb 23, 2009 11:59 pm
by LCD
Absolutly cool!!!

Posted: Tue Feb 24, 2009 12:39 am
by ts-soft
cool sound and code :D

change the TWAVE structure to:

Code: Select all

Structure TWAVE
  wFormatTag.w
  nChannels.w
  nSamplesPerSec.l
  nAvgBytesPerSec.l
  nBlockAlign.w
  wBitsPerSample.w
  cbSize.w
EndStructure
and the code works also on x64

greetings
Thomas

Posted: Tue Feb 24, 2009 6:38 pm
by flaith
Thanks guys :D

Code changed a little (added Zelda) and added data (Duration and Delay)

:wink:

mario:

Code: Select all

mario:
    Data.i 75,1
; 4|--c--------------|---e-g-a-f-g-e-c-d---|-
; 3|--e-g-e--a-b-A-a-|-g-----f-c-e-c-----b-|-
; 3|----c----f-g-F-f-|-e-------------------|-
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","E3" ,"C4" ,"---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "C3" ,"G3" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","E3" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F3" ,"A3" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "G3" ,"B3" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F#3","A#3","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "F3" ,"A3" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "E3" ,"G3" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","E4" ,"---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","G4" ,"---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","F3" ,"A4" ,"---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","C3" ,"F4" ,"---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","E3" ,"G4" ,"---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","C3" ,"E4" ,"---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","C4" ,"---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","---","D4" ,"---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "---","B3" ,"---","---"    ;
    Data.s "---","---","---","---"    ;
    Data.s "END"

Posted: Wed Feb 25, 2009 1:05 am
by Fangbeast
When I first tried this, it played on the speaker attached to my motherboard and it reminded me of the games I used to play a long time ago, fun.

Now it plays through my sound card and doesn't sound retro any more. Is there any way to force it back to the original speaker?

Posted: Wed Feb 25, 2009 12:39 pm
by flaith
Fangbeast wrote:When I first tried this, it played on the speaker attached to my motherboard and it reminded me of the games I used to play a long time ago, fun.

Now it plays through my sound card and doesn't sound retro any more. Is there any way to force it back to the original speaker?
try with #SAMPLE_RATE to 11025 in line 31:

Code: Select all

#SAMPLE_RATE      = 11025                 ; 8000, 11025, 22050, or 44100 
and change line 108 by :

Code: Select all

SoundValue = 32 + 127 * Sin(i * w / #SAMPLE_RATE)
:wink:

Posted: Wed Feb 25, 2009 1:31 pm
by Fangbeast
Thanks, will do.

Posted: Sun May 31, 2009 2:38 am
by zapman*
Your code won't work if the "Unicode" option is set ON.

You can correct this using the following procedure:

Code: Select all

Procedure PokeStringWithUnicodeMode (*adr,str$)
  For ct = 1 To Len(str$)
    PokeB(*adr+ct-1,Asc(Mid(str$,ct,1)))
  Next
EndProcedure
and then replace each "POKES" in your code by "PokeStringWithUnicodeMode"

Then it will work with Unicode ON or OFF


Posted: Sun May 31, 2009 8:35 am
by flaith
:D Nice one Zapman, thanks
*** Code modified ***