Seite 2 von 4

Verfasst: 19.11.2004 18:32
von Serge
Also ich denke mal "samplesource" und "soundeffect" sind interfaces und es ist in PB wohl nur möglich stinknormale Variablen und keine Listen/Felder/Strucuteren mit Interfaces zu definieren? Oder irre ich mich?

so gehts ...

Verfasst: 19.11.2004 20:57
von WolfgangS

Code: Alles auswählen

Enumeration
  #audiere
EndEnumeration

IncludeFile "audiere.pbi"
  
Structure SOUNDSTRUCTURE
    SampleSourceObject.SampleSource
    SoundEffectObject.SoundEffect
EndStructure

Dim mysound.SOUNDSTRUCTURE(5)
  
  
If OpenLibrary(#audiere,"audiere.dll")=0
MessageRequester("","Error audiere.dll",0):End:EndIf
    
                                                ; opens a device
AudioDeviceObject.AudioDevice=AUDIERE_OpenDevice(@"winmm",@"buffer=1000,rate=44100")    
    If AudioDeviceObject=0
    MessageRequester("","Error AUDIERE_OpenDevice:",0):End:EndIf


                                                 ; opens a music
mysound(0)\SampleSourceObject = AUDIERE_OpenSampleSource(@"machinae_supremacy_-_sidstyler.ogg",#FF_AUTODETECT) 
    If mysound(0)\SampleSourceObject=0
    MessageRequester("","Error AUDIERE_OpenSampleSource",0):End:EndIf


mysound(0)\SoundEffectObject=AUDIERE_OpenSoundEffect(AudioDeviceObject,mysound(0)\SampleSourceObject,#MULTIPLE)  
    If mysound(0)\SoundEffectObject=0                                        
    MessageRequester("","Error OpenSound",0):End:EndIf 




mysound(0)\SoundEffectObject\play()                              ; play the soundEffect


MessageRequester("","Press OK für'n zweiten sound",0)

mysound(0)\SoundEffectObject\play()                              ; play the soundEffect

MessageRequester("","Jetzt hörst Du zwei Sounds",0)


mysound(0)\SoundEffectObject\stop()                              ; stop the soundEffect


mysound(0)\SoundEffectObject\ref()                         ; refcounter+1
mysound(0)\SoundEffectObject\unref()                       ; delete the object (refCounter-1)
                                                ; Note:
                                                ; it isn't necessary to delete the 
                                                ; SampleSourceObject and the AudioDeviceObject
CloseLibrary(#audiere)
So gehts, keine Ahnung was da anders ist ...


MFG
WolfgangS

Verfasst: 19.11.2004 21:28
von Robert Wünsche
Warum, warum schlägt ihr euch mit externen libs rum ?
--> pb:
--> hier folgt gleich etwas code aus meiner engine zum abspielen unendlich vieler sounds mit den pb befehlen.

Code: Alles auswählen

Procedure G_sound_playfree (p_dateipfad.s,p_spielfequenz.f)
  ergebniss = LoadSound(#PB_Any, p_dateipfad.s)
  If ergebniss = 0
    ProcedureReturn 0
  Else
  EndIf
  PlaySound(ergebniss)
  ProcedureReturn ergebniss
EndProcedure
So :mrgreen:

Verfasst: 19.11.2004 21:48
von WolfgangS
So :mrgreen:
Das kann aber keine ogg und mp3 on the fly ... :freak:


MFG
WolfgangS

Verfasst: 19.11.2004 22:28
von Robert Wünsche
ogg ... naja, eigentlich schon :) (siehe pb hilfe),
mp3 ... eigentlich nicht, könnte aber noch kommen !
oder ich progs in 5 jahren selbst :mrgreen: . :wink:

Verfasst: 19.11.2004 23:48
von Lars
@Robert Wünsche

Na du bist mir ja ein Held. Du lädst jeden Sound, der abgespielt werden
soll neu. Wenn du jetzt ein Spiel hat, wo beispielsweise für jeden Schuss
einer MG (um das ganze an einem sehr extremen Beispiel zu zeigen) ein
neuer Sound geladen wurde, hast du das Problem, dass du irgendwann
den Sound x 1000 mal im Speicher liegen hast, der ist dann auch mal voll
irgendwann und es geht nichts mehr.

Verfasst: 19.11.2004 23:51
von Serge
Wolfgang:
Hm geht tatsächlich.
Aber sobald ich es folgendermasen abändere:
statt

Code: Alles auswählen

  sounds()\soundEffectObject\play()

Code: Alles auswählen

Procedure test()
  sounds()\soundEffectObject\play()                              ; play the soundEffect 
EndProcedure
test()
geht es schon wieder nicht -_-
(heisst ich kann das play() in keine procedure stecken)

Verfasst: 20.11.2004 00:49
von Robert Wünsche
ja gut, das weiß ich auch :roll: , ich arbeite noch daran !
Übrigens: 1000 * 300kb = 1000 * 0,3 = 300 MB !
Ich glaube, das pb das selbstständig erledigt, oder kann man irgentwie die gebrauchte sounddateigröße im Ram messen ?

Verfasst: 20.11.2004 01:34
von Serge
PB erledigt das löschen selbstständig, ja, aber erst beim beenden des Programms.
Ein weiterer Nachteil deines Systems ist, dass man nicht so einfach Dateien in Echtzeit laden kann, dies geht auf die Kosten der Performance :/
(deswegen ja auch meine erste idee mit Catchsound, aber dies scheint auch nicht besonders schnell zu sein)

Verfasst: 20.11.2004 02:07
von Robert Wünsche
Wie in echtzeit ?

Ich hab jetzt so was wie einen virtuellen "interrupt" eingebaut, der den speicher begrentz, :) .