Binaly Download ( Max 20min / MP3 only)
http://purebasic.coolverse.jp/_userdata/MP3_PLAY.zip
Need 96kHz external DAC or 96kHz Line out Sounds card
AND
Very high quality headphone or Very high quality speaker
Example headphone... SENNHEISER HD-650
DAC... 192kHz DAC Headphone Amplifer
hehehe

1. 44.1kHz Streo Wave to 88.2kHz Streo Wave
Insert Zero
2.Sinc interpolation 36 point
Creating Data
Could you optimize more faster? Thank you
and... I have to create LPF (FIR filter). hehehe
Releation Topic
MP3 Encoder and Decorder
viewtopic.php?f=12&t=16891
DirectSound Stream Playing
viewtopic.php?f=12&t=20841
Code: Select all
Procedure.w SincInterpolation(*BufferAudio, pos.l)
Protected pcmdata2.d
*BufferAudio+pos -76 ; -76
pcmdata2 + PeekW(*BufferAudio)*-0.00440808432177
*BufferAudio + 4 ; -72
pcmdata2 + PeekW(*BufferAudio)*0.00556328473613
*BufferAudio + 4 ; -68
pcmdata2 + PeekW(*BufferAudio)*-0.0057079186663
*BufferAudio + 4 ; -64
pcmdata2 + PeekW(*BufferAudio)*0.00469026016071
*BufferAudio + 4 ; -60
pcmdata2 + PeekW(*BufferAudio)*-0.00256317574531
*BufferAudio + 4 ; -56
pcmdata2 + PeekW(*BufferAudio)*-0.00040220390656
*BufferAudio + 4 ; -52
pcmdata2 + PeekW(*BufferAudio)*0.00373957841657
*BufferAudio + 4 ; -48
pcmdata2 + PeekW(*BufferAudio)*-0.00684468308464
*BufferAudio + 4 ; -44
pcmdata2 + PeekW(*BufferAudio)*0.0090610217303
*BufferAudio + 4 ; -40
pcmdata2 + PeekW(*BufferAudio)*-0.00978076830506
*BufferAudio + 4 ; -36
pcmdata2 + PeekW(*BufferAudio)*0.00854528136551
*BufferAudio + 4 ; -32
pcmdata2 + PeekW(*BufferAudio)*-0.00512989936396
*BufferAudio + 4 ; -28
pcmdata2 + PeekW(*BufferAudio)*-0.00040235937922
*BufferAudio + 4 ; -24
pcmdata2 + PeekW(*BufferAudio)*0.00768743222579
*BufferAudio + 4 ; -20
pcmdata2 + PeekW(*BufferAudio)*-0.01609098725021
*BufferAudio + 4 ; -16
pcmdata2 + PeekW(*BufferAudio)*0.02478164248168
*BufferAudio + 4 ; -12
pcmdata2 + PeekW(*BufferAudio)*-0.03283505514264
*BufferAudio + 4 ; -8
pcmdata2 + PeekW(*BufferAudio)*0.03935587778687
*BufferAudio + 4 ; -4
pcmdata2 + PeekW(*BufferAudio)*-0.04359867796302
*BufferAudio + 4
pcmdata2 + PeekW(*BufferAudio)
*BufferAudio + 4 ; 4
pcmdata2 + PeekW(*BufferAudio)*-0.04359867796302
*BufferAudio + 4 ; 8
pcmdata2 + PeekW(*BufferAudio)*0.03935587778687
*BufferAudio + 4 ; 12
pcmdata2 + PeekW(*BufferAudio)*-0.03283505514264
*BufferAudio + 4 ; 16
pcmdata2 + PeekW(*BufferAudio)*0.02478164248168
*BufferAudio + 4 ; 20
pcmdata2 + PeekW(*BufferAudio)*-0.01609098725021
*BufferAudio + 4 ; 24
pcmdata2 + PeekW(*BufferAudio)*0.00768743222579
*BufferAudio + 4 ; 28
pcmdata2 + PeekW(*BufferAudio)*-0.00512989936396
*BufferAudio + 4 ; 32
pcmdata2 + PeekW(*BufferAudio)*0.00854528136551
*BufferAudio + 4 ; 36
pcmdata2 + PeekW(*BufferAudio)*-0.00978076830506
*BufferAudio + 4 ; 40
pcmdata2 + PeekW(*BufferAudio)*0.0090610217303
*BufferAudio + 4 ; 44
pcmdata2 + PeekW(*BufferAudio)*-0.00684468308464
*BufferAudio + 4 ; 48
pcmdata2 + PeekW(*BufferAudio)*0.00373957841657
*BufferAudio + 4 ; 52
pcmdata2 + PeekW(*BufferAudio)*-0.00040220390656
*BufferAudio + 4 ; 56
pcmdata2 + PeekW(*BufferAudio)*-0.00256317574531
*BufferAudio + 4 ; 60
pcmdata2 + PeekW(*BufferAudio)*0.00469026016071
*BufferAudio + 4 ; 64
pcmdata2 + PeekW(*BufferAudio)*-0.0057079186663
*BufferAudio + 4 ; 68
pcmdata2 + PeekW(*BufferAudio)*0.00556328473613
*BufferAudio + 4 ; 72
pcmdata2 + PeekW(*BufferAudio)*-0.00440808432177
ProcedureReturn Int(pcmdata2)
EndProcedure
Procedure upFreqWav(*BufferAudio, buflen.l)
Protected I.l, *clearmem, *memory_buf
*memory_buf = *BufferAudio
buflen = buflen/2
*clearmem = AllocateMemory(8)
SetGadgetAttribute(1, #PB_ProgressBar_Minimum, 1)
SetGadgetAttribute(1, #PB_ProgressBar_Maximum, buflen/1000)
For I =buflen-76 To 77 Step -4
CopyMemory(*clearmem, *memory_buf+I*2 -4, 8)
CopyMemory(*BufferAudio+I, *memory_buf+I*2 , 4)
PokeW(*memory_buf+I*2-4, SincInterpolation(*BufferAudio, I))
PokeW(*memory_buf+I*2-2, SincInterpolation(*BufferAudio, I+2))
Next
FreeMemory(*clearmem)
EndProcedure
size.l =MemorySize(*AudioBuffer_Raw)*2
*AudioBuffer_Raw = ReAllocateMemory(*AudioBuffer_Raw, size)
upFreqWav(*AudioBuffer_Raw, size)
; DXSound(*AudioBuffer_Raw+size, 2)