Retro Sound

Share your advanced PureBasic knowledge/code with the community.
User avatar
flaith
Enthusiast
Enthusiast
Posts: 704
Joined: Mon Apr 25, 2005 9:28 pm
Location: $300:20 58 FC 60 - Rennes
Contact:

Retro Sound

Post 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)
Last edited by flaith on Sun May 31, 2009 8:31 am, edited 3 times in total.
“Fear is a reaction. Courage is a decision.” - WC
User avatar
idle
Always Here
Always Here
Posts: 5917
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Post by idle »

I'm sure people can have some fun with that.
Last edited by idle on Tue Feb 24, 2009 1:23 am, edited 1 time in total.
LCD
Enthusiast
Enthusiast
Posts: 206
Joined: Sun Jun 01, 2003 10:55 pm
Location: Austria, Vienna
Contact:

Post by LCD »

Absolutly cool!!!
My PC
Ryzen 9 5950, 64 GB RAM, nVidia RTX A4000, Win 10
Ryzen 7 1700, 32 GB RAM, nVidia RTX A2000, Win 10
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Post 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
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
User avatar
flaith
Enthusiast
Enthusiast
Posts: 704
Joined: Mon Apr 25, 2005 9:28 pm
Location: $300:20 58 FC 60 - Rennes
Contact:

Post 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"
“Fear is a reaction. Courage is a decision.” - WC
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4790
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Post 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?
Amateur Radio/VK3HAF, (D-STAR/DMR and more), Arduino, ESP32, Coding, Crochet
User avatar
flaith
Enthusiast
Enthusiast
Posts: 704
Joined: Mon Apr 25, 2005 9:28 pm
Location: $300:20 58 FC 60 - Rennes
Contact:

Post 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:
“Fear is a reaction. Courage is a decision.” - WC
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4790
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Post by Fangbeast »

Thanks, will do.
Amateur Radio/VK3HAF, (D-STAR/DMR and more), Arduino, ESP32, Coding, Crochet
zapman*
Enthusiast
Enthusiast
Posts: 115
Joined: Wed Jun 02, 2004 10:17 pm
Location: New Caledonia (South Pacific)
Contact:

Post 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

Don't try - DO it !
User avatar
flaith
Enthusiast
Enthusiast
Posts: 704
Joined: Mon Apr 25, 2005 9:28 pm
Location: $300:20 58 FC 60 - Rennes
Contact:

Post by flaith »

:D Nice one Zapman, thanks
*** Code modified ***
“Fear is a reaction. Courage is a decision.” - WC
Post Reply