amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Musik und Samples mit AHI abspielen [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

02.07.2003, 10:56 Uhr

MarkusPohlmann
Posts: 164
Nutzer
Hallo,

erstmal vorweg, ich habe kaum Ahnung von AHI! :D
Durch entsprechende Tutorials habe ich rausbekommen wie
ich im Programm ein AHI-Device öffnen und schliessen
kann, aber was Musik betrifft habe ich keine Informationen
auftreiben können.

Ich möchte zusätzlich zu Samples in meinem Programm
(Bsp.: Schussgeräusch einer Waffe) auch Musik abspielen
und habe keine Ahnung wie das geht (lese in den Tutorials
nur immer was über einzelne Samples).

Bevor ich das Rad neu erfinde, frage ich lieber mal erst um Hilfe.
Es wäre schön wenn jemand sein wissen teilen könnte, damit
ich mich nicht für weitere drei Monate verzetteln muss bis
ich weiter vorran komme. ;)

Also, gibt es Sourcen oder Routinen zum AHI-konformen Musik
abspielen wobei ich eben auch zeitgleich noch einzelene
Samples abspielen kann?

Falls ja, was für (Modul-)Formate werden unterstützt?

Falls nein, kann mir trotzdem jemand helfen? ?(

Mit freundlichen Grüssen
Markus Pohlmann

[ - Antworten - Zitieren - Direktlink - ]

07.07.2003, 14:47 Uhr

alexw
Posts: 137
Nutzer
Wenn du's rausfindest, sag's mir! :P

Im Ernst: Ich wollte auch eine Routine schreiben, die während eines Spieles im Hintergrund Musik, welche als Sample vorliegt, per Double Buffering abspielt. Unter 68k scheint's zu funktionieren, unter PPC gibt's Probleme (siehe irgendein anderer Thread von mir).
Wegen zeitgleich Samples abspielen, möchte ich dir mal meine Erfahrungen mitteilen: Als sich meine Routine mal zufällig gut benommen hat (sie hat so ihre Launen), habe ich die Möglichkeit eingebaut, gleichzeitig andere Samples einzumischen. Ich hab hierzu eine eigene Mixing-Routine gebaut, weil das Verhalten von AHI, bei mehreren Stimmen leiser zu werden, mir nicht gefällt. Darum mischt die Routine die Samples einfach so zusammen, was sich in der Praxis sogar als sehr wohlklingend herausstellt - schließlich ist das bei realen Audioquellen genau so. Nur ist das bei Spiel-Geräuschen schlecht, weil die Samples erst beim nächsten Double-Buffer-Wechsel anfangen zu spielen. Eine Musik-Routine könnte hingegen die Samples clever an der richtigen Position im Buffer einmischen, habe ich aber wegen der Probleme noch nicht probiert. Wenn das Streaming der Musik im Hintergrund wegfällt, kann man aber auch bestimmt viel einfacher die Library-Funktionen von AHI benutzen, oder? Oder kann man die Device- und die Library-Funktionen gleichzeitig benutzen? Ich glaube gelesen zu haben, dass man das nicht kann.
Meine Routine läuft in einem eigenen Task. Ich weiß nicht, ob die Probleme daher rühren, deshalb habe ich vor sie so umzuschreiben, dass sie in der Hauptschleife des Spieles aufgerufen wird. Mal sehen, ob das Spiel dadurch nicht zu sehr gebremst wird, im Moment habe ich allerdings wenig Zeit für sowas.

Bin mir jetzt nicht sicher, ob das überhaupt hilfreich war?! :lach:

Alex.

[ - Antworten - Zitieren - Direktlink - ]

08.07.2003, 16:10 Uhr

Tessien
Posts: 55
Nutzer
Moin Markus,

vorneweg: Ich bin kein sonderlich großer Freund von AHI. Ich hoffe immernoch innig, daß die OS4-Variante von AHI neu designt wurde... was ich allerdings bezweifle.

In CFII wurde Musik auf seehr einfache Weise abgespielt: Die Musik wurde als 22kHz-Mono-Sample auf der Platte gespeichert, aber woher die Musik im Endeffekt stammt, ist ja anpassbar. An dieser Stelle einen OGG-Decoder einzubauen, sollte kein Problem werden.

Die Sounddaten wurden in einen rollenden Buffer geschrieben. Etwa aller einer halben Sekunde hat die Abspielfunktion aus der Abspielfrequenz und der vergangenen Zeit so exakt wie möglich die Anzahl der "verbrauchten" Sounddaten errechnet, den rollenden Buffer soweit weiterbewegt und mit den jetzt aktuellen Sounddaten ein (als dynamisches erzeugtes) AHI-Sample gefüllt. Diese Methode ist sehr simpel und auch flexibel gegenüber der Aufruffrequenz der Abspielfunktion, allerdings entsteht konzeptbedingt ein Versatz der beiden aufeinanderfolgenden Samples. Mit etwa 10k großen Samples war dieser Versatz jedoch nichtmal auf meinem 040/25 zu höen. Man hört ihn nur beim Anim-Abspielen... :-))

Es gibt irgendwo in den AHI-Beispielen ein Streaming-Beispiel, daß Callback-Funktionen nutzt. Diese Callback-Funktion wird aufgerufen, wenn ein Soundbuffer fertig ist. Sie schaltet dann auf das andere Sample um und füllt den leeren Buffer mit den nächsten Daten. Ich habe diese Methode allerdings nicht gewählt, weil ich nicht wusste, wie sich Callback-Funktionen in gemischten 68k/PPC-Umgebungen verhalten.

Wenn Du willst, schicke ich Dir den Source zu. Aber sei gewarnt, schön ist er nicht. Ich würde vermutlich anfangen, den Kram in eine ordentliche Klasse zu verpacken.

BTW, AHI ist in vielen Dingen (meiner Meinung nach) völlig unnötig überkompliziert gestaltet. Ich hoffe innig, daß sich jemand aufrafft und eine neue Sound-API schreibt. Extra zu initialisierendes Mixing, eine Herde von Sound-Modi ohne erkennbare Unterschiede, die auch noch der User auswählen muss.... mir geht's da wie bei Windows: Ich frage mich, wie sich sowas je so weit verbreiten konnte.

Bye, Thomas
--
Thomas Schulze - programmer at Dreamworlds Development - http://www.dreamworlds.de

[ Dieser Beitrag wurde von Tessien am 08.07.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Musik und Samples mit AHI abspielen [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2022 by amiga-news.de - alle Rechte vorbehalten.
.