Code: Alles auswählen
IncludeFile "D:\bass.pbi" ; Pfad anpassen !!!
BASS_Load_Library("D:\bass.dll")
Filename.s = "D:\test.mp3"
Structure Sample
l.w
r.w
EndStructure
Procedure UpdateWaveImage(PBImage, *SampleData.Sample, SampleCount)
Protected.i Width, Height, x, VOffsetL, VOffsetR, MUL
Protected.i SamplesPerPixel, sample
Protected.w MinL, MaxL, MinR, MaxR
If *SampleData And SampleCount
StartDrawing(ImageOutput(PBImage))
Width = OutputWidth() : Height = OutputHeight()
VOffsetL = Height >> 2 : VOffsetR = VOffsetL + Height >> 1
MUL = (VOffsetL * $19999) >> 16
Box(0, 0, Width, Height, $FFE0E0E0)
Line(0, VOffsetL, Width, 1, $FFA0A0A0)
Line(0, VOffsetR, Width, 1, $FFA0A0A0)
SamplesPerPixel = (SampleCount + Width - 1) / Width
If SampleCount
MinL = *SampleData\l : MinR = *SampleData\r : MaxL = MinL : MaxR = MinR
While SampleCount
If *SampleData\l < MinL : MinL = *SampleData\l : ElseIf *SampleData\l > MaxL : MaxL = *SampleData\l : EndIf
If *SampleData\r < MinR : MinR = *SampleData\r : ElseIf *SampleData\r > MaxR : MaxR = *SampleData\r : EndIf
sample + 1 : SampleCount - 1
If sample = SamplesPerPixel Or SampleCount = 0
MinL = (MinL * MUL) >> 16 : MaxL = (MaxL * MUL) >> 16
MinR = (MinR * MUL) >> 16 : MaxR = (MaxR * MUL) >> 16
LineXY(x, VOffsetL - MinL, x, VOffsetL - MaxL, $FFFF8000)
LineXY(x, VOffsetR - MinR, x, VOffsetR - MaxR, $FFFF8000)
MinL = *SampleData\l : MinR = *SampleData\r : MaxL = MinL : MaxR = MinR
x + 1 : sample = 0
EndIf
*SampleData + 4
Wend
EndIf
StopDrawing()
EndIf
EndProcedure
BASS_Init(-1, 44100, 0, 0, #Null)
Channel = BASS_StreamCreateFile(#False, @Filename, 0, 0, #BASS_STREAM_PRESCAN|#BASS_STREAM_DECODE|#BASS_UNICODE)
BASS_ChannelSetPosition(Channel, BASS_ChannelSeconds2Bytes(Channel, 200.360), #BASS_POS_BYTE)
length = BASS_ChannelSeconds2Bytes(Channel, 0.500)
Dim Buffer.Sample(length >> 2)
BASS_ChannelGetData(Channel, @Buffer(), length)
OpenWindow(0, 0, 0, 620, 320, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
WaveImage = CreateImage(#PB_Any, 600, 300)
UpdateWaveImage(WaveImage, @Buffer(), length >> 2)
ImageGadget(1, 10, 0, 600, 300, ImageID(WaveImage))
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow