Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

16.07.2016, 22:46

Problem mit OpenAL: Sound nur ganz kurz zu hören [GELÖST]

Hallo Leute,

ich arbeite gerade an meiner Audio Library und versuche dabei erst mal OpenAL als Audio Engine zu verwenden.
Wird zwar leider seit 2006 nicht mehr weiter entwickelt, aber OpenAL nehme ich immer ganz gerne, weil es eben Cross-Platform und sehr einfach ist.

Allerdings habe ich im Moment folgendes Problem:
Unter Windows ist der Sound in meiner Testanwendung nur einen Bruchteil einer Sekunde zu hören und bricht dann sofort ab.
Unter Linux (Kubuntu 16.04 im VMWare Workstation 12 Player) und MacOS (El Capitan) funktioniert der Code aber seltsamerweise einwandfrei.

Kann den Test vielleicht mal einer von euch Windows Nutzern von meiner GitHub Seite laden und das ausprobieren, ob es bei euch geht?
Mit meiner alten SoftPixel Engine funktioniert es nämlich komischer Weise unter Windows.
Habe auch schon mit dem Dependency Walker geprüft, dass auch in beiden Fällen die gleiche OpenAL DLL geladen wird.
Die Community Implementierung von OpenAL habe ich sogar auch schon ausprobiert: selber Effekt.
GitHub Seite: https://github.com/LukasBanana/AcousticsLib

Das Projekt "test1" wird von CMake und VisualStudio im Debug Modus unter "<BUILD-ORDNER>\build\Debug\test1D.exe" abgelegt
und muss vom Working-Direktory "<PROJEKT-REPOSITORY>\test" aus ausgeführt werden.
Das Projekt ist noch nicht sehr groß, sollte also noch nicht so schwer sein, das zu bauen :-)

Vielleicht fällt aber auch jemandem direkt von der GitHub Seite aus der Fehler auf.
Ich steige im Moment nicht mehr dahinter ?(

Danke und Gruß,
Lukas

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LukasBanana« (18.07.2016, 10:15)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

2

18.07.2016, 10:15

GELÖST
Hatte vergessen den std::ifstream explizit im Binärmodus zu öffnen. GCC und clang machen dabei mit der read Funktion anscheinend keinen Unterschied, aber bei VisualC++ verhält sich die read Funktion dann anders und kann anscheinend nicht so lange Blöcke lesen.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

18.07.2016, 10:23

Nun unter Windows ist der Standardzeilenumbruch /r/n. Also muss dieser beim Lesen in den C++ /n umgewandelt werden. Wenn ein Binärblock zufällig /r/n enthält, kracht es.

(Sehr persönliche Anmerkung: iostreams mit diesen und den vielen anderen Eigenheiten sind der größte Schrott in der ganzen STL. Ich würde dir empfehlen, dass du etwas anderes verwendest, falls du die Möglichkeit dazu hast.)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

18.07.2016, 10:33

Es ist übrigens \r\n und \n und nicht /r/n oder /n.

PS: Persönliche Anmerkungen schreibt man mit "Ich halte XYZ für Schrott" und nicht "XYZ ist Schrott".
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

5

18.07.2016, 11:00

Nun unter Windows ist der Standardzeilenumbruch /r/n. Also muss dieser beim Lesen in den C++ /n umgewandelt werden. Wenn ein Binärblock zufällig /r/n enthält, kracht es.

Ach stimmt, das hatte ich nicht bedacht. Ja, das mit dem Zeilenumbruch unter Windows ist wirklich eine Katastrophe. Oder um es gemäß den Richtlinien von BlueCobold zu sagen: "Ich halte den Zeilenumbruch unter Windows für Schrott" :D

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

6

18.07.2016, 11:09

Da wir ja eh schon Off-Topic sind:
Der Windows-Zeilenumbruch ist aber eigentlich der "richtige". Angelehnt an Schreibmaschinen.
Erst den Cursor wieder an den Zeilenanfang holen und dann in die nächste Zeilen rutschen ;)

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

7

18.07.2016, 11:24

Der Windows-Zeilenumbruch ist aber eigentlich der "richtige". Angelehnt an Schreibmaschinen.

Wo das seinen Ursprung hat, ist mir auch klar. Aber inwiefern sollte ein Computer denn in der internen Datenrepräsentation abwärtskompatibel zu einer Schreibmaschine sein??
In diesem Zusammenhang halte ich es wirklich für unsinnig zwei Character für 'eine Neue Zeile' zu speichern.
Dass man das Tastaturlayout von der Schreibmaschine übernommen hat ist hingegen sehr sinnvoll, da man bereits an das entsprechende 10-Fingerschreibsystem gewöhnt war.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

8

18.07.2016, 12:28

Zitat von »BlueCobold«

Es ist übrigens \r\n und \n und nicht /r/n oder /n.

:search: Tatsache - habe es irgendwie geschaft die zu verwechseln.

Ich finde die Windows-Konvention auch unsinnig, allerdings ist daran inzwischen kaum mehr was zu ändern. Mein Ärger richtet sich eher an das Design der iostreams. Diesen Fehler sieht man sehr oft. Er ist eigentlich darauf zurückzuführen, dass die Stream-Funktionen mit den Formatierungsfunktionen völlig vermischt sind.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

9

18.07.2016, 13:26

Zumindest ist mit den iostreams der Lese/Schreib Zugriff sehr schön von den Dateien wegabstrahiert,
weil man recht elegant zwischen fstream und stringstream wechseln kann.
So kann man z.B. alle Ressourcen einer Anwendung entweder von der Platte laden oder direkt aus der Binärdatei der jeweiligen Anwendung,
ohne den Code großartig anpassen zu müssen.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

10

18.07.2016, 16:40

Das ist richtig, aber hast du schonmal versucht eine eigene Streamquelle zu implementieren?
Zum Beispiel um einen Hash zu berechnen oder für einen Kompressionlayer.
Ich habe die Erfahrung gemacht, dass dies mit einem anderen Stream-Interface wesentlich einfacher ist.

Werbeanzeige