Code archives/Audio/MakeAudio
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
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
| ||
This does not work : winmm_playsound does not exist... |
| ||
;-------------------------------------------------------------- ; Add to winmm.decls (or create) in userlib directory ; ;.lib "winmm.dll" ;winmm_PlaySound%(lpszName*,hModule%,dwFlags%):"PlaySoundA" ;winmm_StopSound%(lpszName%,hModule%,dwFlags%):"PlaySoundA" |
| ||
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