Code archives/Audio/MakeAudio

This code has been declared by its author to be Public Domain code.

Download source code

MakeAudio by Ziltch2004
Create wav format sound files and play them from memory

"MakeAudio.bb"
; Blitz Sound From Memory banks function library
; ADAmor ZILTCH June 2003
;
; version .8  28/06/2003
;         .9  06/04/2004 Speed up by adding WavDataStartPos Param to read/write
;        1.0  20/05/2004 Fixed ReadWavBank Bug

;--------------------------------------------------------------
;  Add to winmm.decls (or create) in userlib directory
;
;.lib "winmm.dll"
;winmm_PlaySound%(lpszName*,hModule%,dwFlags%):"PlaySoundA"
;winmm_StopSound%(lpszName%,hModule%,dwFlags%):"PlaySoundA"

;--------------------------------------------------------------

;NOTE:
;You can load ,play and save all wave files,but only alter PCM type files.
;PCM wav files contain uncompressed sample data so they are easier to deal with.

;ALSO:
;Unfortunately only ONE sample at a time can be played from a sound bank.
;But you can alter sounds as you play them!
;Blitz sounds commands will work at the same time.


Const SND_APPLICATION = $80         ;  look for application specific association
Const SND_ALIAS = $10000            ;  name is a WIN.INI [sounds] entry
Const SND_ALIAS_ID = $110000        ;  name is a WIN.INI [sounds] entry identifier
Const SND_ASYNC = $1                ;  play asynchronously
Const SND_FILENAME = $20000         ;  name is a file name
Const SND_LOOP = $8                 ;  loop the sound until next sndPlaySound
Const SND_MEMORY = $4               ;  lpszSoundName points to a memory file
Const SND_NODEFAULT = $2            ;  silence not default, if sound not found
Const SND_NOSTOP = $10              ;  don;t stop any currently playing sound
Const SND_NOWAIT = $2000            ;  don;t wait if the driver is busy
Const SND_PURGE = $40               ;  purge non-static events for task
Const SND_RESOURCE = $40004         ;  name is a resource name or atom
Const SND_SYNC = $0                 ;  play synchronously (default)
Const ALL_CHANNELS    = 0
Const LEFT_CHANNEL    = 1
Const RIGHT_CHANNEL   = 2
Const EightBitMidpoint = 127         ; 8bit samples range from 0-255
                                    ; use this to move the sample data up.
                                    ; See CreateSinWav function for example
Global WavDataStartPos, WavDataSize

Dim echoData(8)

Type WavTypes
 Field WavTypeNames$,WavTypeID%,WavTypeCompany$
End Type

Function CreateWavBank(NumSamples,SampleRate=44100,BitsPerSample=16,Channels=1)


   BlockSize  = Channels*(BitsPerSample/8)
   DataLength = NumSamples*BlockSize

   ;Make sure DataLength is an even number
   If DataLength/2 <> DataLength/2.0 Then DataLength = DataLength + 1

   FileLength = Datalength + 44
   tbank       = CreateBank(FileLength)

   PokeStr$(tbank,"RIFF",0)
   PokeInt(tbank,4,FileLength-8)
   PokeStr$(tbank,"WAVE",8)
   PokeStr$(tbank,"fmt ",12)
   PokeInt(tbank,16,16)
   PokeShort(tbank,20,1)       ;1=PCM This is raw uncompressed wav file format
   PokeShort(tbank,22,Channels);1=mono,2=stereo
   PokeInt(tbank,24,SampleRate);eg 44100,22050,11025 sound cards only support some freq's.
   PokeInt(tbank,28,BlockSize*SampleRate)
   PokeShort(tbank,32,BlockSize)
   PokeShort(tbank,34,BitsPerSample)
   PokeStr$(tbank,"data",36)
   PokeInt(tbank,40,DataLength)
   WavDataStartPos = 44
   WavDataSize = NumSamples
;
  Return tbank

End Function



Function WriteWavBankData(tbank,Offset,WavData,ChannelToWrite=1,WavDataStartPos=0)

  BitsPerSample=GetWavBitsPerSample(tbank)
  Channels=GetWavChannelCount(tbank)
  If WavDataStartPos =0 Then WavDataStartPos=GetWavDataStartPos(tbank)
  blocksize = Channels*BitsPerSample/8
  Offset = (Offset*blocksize) + WavDataStartPos  + ((ChannelToWrite-1)*(BitsPerSample/8))
;debuglog "  Offset = "+(Offset*blocksize)+" + "+WavDataStartPos+" + "  + ((ChannelToWrite-1)*(BitsPerSample))
;stop
  If offset > ( BankSize(tbank)-blocksize) Then
    DebugLog Offset+" Offset to large"
    Return 1
  EndIf

  If BitsPerSample=16 Then

    If WavData > 32767  Then
      WavData =  32767
    Else If WavData < -32767 Then
      WavData = -32767
    End If

    PokeByte tbank,Offset,WavData And $FF
    PokeByte tbank,Offset+1,(WavData And $FF00) Shr 8

  Else If BitsPerSample=8 Then

    If WavData > 255  Then
      WavData =  255
    Else If WavData < 0 Then
      WavData = 0
    End If

    PokeByte tbank,Offset,WavData

  End If

  Return 1

End Function



Function ReadWavBankData(tbank,Offset,ChannelToRead=1,WavDataStartPos=0)

  BitsPerSample=GetWavBitsPerSample(tbank)
  Channels=GetWavChannelCount(tbank)
  If WavDataStartPos = 0 Then WavDataStartPos=GetWavDataStartPos(tbank)
  blocksize = Channels*BitsPerSample/8
  Offset = (Offset*blocksize) + ((ChannelToRead-1)*BitsPerSample/8)+ WavDataStartPos
  Bsize = BankSize(tbank)-blocksize

  If ChannelToRead  > Channels Then
    DebugLog "Channel "+ChannelToRead +" to large. Sample has "+ Channels + " Channels."
    Return
  EndIf

  If offset  > Bsize Then
    DebugLog Offset+" Offset to large. Banksize is "+ Bsize
    Return
  EndIf

  If BitsPerSample=16 Then
      LoByte = PeekByte (tbank,Offset)
      HiByte = PeekByte (tbank,Offset+1)
      sign =   hibyte Shr 7
;      OutData =  LoByte + ((HiByte And 127)Shl 7)
      OutData =  LoByte +( (HiByte And 127)* 256) -(32768*sign)
;      debuglog "HI "+HiByte +" lo "+LoByte +" sign "+ sign  +"   XX "  +outdata
  ElseIf BitsPerSample=8 Then
     OutData = PeekByte (tbank,Offset)
  End If

  Return OutData

End Function



Function PlaySoundBank(TBank,flags=0)
  If tbank <> 0 Then
    flags=flags Or SND_MEMORY Or SND_ASYNC Or SND_NODEFAULT ; These flags set up playing samples from memory
    winmm_PlaySound(TBank,0,flags)
  Else
    Return 1
  End If
End Function


;for playing windows default sounds
Function WinPlaySound(TBank,flags=0)
  If tbank <> 0 Then
    flags=flags Or SND_SYNC; Or SND_NODEFAULT ; These flags set up playing samples from memory
    winmm_PlaySound(TBank,0,flags)
  Else
    Return 1
  End If
End Function



;you must do this to stop a looping sound and to clean up at end of program.
Function StopSoundBank()
    winmm_StopSound(0,0,SND_PURGE Or SND_NODEFAULT)
End Function



;-- These functions get info from the wav header

;-- Not all PCM wav files data starts at byte 44
;   So we need to use this function on some loaded samples if they are to be altered.
Function GetWavDataStartPos(tbank)
   DataStart=36 ; jump over header
   Dummy$=""
   TBanksize = BankSize(tbank)

   Repeat

      Dummy$ = Dummy$ + Chr$(PeekByte(tbank,DataStart))
      Dummy  = Lower(Right$(Dummy,4))
      If Dummy = "data" Then Exit
      DataStart = DataStart +1
      If DataStart >= TBanksize Then
        RuntimeError " Can Not Find Data In Wave File."
        Return
      End If

   Forever

   Return DataStart  +5
End Function


Function GetWavDataLength(tbank)
   Return PeekInt(tbank,GetWavDataStartPos(tbank)-4)
End Function

Function GetWavNumberOfSamples(tbank)
   Return GetWavDataLength(tbank)/GetWavBlocksize(tbank)
End Function


Function GetWavChannelCount(tbank)
   Return PeekShort(tbank,22)     ; Channel  (1=Mono ; 2=Stereo)
End Function

Function GetWavSampleRate(tbank)
   Return PeekInt(tbank,24)     ; Sample freq e.g. 44100KHz
End Function

Function GetWavBlocksize(tbank)
   Return PeekShort(tbank,32)  ; Data Blocksize
End Function

Function GetWavBitsPerSample(tbank)
   Return PeekShort(tbank,34)  ; Bits per sample
End Function

Function GetWavBytesPerSecond(tbank)
   Return PeekShort(tbank,28)  ; Bytes per second
End Function

Function GetWavSeconds#(tbank)  ; Sample length in seconds
   Return  GetWavDataLength(tbank)/Float(GetWavBytesPerSecond(tbank))
End Function

Function GetWavType(tbank)     ; Use this to see if a sample is
   Return PeekShort(tbank,20)  ; type 1 (PCM). Only these can be read/writen to.
End Function                   ; See create echo for example.


Function GetWavTypeName$(tbank,show_company=True) ;Returns Wav type name
   If First WavTypes = Null Then ReadWavTypes()
   WavType = PeekShort(tbank,20)

   For  twtype.WavTypes = Each WavTypes

     If WavType = twtype\WavTypeID% Then
       If show_company Then
         Return  twtype\WavTypeNames$+" by " +twtype\WavTypeCompany$
       Else
         Return  twtype\WavTypeNames$
       End If
     End If

   Next

   Return
End Function


Function ReadWavTypes()
  Restore Wavtypedata

  For count = 1 To 55
   twtype.WavTypes = New WavTypes
   Read twtype\WavTypeNames$,twtype\WavTypeID%,twtype\WavTypeCompany$
  Next

End Function


;-- Use this to change the speed of samples
Function SetWavSampleRate(tbank,freq)
   PokeInt(tbank,24,freq)      ; Sample freq e.g. 41MHz
   Blocksize = GetWavBlocksize(tbank)
   PokeShort(tbank,28,freq*Blocksize)  ; Bytes per second

End Function


Function SetWavDataLength(tbank,NewSize%)
   DataStart = GetWavDataStartPos(tbank)
   PokeInt(tbank,DataStart-4,NewSize)
End Function


Function SetWavNumberOfSamples(tbank,NewSize%)
   DataStart = GetWavDataStartPos(tbank)
   Blocksize = GetWavBlocksize(tbank)
   PokeInt(tbank,DataStart-4,NewSize*Blocksize)
End Function

;--An example of how to alter sounds simply
Function CreateEcho(TBank,echotime#,Decay#=.9,Channel=0)
;Channel=0 both
;Channel=1 left
;Channel=2 right

  If GetWavType(tbank) <> 1 Then
    error=1
    DebugLog "File is not PCM type.  Only uncompressed files can be used."
    DebugLog "It is type "+  GetWavTypeName$(tbank)
    Return error
  End If

  DataStartPos   = GetWavDataStartPos(tbank)
  BitsPerSample  = GetWavBitsPerSample(tbank)
  Channels       = GetWavChannelCount(tbank)
  blocksize      = GetWavBlocksize(tbank)
  DataEndPos     = GetWavNumberOfSamples(tbank)
  SampleRate     = GetWavSampleRate(tbank)
  DelayTime#     = SampleRate*Float(echotime)/1000/blocksize
  If BitsPerSample = 8 Then EightBit = EightBitMidpoint

  For counter = DelayTime To  DataEndPos-1

    If channel <> ALL_CHANNELS Then

      ;read sample info
      DataIn = ReadWavBankData(TBank,counter,WavDataStartPos)
      ;read second sample (the echo)
      echoDat = ReadWavBankData(TBank,(counter-delaytime),Channel)*Decay#
      ;write the two samples added together back into wav bank
      WriteWavBankData(TBank,counter,( DataIn + EchoDat-EightBit),Channel)

    Else
      ;this does the same for all channels
      For channelcount = 1 To channels
        DataIn = ReadWavBankData(TBank,counter)
        echoData(channelcount) = ReadWavBankData(TBank,(counter-echotime),Channelcount)
        WriteWavBankData(TBank,counter,( DataIn + EchoData(channelcount)-EightBit),Channelcount)
      Next

    End If
  Next

End Function


Function AddWaveBanks(TBank1,Tbank2,Channel=0,LoopWave2=True)
;Channel=0 both
;Channel=1 left
;Channel=2 right

  If GetWavType(tbank1) <> 1 Then
    error=1
    DebugLog "File is not PCM type.  Only uncompressed files can be used."
    DebugLog "It is type "+  GetWavTypeName$(tbank1)
    Return error
  End If

  If GetWavType(tbank2) <> 1 Then
    error=1
    DebugLog "Second File is not PCM type.  Only uncompressed files can be used."
    DebugLog "It is type "+  GetWavTypeName$(tbank2)
    Return error
  End If

;  DataStartPos1  = GetWavDataStartPos(tbank1)
  BitsPerSample1 = GetWavBitsPerSample(tbank1)
  BitsPerSample2 = GetWavBitsPerSample(tbank2)
  Channels1      = GetWavChannelCount(tbank1)
  Channels2      = GetWavChannelCount(tbank2)
;  blocksize1     = GetWavBlocksize(tbank1)
  WavDataStartPos  = GetWavDataStartPos(tbank1)
  WavDataStartPos2 = GetWavDataStartPos(tbank2)
  DataEndPos1    = GetWavNumberOfSamples(tbank1) -1
  DataEndPos2    = GetWavNumberOfSamples(tbank2) -1
  If BitsPerSample1 = 8 Then
    EightBit = EightBitMidpoint
  Else
    EightBit = 0
  End If

  If BitsPerSample1 <> BitsPerSample2 Then
    error=2
    DebugLog "Samples must be same bits per sample size."
    DebugLog "These are " +BitsPerSample1+"bit and "+BitsPerSample2+"bit."
    Return error
  End If

  If channel > Channels2 Then
    error=3
    DebugLog "You have selected a channel that does not exist."
    DebugLog "You asked for channel " +Channel+" and sample has "+Channels1+" channels."
    Return error
  End If

  For counter = 0 To  DataEndPos1
    counter2 = counter2 + 1
;    debuglog "counter2 "+counter2
    If counter2 >= DataEndPos2 Then
      If loopWave2 Then
        counter2 = 0
      Else
        Return
      End If
    End If

    If channel <> ALL_CHANNELS Then

      ;read sample info
      DataIn1 = ReadWavBankData(TBank1,counter,channel,WavDataStartPos)
      ;read second sample
    ;  DataIn2 = ReadWavBankData(TBank2,counter2,channel,WavDataStartPos2)
      ;write the two samples added together back into wav bank
      DataOut = DataIn1 + DataIn2 - EightBit
      WriteWavBankData(TBank1,counter, DataOut ,Channel,WavDataStartPos)
    Else
      ;this does the same for all channels
      For channelcount = 1 To channels1

        DataIn1 = ReadWavBankData(TBank1,counter,channelcount,WavDataStartPos)

        ;read second sample
        If channelcount <= channels2 Then
          channelcount2 = channelcount
        Else
          channelcount2 = channels2
        End If

        DataIn2 = ReadWavBankData(TBank2,counter2,channelcount2,WavDataStartPos2)

        ;write the two samples added together back into wav bank
        WriteWavBankData(TBank1,counter, DataIn1 + DataIn2 - EightBit ,channelcount,WavDataStartPos)
      Next

    End If
  Next

End Function



Function AddNoise(TBank,Amount#=100,Channel=0)
;Channel=0 both
;Channel=1 left
;Channel=2 right

  If GetWavType(tbank) <> 1 Then
    error=1
    DebugLog "File is not PCM type.  Only uncompressed files can be used."
    DebugLog "It is type "+  GetWavTypeName$(tbank)
    Return error
  End If

  DataStartPos   = GetWavDataStartPos(tbank)
  BitsPerSample  = GetWavBitsPerSample(tbank)
  Channels       = GetWavChannelCount(tbank)
  blocksize      = GetWavBlocksize(tbank)
  DataEndPos     = GetWavNumberOfSamples(tbank)
  amount = amount /2.0

  For counter = 0 To  DataEndPos-1

    If channel <> ALL_CHANNELS Then

      ;read sample info
      DataIn = ReadWavBankData(TBank,counter) + Rnd(-amount,amount)

      ;write the new sample back into wav bank
      WriteWavBankData(TBank,counter,DataIn,Channel)

    Else
      ;this does the same for all channels
      For channelcount = 1 To channels
        DataIn = ReadWavBankData(TBank,counter) + Rnd(-amount,amount)
        WriteWavBankData(TBank,counter,DataIn,Channelcount)
      Next

    End If
  Next

End Function


;--After you create a wav bank you can use this to create a sin wave
Function CreateSinWav(tbank,Freq#=5000,Amp#,Channel=0)
;Channel=0 both
;Channel=1 left
;Channel=2 right

;  DataStartPos   = GetWavDataStartPos(tbank)
  BitsPerSample  = GetWavBitsPerSample(tbank)
  Channels       = GetWavChannelCount(tbank)
  blocksize      = Channels*BitsPerSample/8
  Freq           = Freq /1000 ; millisec Hz
;  DataEndPos     = GetWavNumberOfSamples(tbank)-1
  DataEndPos     = (BankSize(tbank)-44)/blocksize - 4
  If BitsPerSample = 8 Then EightBit = EightBitMidpoint

  For counter=0 To  DataEndPos
    oldval = val
    val = (Sin(counter*Freq)*amp) + EightBit

    If (oldval < 0) And (val => 0) Then LastZeroPoint = counter

    If channel <> 0 Then
      WriteWavBankData(tbank,counter,val,Channel)
    Else

      For channelcount = 1 To channels
        WriteWavBankData(tbank,counter,val,Channelcount)
      Next

    End If
  Next

  If LastZeroPoint > 0 Then SetWavNumberOfSamples(tbank,LastZeroPoint)

End Function

;--After you create a wav bank you can use this to create a square wave
Function CreateSqrWav(tbank,Freq#=5000,Amp#,Channel=1)
;Channel=0 both
;Channel=1 left
;Channel=2 right

;  DataStartPos   = GetWavDataStartPos(tbank)
  BitsPerSample  = GetWavBitsPerSample(tbank)
  Channels       = GetWavChannelCount(tbank)
  blocksize      = Channels*BitsPerSample/8
  Freq           = Freq /1000 ; millisec Hz
  DataEndPos     = GetWavNumberOfSamples(tbank)-1
  If BitsPerSample = 8 Then EightBit = EightBitMidpoint

  For counter=0 To  DataEndPos
    If channel <> 0 Then
      WriteWavBankData(tbank,counter,(Sgn(Sin(counter)*Freq)*amp+ EightBit) ,Channel)
    Else

      For channelcount = 1 To channels
        WriteWavBankData(tbank,counter,(Sgn(Sin(counter)*Freq)*amp),Channelcount)
      Next

    End If
  Next
End Function


Function CreateSinSweep(tbank,StartFreq#=5000,EndFreq#=25000,Amp#,Channel=0)
;Channel=0 both
;Channel=1 left
;Channel=2 right

;  DataStartPos   = GetWavDataStartPos(tbank)
  BitsPerSample  = GetWavBitsPerSample(tbank)
  Channels       = GetWavChannelCount(tbank)
  blocksize      = Channels*BitsPerSample/8
  DataEndPos     = GetWavNumberOfSamples(tbank)-1
  Freq#           = StartFreq /1000 ; millisec Hz
  Freqinc#       = ((EndFreq/1000)-freq)/Float(DataEndPos)/2
  If BitsPerSample = 8 Then EightBit = EightBitMidpoint

  For counter=0 To  DataEndPos

    val=(Sin(counter*Freq)*amp) + EightBit
    freq = freq + Freqinc
;    debuglog freq +" Freqinc# "+Freqinc#
    If channel <> 0 Then
      WriteWavBankData(tbank,counter,val,Channel)
    Else

      For channelcount = 1 To channels
        WriteWavBankData(tbank,counter,val,Channelcount)
      Next

    End If
  Next
End Function




;-- Bank routines

Function PeekStr$(Tbank,Size=64,Offset=0)

  Local NewStr$ = ""
  For count = offset To (offset+size-1)
    newchr = PeekByte(Tbank,count)
    If newchr = 0 Then Exit
    newstr$ = newstr$ + Chr$(newchr)
  Next
  Return Newstr$

End Function



Function PokeStr$(Tbank,IN_Str$,Offset=0)

  size=Len(IN_Str$)
  For count = offset To (offset+size-1)
    PokeByte(Tbank,count,Asc(Mid$(IN_Str$,count-offset+1,1)))
  Next

End Function



; This saves a bank to a file
Function BankToFile(InBank,FileName$)

  outfile=WriteFile(FileName$)

  If outfile = 0 Then
     DebugLog("Can not use file. Maybe "+FileName$+" already inuse.")
     Return 1
  End If

  WriteBytes InBank,outfile,0,BankSize(InBank)

  CloseFile outfile

End Function


;-- This loads Any file into a bank if it is allowed to be opened.
Function BankFromFile(FileName$)

  infile=ReadFile(FileName$)

  If infile = 0 Then
     DebugLog("Can not use file Maybe "+FileName$+" already inuse.")
     Return 1
  End If

  filesiz = FileSize(FileName$)
  OutBank = CreateBank(filesiz)
  ReadBytes outBank,Infile,0,FileSiz

  CloseFile infile

  Return Outbank

End Function

.Wavtypedata
Data  "Unknown",$0000,""
Data  "PCM",$0001,"Microsoft Corporation"
Data  "Adpcm",$0002,"Microsoft Corporation"
Data  "ieee_Float",$0003,"Microsoft Corporation"
Data  "Vselp",$0004,"Compaq Computer Corp."
Data  "Ibm_Cvsd",$0005,"IBM Corporation"
Data  "Alaw",$0006,"Microsoft Corporation"
Data  "Mulaw",$0007,"Microsoft Corporation"
Data  "Dts",$0008,"Microsoft Corporation"
Data  "Oki_Adpcm",$0010,"OKI"
Data  "Dvi_Adpcm",$0011,"Intel Corporation"
Data  "Ima_Adpcm",$0012," Intel Corporation"
Data  "Mediaspace_Adpcm",$0012,"Videologic"
Data  "Sierra_Adpcm",$0013,"Sierra Semiconductor Corp"
Data  "G723_Adpcm",$0014,"Antex Electronics Corporation"
Data  "Digistd",$0015,"DSP Solutions, Inc."
Data  "Digifix",$0016,"DSP Solutions, Inc."
Data  "Dialogic_Oki_Adpcm",$0017,"Dialogic Corporation"
Data  "Mediavision_Adpcm",$0018,"Media Vision, Inc."
Data  "Cu_Codec",$0019,"Hewlett-Packard Company"
Data  "Yamaha_Adpcm",$0020,"Yamaha Corporation of America"
Data  "Sonarc",$0021,"Speech Compression"
Data  "Dspgroup_Truespeech",$0022,"DSP Group, Inc"
Data  "Echosc1",$0023,"Echo Speech Corporation"
Data  "Audiofile_Af36",$0024,"Virtual Music, Inc."
Data  "Aptx",$0025,"Audio Processing Technology"
Data  "Audiofile_Af10",$0026,"Virtual Music, Inc."
Data  "Prosody_1612",$0027,"Aculab plc"
Data  "Lrc",$0028,"Merging Technologies S.A."
Data  "Dolby_Ac2",$0030,"Dolby Laboratories"
Data  "Gsm610",$0031,"Microsoft Corporation"
Data  "Msnaudio",$0032,"Microsoft Corporation"
Data  "Antex_Adpcme",$0033,"Antex Electronics Corporation"
Data  "Control_Res_Vqlpc",$0034,"Control Resources Limited"
Data  "Digireal",$0035,"DSP Solutions, Inc."
Data  "Digiadpcm",$0036,"DSP Solutions, Inc."
Data  "Control_Res_Cr10",$0037,"Control Resources Limited"
Data  "Nms_Vbxadpcm",$0038,"Natural MicroSystems"
Data  "Cs_Imaadpcm",$0039,"Crystal Semiconductor IMA ADPCM"
Data  "Echosc3",$003A,"Echo Speech Corporation"
Data  "Rockwell_Adpcm",$003B,"Rockwell International"
Data  "Rockwell_Digitalk",$003C,"Rockwell International"
Data  "Xebec",$003D,"Xebec Multimedia Solutions Limited"
Data  "G721_Adpcm",$0040,"Antex Electronics Corporation"
Data  "G728_Celp",$0041,"Antex Electronics Corporation"
Data  "Msg723",$0042,"Microsoft Corporation"
Data  "Mpeg",$0050,"Microsoft Corporation"
Data  "Rt24",$0052,"InSoft, Inc."
Data  "Pac",$0053,"InSoft, Inc."
Data  "Mpeglayer3",$0055,"ISO/MPEG Layer3 Format Tag"
Data  "Lucent_G723",$0059,"Lucent Technologies"
Data  "Cirrus",$0060,"Cirrus Logic"
Data  "Espcm",$0061,"ESS Technology"
Data  "Voxware",$0062,"Voxware Inc"
Data  "Canopus_Atrac",$0063,"Canopus, co., Ltd."
Data  "G726_Adpcm",$0064,"APICOM"
Data  "G722_Adpcm",$0065,"APICOM"
Data  "Dsat_Display",$0067,"Microsoft Corporation"
Data  "Voxware_Byte_Aligned",$0069,"Voxware Inc"
Data  "Voxware_Ac8",$0070,"Voxware Inc"
Data  "Voxware_Ac10",$0071,"Voxware Inc"
Data  "Voxware_Ac16",$0072,"Voxware Inc"
Data  "Voxware_Ac20",$0073,"Voxware Inc"
Data  "Voxware_Rt24",$0074,"Voxware Inc"
Data  "Voxware_Rt29",$0075,"Voxware Inc"
Data  "Voxware_Rt29hw",$0076,"Voxware Inc"
Data  "Voxware_Vr12",$0077,"Voxware Inc"
Data  "Voxware_Vr18",$0078,"Voxware Inc"
Data  "Voxware_Tq40",$0079,"Voxware Inc"
Data  "Softsound",$0080,"Softsound, Ltd."
Data  "Voxware_Tq60",$0081,"Voxware Inc"
Data  "Msrt24",$0082,"Microsoft Corporation"
Data  "G729a",$0083,"AT&T Labs, Inc."
Data  "Mvi_Mvi2",$0084,"Motion Pixels"
Data  "Df_G726",$0085,"DataFusion Systems (Pty) (Ltd)"
Data  "Df_Gsm610",$0086,"DataFusion Systems (Pty) (Ltd)"
Data  "Isiaudio",$0088,"Iterated Systems, Inc."
Data  "Onlive",$0089,"OnLive! Technologies, Inc."
Data  "Sbc24",$0091,"Siemens Business Communications Sys"
Data  "Dolby_Ac3_Spdif",$0092,"Sonic Foundry"
Data  "Mediasonic_G723",$0093,"MediaSonic"
Data  "Prosody_8kbps",$0094,"Aculab plc"
Data  "Zyxel_Adpcm",$0097,"ZyXEL Communications, Inc."
Data  "Philips_Lpcbb",$0098,"Philips Speech Processing"
Data  "Packed",$0099,"Studer Professional Audio AG"
Data  "Malden_Phonytalk",$00A0,"Malden Electronics Ltd."
Data  "Rhetorex_Adpcm",$0100,"Rhetorex Inc."
Data  "Irat",$0101,"BeCubed Software Inc."
Data  "Vivo_G723",$0111,"Vivo Software"
Data  "Vivo_Siren",$0112,"Vivo Software"
Data  "Digital_G723",$0123,"Digital Equipment Corporation"
Data  "Sanyo_Ld_Adpcm",$0125,"Sanyo Electric Co., Ltd."
Data  "Siprolab_Aceplnet",$0130,"Sipro Lab Telecom Inc."
Data  "Siprolab_Acelp4800",$0131,"Sipro Lab Telecom Inc."
Data  "Siprolab_Acelp8v3",$0132,"Sipro Lab Telecom Inc."
Data  "Siprolab_G729",$0133,"Sipro Lab Telecom Inc."
Data  "Siprolab_G729a",$0134,"Sipro Lab Telecom Inc."
Data  "Siprolab_Kelvin",$0135,"Sipro Lab Telecom Inc."
Data  "G726adpcm",$0140,"Dictaphone Corporation"
Data  "Qualcomm_Purevoice",$0150,"Qualcomm, Inc."
Data  "Qualcomm_Halfrate",$0151,"Qualcomm, Inc."
Data  "Tubgsm",$0155,"Ring Zero Systems, Inc."
Data  "Msaudio1",$0160,"Microsoft Corporation"
Data  "Creative_Adpcm",$0200,"Creative Labs, Inc"
Data  "Creative_Fastspeech8",$0202,"Creative Labs, Inc"
Data  "Creative_Fastspeech10",$0203,"Creative Labs, Inc"
Data  "Uher_Adpcm",$0210,"UHER informatic GmbH"
Data  "Quarterdeck",$0220,"Quarterdeck Corporation"
Data  "Ilink_Vc",$0230,"I-link Worldwide"
Data  "Raw_Sport",$0240,"Aureal Semiconductor"
Data  "Ipi_Hsx",$0250,"Interactive Products, Inc."
Data  "Ipi_Rpelp",$0251,"Interactive Products, Inc."
Data  "Cs2",$0260,"Consistent Software"
Data  "Sony_Scx",$0270,"Sony Corp."
Data  "Fm_Towns_Snd",$0300,"Fujitsu Corp."
Data  "Btv_Digital",$0400,"Brooktree Corporation"
Data  "Qdesign_Music",$0450,"QDesign Corporation"
Data  "Vme_Vmpcm",$0680,"AT&T Labs, Inc."
Data  "Tpc",$0681,"AT&T Labs, Inc."
Data  "Oligsm",$1000,"Ing C. Olivetti & C., S.p.A."
Data  "Oliadpcm",$1001,"Ing C. Olivetti & C., S.p.A."
Data  "Olicelp",$1002,"Ing C. Olivetti & C., S.p.A."
Data  "Olisbc",$1003,"Ing C. Olivetti & C., S.p.A."
Data  "Oliopr",$1004,"Ing C. Olivetti & C., S.p.A."
Data  "Lh_Codec",$1100,"Lernout & Hauspie"
Data  "Norris",$1400,"Norris Communications, Inc."
Data  "Soundspace_Musicompress",$1500,"AT&T Labs, Inc."
Data  "Dvm",$2000,"FAST Multimedia AG"

Comments

Blitz1232006
This does not work : winmm_playsound does not exist...


tonyg2006
;--------------------------------------------------------------
; Add to winmm.decls (or create) in userlib directory
;
;.lib "winmm.dll"
;winmm_PlaySound%(lpszName*,hModule%,dwFlags%):"PlaySoundA"
;winmm_StopSound%(lpszName%,hModule%,dwFlags%):"PlaySoundA"





rendomizer2015
hi can you help me i can't run your midiintest.bb without error message "fonction not found" etc

thx amicalement rendomizer

ps i work on a music sequencer on Quickbasic but there are no midi input there...i will try blitz3d and i'll hope it will be better.


Code Archives Forum