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
|