Mischt eine Wave Datei mit 1/2 1/4 1/8 Speed vorwärts oder rückwärts .
Nur 44kHz 16 Bit Stereo !
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN]
Graphics 640,480,16,2 Print "Umrechnen" ok=shWAVE("a.wav","b.wav") If ok=1 Then Print "Ready" Print "Load" Musik = LoadSound("b.wav") Print "Play" Channel = PlaySound(Musik) Print "Wait Key" WaitKey : FreeSound Musik End Else Print "Fehler beim laden !?" EndIf
Function shWAVE(FileIn$,FileOut$)
Local StreamIn,Dummy$,Wav_Length,Wav_fmt,Wav_Length2 Local Wav_Format,Wav_Kanal,Wav_Sample,Wav_BPS1 Local Wav_BPS2,Wav_Length3 If FileType(FileIn$) <> 1 Then Return 0 StreamIn = ReadFile(FileIn$)
Local h=0 Dummy$ = Read_Wav_Bytes$(StreamIn,4) :h=h+4 Wav_Length = ReadInt(StreamIn) :h=h+4 Dummy$ = Read_Wav_Bytes$(StreamIn,4) :h=h+4 Wav_fmt = Read_Wav_Bytes$(StreamIn,4) :h=h+4 Wav_Length2 = ReadInt(StreamIn) :h=h+4 Wav_Format = ReadShort(StreamIn) :h=h+2 Wav_Kanal = ReadShort(StreamIn) :h=h+2 Wav_Sample = ReadInt(StreamIn) :h=h+4 Wav_BPS1 = ReadInt(StreamIn) :h=h+4 Wav_BPS2 = ReadShort(StreamIn) :h=h+2 Dummy$ = ReadShort(StreamIn) :h=h+2
Local ok=0 While True h=h+1 ok=ok+1 Dummy$ = Dummy$ + Chr(ReadByte(StreamIn)) If Right$(Dummy,4) = "data" Then Exit EndIf If ok>32 Then Exit Wend
If Right(Dummy$,4) <> "data" Then DebugLog "Wave Header stimmt nicht !? Kein 'data' drinne !?" Return 0 EndIf
Wav_Length3 = ReadInt(StreamIn) : h=h+4
Print "Wav_Length3 "+Wav_Length3
Print "Header länge = "+h+" Bytes"
Header = CreateBank(h) SeekFile StreamIn,0 For I = 0 To h-1 PokeByte Header,I,ReadByte(StreamIn) Next
Amplitudes = CreateBank(Wav_Length3 ) For I = 0 To Wav_Length3 -1 PokeByte Amplitudes,I,ReadByte(StreamIn) -128 Next CloseFile StreamIn StreamOut = WriteFile(FileOut$) For I = 0 To h-1 WriteByte StreamOut,PeekByte(Header,I) Next
If Wav_Kanal = 1 Then Print "Mono" If Wav_Kanal = 2 Then Print "Stereo" If Wav_BPS2=1 Then Print "8 Bit" If Wav_BPS2=2 Then Print "16 Bit" If Wav_BPS2=4 Then Print "32 Bit" Local i1=0 Local w1,w2 i=0
For I1 =0 To Wav_Length3-1 Step 1 If Wav_Kanal = 2 Then If Wav_BPS2 = 4 Then w1v#=PeekShort(Amplitudes,I1) w1r#=PeekShort(Amplitudes,I ) w2v#=PeekShort(Amplitudes,I1+2) w2r#=PeekShort(Amplitudes,I+2) I1 = I1 + 3
w1=(w1v*0.5+w1r*0.5) w2=(w2v*0.5+w2r*0.5)
WriteShort StreamOut,myShort(w1) WriteShort StreamOut,myShort(w2) If c=0 Then i=i+ 4 c=c+1:If c=8 Then c=0 EndIf EndIf Next
CloseFile StreamOut
FreeBank Header FreeBank Amplitudes
Return 1
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
Function myShort(i)
Local b1,b2,b3,b4
b4 = i And $FF b3 = Int(i / $100) And $FF b2 = Int(i / $10000) And $FF b1 = Int(i / $1000000) And $FF
b1=b1+128 b2=b2+128 b3=b3+128 b4=b4+128
Return b4+(b3*$100)+(b2*$10000)+(b1*$1000000)
End Function
|