EmitSound und Channels - Wie verwaltet dies Blitz3D?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Wipffinder

Betreff: EmitSound und Channels - Wie verwaltet dies Blitz3D?

BeitragDo, Feb 20, 2014 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Tach

Mal wieder eine Frage zu den Blitz Befehlen...

Wie arbeitet Blitz3D eigentlich mit Sounds? Nachdem ein Sound geladen wurde kann er mit EmitSound() abgespielt werden. Die Funktion liefert auch einen Channel zurück mit dem den Sound stoppen kann. Wenn nun ein Sound fertig abgespielt wurde wird der Channel freigegeben und ein neuer Sound kann über diesen Channel gespielt werden?
Und während ein Sound abgespielt wird, wo befindet er sich? Greift die Soundkarte direkt auf den RAM zu oder hat die Soundkarte auch einen Speicher der befüllt wird?

Warum stelle ich diese Fragen? Mich interessiert ob EmitSound() irgend welche Beschränkungen hat. Z.B. dass eine maximale Anzahl Sounds bereits abgespielt wurde und ein wichtiger Sound (Dialog mit einem NPC o.ä.) nicht abgespielt wird weil der Speicher voll ist oder nur eine begrenzte Zahl von Channels bereitstehen.

Ich will einfach besser verstehen wie Blitz und auch Computer arbeiten damit ich weis was für Probleme auftreten könnten wenn man etwas zusammencoded.

Xeres

Moderator

BeitragSo, Feb 23, 2014 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube, BB verwaltet den Speicher gut genug. Probleme mit dem abspielen von vielen Sounds sollte es wohl nicht geben - jedenfalls wären mir keine Bekannt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

DAK

BeitragSo, Feb 23, 2014 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt hier zwei mögliche Limits: Kanäle und RAM.

Ich habs mal ausgetestet, auch mit 1 Mio. Kanälen scheint es noch zu funktionieren. Genau kann ich das nicht sagen, da der Unterschied zwischen 100k und 1m relativ gering ausfällt.

Mein Testcode:
BlitzBasic: [AUSKLAPPEN]
sound = LoadSound("test.mp3")
For i=0 To 1000000
chan = PlaySound(sound)
Next
Delay 1000


bzw.

BlitzBasic: [AUSKLAPPEN]
sound = LoadSound("test.mp3")
For i=0 To 1000000
chan = PlaySound(sound)
PauseChannel(chan)
Next

chan = PlaySound(sound)
Delay 1000


Das zweite war gedacht um zu schauen, ob ein Channel noch spielt nachdem schon ein Haufen Kanäle offen sind, und das funktioniert. Ich war mir nur nicht sicher ob Blitz eventuell einen Kanal, der pausiert wurde, automatisch wieder freigibt.
Deswegen habe ich den ersten gemacht, wo man halbwegs schauen kann, wie viele gleichzeitig hörbar sind.

Um es dann noch sicherer zu machen habe ich das hier noch getestet:

BlitzBasic: [AUSKLAPPEN]
sound = LoadSound("test.mp3")
For i=0 To 1000000
DebugLog(i)
chan = PlaySound(sound)
Delay(1000)
Next


Nach 64 Kanälen habe ich aufgehört, da es in den Ohren weh getan hat, aber ich habe da immer noch gehört, wie jede Sekunde ein neuer Kanal aufgemacht wurde.

Bei den ganzen Tests wird chan auch nie 0, das heißt, BB hört nie auf neue Channels zu machen.

Die Testdatei die ich verwendet habe war das 2:49 Minuten lange, 3.92 MB große Lied "Maid with the flaxen hair" das bei Windows als Beispielaudio dabei ist.

Ich habe dann noch getestet, wo die Audiodateien landen und wie viele Sounds man laden kann. Die landen eindeutig im RAM, sind dort aber unkomprimiert, was extrem viel Speicher verbraucht.
Getestet habe ich das mit folgendem Code:
BlitzBasic: [AUSKLAPPEN]
For i=1 To 1000000
sound = LoadSound("test.mp3")
chan = PlaySound(sound)
PauseChannel(chan)
If (sound=0) Then
Print("Limit: "+(i))
Delay 20000
End
EndIf
Print(i)
Next
Delay 10000


Im Debugmodus war damit nach 58 Liedern und 1.741.768 KB RAM-Verbrauch Schluss. Ohne Debugmodus waren 60 Lieder bei 1.770.100 KB drin.
Pro Lied wurden im Release-Modus rund 28-29 MB verbraucht, was den Schluss nahelegt, dass es unkomprimiert im RAM liegt.

Man kann leicht überprüfen, ob ein Sound geladen wurde oder nicht indem man schaut, ob der Rückgabewert von LoadSound gleich 0 ist.

Also: Kanäle sind kein Limit, RAM schon.
Gewinner der 6. und der 68. BlitzCodeCompo
 

Wipffinder

BeitragSo, Feb 23, 2014 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die ausführlichen Tests.

D.h. wenn man z.b. eine gesprochene Dialogausgabe macht muss man das schon selber verwalten sonst wirds bald eng. Aber das sollte auch kein Problem da man sowieso prüfen muss ob ein Text zu ende gesprochen wurde und somit den channel irgendwo aufbewahren muss.

Es ist interessant, dass die Sounds unkomprimiert im RAM liegen, da muss man bei sehr langen Ambientsoundtracks ebenfalls aufpassen. Unter umständen müssen diese sogar geteilt werden.

BladeRunner

Moderator

BeitragSo, Feb 23, 2014 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Bald eng? Du hast 1.7 GB für Sounds, das ollte mehr als reichen, meinst Du nicht?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Kruemelator

BeitragMo, Feb 24, 2014 1:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Als kleinen Hinweis: die bass.dll (einfach mal in der Forensuche eingeben) kann streamen, steht zumindest in der Dokumentation.

DAK

BeitragMo, Feb 24, 2014 10:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich nehme an, dass die 1.7 GB nicht nur für Sounds sind, sondern auch für Bilder und Modelle, das ist aber nur eine Annahme.
Ein 32-Bit-Programm darf generell nur bis zu 2 GB verbraten, also wird zumindest ein Teil dieses Bereiches geteilt sein.

@Wipffinder: Das Problem sind hier nicht die Kanäle. Lässt man den ersten Test von mir laufen (wo der Sound nicht in der Schleife sondern nur ein mal geladen wird), dann bleibt der Speicherverbrauch auch bei 1 Mio. Kanälen bei 41.644 KB stehen. Die brauchen also quasi keinen Speicherplatz.
Was schon wichtig ist, ist dass du Sounds die du nicht mehr brauchst mit FreeSound löscht. Wenn du also z.B. viele verschiedene NPCs hast, die verschiedenes Zeug reden, dann FreeSounde einfach alles, was nachher nicht mehr gebraucht wird. Eventuell hilft für Sprache auch eine niedrigere Bitrate.

Bei meinen Tests sind rausgekommen, dass du 169 Minuten Musik bei einer Bitrate von 192 kb/s gleichzeitig im Speicher haben kannst. Das sollte eigentlich genügen.
Willst du mehr haben bräuchtest du eine Sprache in der du 64-Bit-Programme schreiben kannst, dann hast du Zugriff auf den ganzen (freien) Speicher.
Gewinner der 6. und der 68. BlitzCodeCompo

BladeRunner

Moderator

BeitragMo, Feb 24, 2014 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar muss sich die App da auch noch Gfx und Co. unterbringen, aber seien wir mal Ernst: Wer von euch hat schon eine (sinnvolle) App geschrieben die den kompletten Speicher benötigt? Das riecht ja schon ein wenig nach Mega-Projekt. Die 169 Minuten müssten ja erst mal mit Inhalt gefüllt werden.
Von daher mein Rat: Entwickle erst mal dein Programm, Wipffinder. Soltest Du (wider Erwarten) wirklich an Grenzen stoßen lässt sich sicherlich immer noch einiges optimieren. FreeSound ist ja schonmal ein Schritt dorthin.
Was für ein Programm schwebt dir denn vor?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

DAK

BeitragMo, Feb 24, 2014 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Das einzige Problem hier ist hald noch das Nachladen. Das Laden von einem solchen Lied hat doch schon so eine viertel bis halbe Sekunde gebraucht. Da B3D ja keine Threads kennt, mit denen man im Hintergrund laden könnte, geht das dann im laufenden Spiel eher schlecht.
Gewinner der 6. und der 68. BlitzCodeCompo

BladeRunner

Moderator

BeitragMo, Feb 24, 2014 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Wobei auch das machbar ist- größere Spiele müssen eh dann und wann nachladen. Wenn also eine Levelgrenze erreicht wird alles neue ab in den Speicher. Ohne allerdings zu wissen wofür es gebraucht wird sind das eh nur Mutmaßungen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

DAK

BeitragMo, Feb 24, 2014 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein hald, flüssig im Hintergrund nachladen wird nix, sondern nur mit Ladebildschirm.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group