Code archives/Audio/Play backwards
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Hi! This litle source load all wavformats and write it backward in a other wav-file. source + example thx to morszeck! sorry for my bad english! cu olli | |||||
; ==============================================================
shWAVE("Test.wav","Test2.wav")
Musik = LoadSound("test2.wav")
Channel = PlaySound(Musik)
WaitKey : FreeSound Musik : End
; ==============================================================
; ==============================================================
Function shWAVE(FileIn$,FileOut$)
; Local vars to read infos
Local StreamIn,Dummy$,Wav_Length,Wav_fmt,Wav_Length2
Local Wav_Format,Wav_Kanal,Wav_Sample,Wav_BPS1
Local Wav_BPS2,Wav_Length3
; Open the file
If FileType(FileIn$) <> 1 Then Return
StreamIn = ReadFile(FileIn$)
; Header
Dummy$ = Read_Wav_Bytes$(StreamIn,4) ; Read 'RIFF'
Wav_Length = ReadInt(StreamIn) ; Read Length
Dummy$ = Read_Wav_Bytes$(StreamIn,4) ; Read 'WAVE'
Wav_fmt = Read_Wav_Bytes$(StreamIn,4) ; Read 'fmt'
Wav_Length2 = ReadInt(StreamIn) ; Read Length
Wav_Format = ReadShort(StreamIn) ; Read Format (0=Mono ; 1=Stereo)
Wav_Kanal = ReadShort(StreamIn) ; Read Kanal
Wav_Sample = ReadInt(StreamIn) ; Read Sample e.g. 41MHz
Wav_BPS1 = ReadInt(StreamIn) ; Read Bytes per second
Wav_BPS2 = ReadShort(StreamIn) ; Read Bytes per sample
Dummy$ = ReadShort(StreamIn) ; Read Bits per sample
While True
Dummy$ = Dummy$ + Chr$(ReadByte(StreamIn))
If Right$(Dummy,4) = "data" Then Exit
Wend
Wav_Length3 = ReadInt(StreamIn) ; Rest of bytes
; Create Bank to save the header
Header = CreateBank(59)
SeekFile StreamIn,0
For I = 1 To 58
PokeByte Header,I,ReadByte(StreamIn)
Next
; Create Bank to save amplitudes
Amplitudes = CreateBank(Wav_Length3 + 1)
For I = 1 To Wav_Length3
PokeByte Amplitudes,I,ReadByte(StreamIn)
Next
; Close first and open second file
CloseFile StreamIn
StreamOut = WriteFile(FileOut$)
; Save the header
For I = 1 To 58
WriteByte StreamOut,PeekByte(Header,I)
Next
; Save amplitudes
For I = Wav_Length To 0 Step -1
If Wav_Kanal = 1 Then
If Wav_BPS2 = 1 Then
; 8 Bit - Mono
I = I
WriteByte StreamOut,PeekByte(Amplitudes,I)
Else
; 16Bit - Mono
I = I - 1
WriteShort StreamOut,PeekShort(Amplitudes,I)
EndIf
Else
If Wav_BPS2 = 1 Then
; 8Bit - Stereo
I = I - 1
WriteByte StreamOut,PeekByte(Amplitudes,I)
WriteByte StreamOut,PeekByte(Amplitudes,I)
Else
; 16Bit - Stereo
I = I - 3
WriteShort StreamOut,PeekShort(Amplitudes,I)
WriteShort StreamOut,PeekShort(Amplitudes,I)
EndIf
EndIf
Next
; Close second file and delete banks
CloseFile StreamOut
FreeBank Header
FreeBank Amplitudes
End Function
; ==============================================================
; ==============================================================
Function Read_Wav_Bytes$(Stream,Number)
Local I,Out$,Character
For I = 1 To Number
Character = ReadByte(Stream)
If Character = 0 Then
Exit
Else
Out$ = Out$ + Chr$(Character)
EndIf
Next
Return Out$
End Function
; ============================================================== |
Comments
| ||
| this is amazing! the windows xp startup sound sounds pretty funny backwards ;) |
Code Archives Forum