BASS_ChannelSetPosition Problem
Übersicht

![]() |
JeanBetreff: BASS_ChannelSetPosition Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tach
Ich habe mal die BASS Userlib ausprobiert und finde sie mehr als praktisch. Nur leider habe ich ein Problem mit der Funktion "BASS_ChannelSetPosition" mit welcher man die aktuelle Abspielposition verändern kann. Wenn ich ein Stück z.B. an die Position 200000 spulen möchte, passiert einfach gar nichts. Kann mir jemand sagen, was ich falsch mache? Hier mein Code: Code: [AUSKLAPPEN] datei$=RequestFile$ ("Öffnen", "mp3") size=FileSize (datei$) Include "bass.bb"; error = BASS_Init(-1,44100,0,0,BASS_NULL); music = BASS_StreamCreateFile(0,datei$,0,0,BASS_MUSIC_FLOAT); BASS_ChannelPlay(music,BASS_TRUE); BASS_ChannelSetPosition%(music,20000000) Repeat Delay 1 pos = BASS_StreamGetFilePosition(music,BASS_FILEPOS_CURRENT) ; Print "Stream Position : "+pos + "/" + size vumono = BASS_ChannelGetLevel (music) ; vuleft = BASS_MakeLoWord (vumono) ; vuright = BASS_MakeHiWord (vumono) ; Until pos>=size BASS_Free() |
||
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallöchen, hier ist die automatische BBS Support Hotline.
Beim durchlesen Ihres Codes wurde folgendes festgestellt: Code: [AUSKLAPPEN] music = BASS_StreamCreateFile(0,datei$,0,0,BASS_MUSIC_FLOAT)
Nicht schlecht, wenn du aber "ganz" genau "springen" willst dann benutze BASS_MUSIC_FLOAT+BASS_STREAM_PRESCAN . Allerdings ist auch die "normale" Methode schon genau und auch beim laden je nach Datei und Rechner schneller. Code: [AUSKLAPPEN] pos = BASS_StreamGetFilePosition(music,BASS_FILEPOS_CURRENT)
Gibt dir zwar einen schönen Wert an, aber leider ist das der, der angibt wo der DecodePointer (Zeiger) gerade in seinem Buffer rumrutscht. Wenn du genau wissen willst wo du gerade bist (PlaybackPosition) dann nutze : Code: [AUSKLAPPEN] pos = BASS_ChannelGetPosition(music)
Und du siehst das da gaaaaaaaaanz andere Werte rauskommen. Ich habe mein Beispiel in BBS Stream etwas umgeändert um das zu zeigen. Mit der Taste "8" springst du an Position 3000000 byte (!). Einfach das Beispiel Demo_stream hirdurch erssetzen. Code: [AUSKLAPPEN] Include "includes\bass.bb"
Timer=CreateTimer (60) Graphics 640,480,0,2 SetBuffer BackBuffer() error = BASS_Init(-1,44100,0,0,BASS_NULL) music = BASS_StreamCreateFile(0,"media\dfor.ogg",0,0,BASS_MUSIC_FLOAT) BASS_ChannelPlay(music,BASS_TRUE) While Not KeyHit (1) Color 255,255,255 Cls Text 0,0,"Bass Stream demo" version = BASS_GetVersion() Text 0,20,"Bass version : " +Hex$(version) cpu# = BASS_GetCPU() Text 0,30,"CPU time : "+cpu+"%" device$ = BASS_GetDeviceDescriptionString(1) Text 0,40,"First (real) device : "+device devid = BASS_GetDevice() Text 0,50,"Device id : "+devid mvolume = BASS_GetVolume() Text 0,60,"Master Volume : " +mvolume pos = BASS_ChannelGetPosition(music) Text 0,80, "Stream position : "+pos Text 0,100, "Hit 8 to jump to position 3000000" If KeyHit (9) Then BASS_ChannelSetPosition(music,3000000) vumono = BASS_ChannelGetLevel (music) vuleft = BASS_MakeLoWord (vumono) vuright = BASS_MakeHiWord (vumono) Color Rand(0,255),Rand(0,255),Rand(0,255) Text 0,170,"Left channel : "+vuleft Rect 0,200,vuleft/52,20,1 Rect 0,240,vuright/52,20,1 Text 0,270,"Right channel : "+vuright WaitTimer Timer Flip 0 Wend BASS_Free() End Dann weist du hoffentlich das Bass_Init und Bass_Free in einem Programm nur einmal benutzt werden, also nicht die ganze Engine 10 mal für 10 Samples starten. Und was das angeht Code: [AUSKLAPPEN] Delay 1
gibts hier was , was du lesen solltest : https://www.blitzforum.de/foru...hp?t=25242 Und das Code: [AUSKLAPPEN] pos>=size Wird nie geschehen. Besser wäre da BASS_ChannelIsActive ![]() Drücken Sie nun die Kombination 25365284256952 um das Gespräck zu beenden und keine 30 Euro zu zahlen. ![]() cu |
||
- Zuletzt bearbeitet von Abrexxes am Mo, Okt 29, 2007 2:13, insgesamt einmal bearbeitet
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group