BASS_ChannelSetPosition Problem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Jean

Betreff: BASS_ChannelSetPosition Problem

BeitragSa, Okt 27, 2007 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Okt 29, 2007 2:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Drücken Sie nun die Kombination 25365284256952 um das Gespräck zu beenden und keine 30 Euro zu zahlen. Smile

cu
  • Zuletzt bearbeitet von Abrexxes am Mo, Okt 29, 2007 2:13, insgesamt einmal bearbeitet

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group