g-audio sdk... kennt das jemand? verstehe nicht was hier gemeint ist...
-
Hallo!
Ich plane ein Programm zu schreiben, was Hintergrundmusik für P+P Rollenspiele steuert. Dazu möchte ich das G-Audio SDK von http://www.obrazstudio.com/gaudio/ benutzen, da direct-x für einen Anfänger (ich lerne mit diesem Projekt) etwas kompliziert ist.Ich habe nun folgendes Problem.
Es gibt zu dem Streamobjekt (also dem Song) eine MemberfunktionERR retrieveInfo(WAVInfo *info) const;
mit der ich alle Infos über den Stream in die Struktur info holen kann.
class WAVInfo { public: int structSize; int nbChans; int nbBits; int frequency; short formatTag; int dataChunkSize; int avgBytesRate; int unpackedDataSize; const ACMDRIVERDETAILS *driverDetails; SAMPLETYPE samplePromotion; };
zu WAVInfo.structSize steht in der Dokumentation:
structSize:
Size of structure in bytes. This member must be correctly set in order to retrieve informations.Hat jemand eine Idee, was damit gemeint ist. Muß ich da vor retrieveInfo irgendetwas mit memset machen?
Ich versuche das gerade so zu benutzen:
WAVInfo *info; err = wav->retrieveInfo(info); //err und wav existieren bereits...
Das ganze kompiliert, stürzt aber in der zweiten Zeile zur Laufzeit ab.
Run-Time Check Failure #3 - The variable 'info' is being used without being defined.
Der Debugger zeigt auch, daß in info nix drinne ist. Woran könnte das liegen?
Ich hab auchmal versucht, info mit new auf dem heap zu erstellen, ging auchnich.Ich weiß das ist etwas dreist, jetzt hier mit irgendwelchen problemen von drittsoftware anzukommen wo man sich erstmal reindenken muß. Aber vielleicht ist das ganze ja auch offensichtlicher als ich gedacht habe. Außerdem scheint mir dieses Paket recht gut zu sein, zumindest habe ich nichts besseres gefunden. Leider gibt es da keine support-community oder sowas.
Ach nochwas... hat vielleicht schonmal jemand eine soundapplikation mit einer crossfade funktionalität geschrieben und kann mir eine anregung geben wie man das machen kann?
Gruß,
Marius
-
marius g schrieb:
Ich versuche das gerade so zu benutzen:
WAVInfo *info; // Definiert einen Zeiger, der ins Nirvana zeigt err = wav->retrieveInfo(info); // Schreibt Kram ins Nirvana -> BUMM
-
ok stimmt das ist quatsch. also entweder:
WAVInfo *info= new WAVInfo; err = wav->retrieveInfo(info);
oder
WAVInfo info; err = wav->retrieveInfo(&info);
Läuft beides aber Err gibt mir
WAV: Invalid structure size
also muß ich die größe irgendwie festlegen (das was ich schon aus der anleitung gequotet habe). weiß jemand wie ich das machen kann?
-
info.structsize = sizeof(WAVInfo);
-
Bye, TGGC (Keine Macht den Dummen)
-
@Sgt. Nukem: Das sieht schonmal gut aus, ich dachte ich hätte das mit sizeof schonmal probiert. war aber wohl irgendwie falsch gewesen. jedenfalls werden die members von WAVInfo jetzt gefüllt, bis
unpackedDataSize
dann zerlegts sich
Unhandled exception at 0x1001d098 in fx_cutoff.exe: 0xC0000005: Access violation reading location 0x0000000c.
aber das muß ja irgendwas andres sein.
vielen dank erstmal, hat mir sehr geholfen.
-
Mit der anderen verwandten Klasse Stream::MPEG funzt es einwandfrei.
Der einzige Unterschied in dieser Klasse ist, daß sie kein Member .driverDetails besitzt. Dieses enthält einen Zeiger auf
*
acmDriverDetails
*
welches anscheinend eine struct aus dem platform sdk ist. Dort scheint der Fehler zu enstehen. Mal schauen ob ich da was finde... kennt das ding jemand?
-
Versuch doch mal rauszufinden (per Debugger) wo genau im fremden Code der Zugriff fehlschlägt. Eventuell musste ja noch den driverDetail Zeiger irgendwie besonders initialisieren oder ihn schon auf eine Struktur zeigen lassen.
Ansonsten email doch mal den Entwicklern, die müssten das ja am besten wissen.cya
liquid
-
Gute Idee! Habe jetzt mal einfach meinen code in das funktionierende beispielprogramm vom sdk eingesetzt. die gesammt struktur funktioniert und auch der driverDetails zeiger wird richtig gefüllt. Trotzdem schmiert das da ab. Habe den Entwickler angemailt und er will sich das mal ansehen.