Warum, warum nur funktioniert der Sound nicht im CBuilder(6)...



  • Ihr Lieben,

    Warum, warum nur funktioniert der Sound nicht im CBuilder(6) ????????????????
    Egal, was ich verwende ...

    -DirectSound
    -CWave
    -MCI
    -mmSystem

    Es bringt immer das gleiche Resultat : Unresolved... ( ..irgendwas..)
    Als Beispiel :

    [Linker Fehler] Unresolved external 'DirectSoundCreate8' referenced from C:\CBUILDER6\TEST\UNIT1.OBJ

    Was ist denn da los ????? Was fehlt denn da ??????
    Hat denn noch nie jemand von Euch Sound mit dem Builder programmiert ?

    Was braucht der denn noch ? Eine .h, eine .lib, eine .dll, oder muss ich noch ein Adjust vornehmen, noch etwas prä-einstellen ?????

    Gruß



  • Der C++ Builder 6 ist von 2002, hat also das Windows 2000 SDK (oder ein sehr frühes von XP), neuere APIs lassen sich da nicht so einfach verwenden.

    Irgendwas mit Direct... und Version 8 im Namen gab es damals sicher noch nicht, CWave klingt vom Namen her sehr nach Visual C++.

    Die alten Multimediasachen sollten aber gehen. Im alten "C++ Builder 5 Developers Guide" werden die mci*- und die AVIFile*-Funktionen verwendet. Eventuell sind die Beispiele zu neu, wir sind inzwischen sieben C++ Builder weiter.



  • "Unresolved external" deutet i.d.R. auf eine nicht ins Projekt eingebundene Bibliothek hin. Siehe den FAQ-Eintrag im Abschnitt 'Linker'.

    DirectX wird ebenfalls in der FAQ behandelt, und zum Stichpunkt MCI liefert die Suchfunktion etliche Threads, u.a. den hier: http://www.c-plusplus.net/forum/67527



  • Jansen schrieb:

    DirectX wird ebenfalls in der FAQ behandelt,

    Ich sehe da gerade, DirectX8 gab es schon zu Zeiten des BCB5, da habe ich mich wohl etwas verschätzt. 🙄

    Die haben also 12 Jahre von DX8 bis DX11 gebraucht. Ok, dann sollte das auch im BCB6 gehen.



  • ...dann erhalte ich folgende Fehlermeldung :

    Laut M$ sollte man mit
    Dsound.h und
    Dsound.lib
    auskommen.

    Das Ergebnis ist diese Meldung :

    Der Prozedureinsprungpunkt "OpenVxDHandle" wurde in der DLL "KERNEL32.dll" nicht gefunden.

    na ja, ... und nu ... ???????



  • Elfe schrieb:

    und nu ...

    und nu passen Betriebssystemversion und oder installierte DirectX Version nicht zu dem was du da tun willst.



  • Hi,
    ich spiele Sounds seit dem CBuilder5 wie folgt ab:

    Es muss eingebunden werden:

    #include <Mmsystem.h>

    Abgespielt wird mit...

    AnsiString Sounddatei = ExtractFilePath(ParamStr(0)) + "\\Sounds\\CAMERA.wav";
    sndPlaySound(Sounddatei.c_str(),SND_SYNC);
    

    ..wobei gilt, dass im Projektpfad ein Unterverzeichnis "Sounds" vorhanden ist. In diesem Verzeichnis wird die *.wav, *.mp3 abgelegt.

    Gruß
    Torsten



  • Vorwort:
    Habe den Rechner defragmentiert und CBuilder neu installiert. Jetzt erhalte ich Kontakt zu DXSound. ( ... komisch, aber nu ... )

    Zum besseren Verständnis : > Was ich möchte :

    Mit DirectSound eine XXXXXX.wav einlesen.
    Dann (zB.) die Lautstärke der Datei verändern.
    Das Resultat wieder als Ausgabe.wav abspeichern.

    Erreicht habe ich :

    -DirectSoundCreate8________erfolgreich

    -CoInitialize_______________erfolgreich
    -CoCreateInstance_________erfolgreich
    -IDirectSound->Initialize_____erfolgreich
    -QueryInterface____________erfolgreich

    -CreateSoundBuffer_________fehlgeschlagen X 🙄

    -CreateBasicBuffer_________erfolgreich

    und nun soll man eine Wav-Datei einlesen, steht in der DX-Doku :

    Laden Sie wave-Daten in den Puffer. Zitat -> "Read data from a WAV file or resource into a private buffer." <- Das ist alles.

    Ja,... aber wiiiiiiiieeeeeeee denn ???? Wiiiiiieeeee macht man das ??? Das ist doch gerade die Frage, um die es geht!!!!!!!!!!!!!!!!!!!!

    Dazu steht wieder nichts drin. Das ist doch ...xxx...xxx... !!!!!!!
    Dabei würde ein einziges funktionierendes Beispiel genügen, an dem man sich orientieren könnte... [anstatt mit 20.000 M-Worten nichts zu sagen] [ Aber wenn noch nicht mal die Beispiele von M funktionieren............woran soll man sich dann noch orientieren, geschweige denn wovon lernen ??? ]

    soweit mein Problem.

    Gruß



  • Hi,
    das liegt nicht zwingend am BCB. Welches OS verwendest du?

    <CreateSoundBuffer> funktioniert mit DX8 (bzw. die SDK8) nicht mehr ab Vista, sondern nur bis DX9 -> WinXP.

    mfg



  • OS ?? Was ist das ??

    Habe
    BCB6
    und
    DX8 bzw 9 [ das DX8 DS-8 bleibt ja ]
    auf WinXP...

    Gruß



  • OS = operating system = Betriebssystem
    Hast du ja aber schon genannt.



  • Hm, ok, vielleicht solltest du mal ein bißchen Code hier posten.
    Zumindest unter WinXP sollte CreateSoundBuffer funktionieren.

    Was ist der Returncode?

    mfg



  • Elfe schrieb:

    Vorwort:
    ....

    Erreicht habe ich :

    -DirectSoundCreate8________erfolgreich

    -CoInitialize_______________erfolgreich
    -CoCreateInstance_________erfolgreich
    -IDirectSound->Initialize_____erfolgreich
    -QueryInterface____________erfolgreich

    -CreateSoundBuffer_________fehlgeschlagen X 🙄

    -CreateBasicBuffer_________erfolgreich

    ...

    P.S: CoInitialize sollte vor DirectSoundCreate erfolgen.

    mfg



  • Hallo, Ihr da draußen,

    habs probiert, das Problem bleibt.

    ISnd- Create________geht
    ISnd- CaptureCreate _geht

    aber

    Snd- BufferCreate________geht nicht
    und
    Snd- CaptureBufferCreate _geht nicht

    Das finde ich komisch. Ich komme an die Schnittstelle dran,
    aber machen kann ich nichts damit. 🙄
    Und ohne Buffer kann ich ja gar nichts machen.

    [ getestet hab ich mit if(FAILED( etc. ... ]

    Gruß

    frohe Weihnacht an Alle.....



  • Hi,
    wie gesagt ohne Code und ohne genauen ReturnCode, also:

    Return code
    DSERR_ALLOCATED
    DSERR_BADFORMAT
    DSERR_BUFFERTOOSMALL
    DSERR_CONTROLUNAVAIL
    DSERR_DS8_REQUIRED
    DSERR_INVALIDCALL
    DSERR_INVALIDPARAM
    DSERR_NOAGGREGATION
    DSERR_OUTOFMEMORY
    DSERR_UNINITIALIZED
    DSERR_UNSUPPORTED

    Wird man dir schwer helfen können. Nur "geht nicht" ist eine nicht so gute Beschreibung des Problems.

    mfg und auch frohe Weihnachten 😉



  • Wie komme ich an diesen "Return-Code" denn dran ? Das kenne ich nicht.....
    Ich kenne bisher nur den bool if (FAILED(...

    Der Code ist halt genau der, der in der DX-Doku steht
    ( müsste ja eigentlich jeder von euch haben ... )
    aber wenns sein muss, schreib ich den auch nochmal hier hin...

    [... wollte halt nur nicht sinnlos etwas hinschreiben, was ohnehin
    jeder kennt ... ]
    -> siehe : Regeln ... nur den notwendigen und sinnvollen Code angeben.

    Gruß



  • Elfe schrieb:

    Wie komme ich an diesen "Return-Code" denn dran ? Das kenne ich nicht.....

    Diese Funktionen geben doch alle etwas vom Typ HRESULT zurück.

    FAILED und SUCCEEDED test doch nur, ob der Wert größer oder kleiner 0 ist.

    #define FAILED(hr) (((HRESULT)(hr)) < 0)
    #define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
    

    lies mal

    http://msdn.microsoft.com/de-de/library/windows/desktop/ms679692%28v=vs.85%29.aspx
    usw.



  • Hallo nn,

    Der angegebene Link tuts nicht -> ... Die Seite msdn.microsoft.com wurde nicht gefunden. ...

    Ja, eine Zahl bekomme ich auch als Ergebnis. Aber was steckt dahinter ?
    Etwa 101, oder 107, 98 oder 96.... Aber das ist ja kein Return-Code.

    Wie erhalte ich aus hr einen Return-Code-Text wie DSERR_ALLOCATED ?
    Nur "hr" reicht ja nicht.

    Werd mal under M$ nachsehen, ob ich da was finden kann....

    Gruß



  • Elfe schrieb:

    Der angegebene Link tuts nicht -> ... Die Seite msdn.microsoft.com wurde nicht gefunden. ...

    Geht, habs gerade probliert. Firefox und IE.

    Elfe schrieb:

    Wie erhalte ich aus hr einen Return-Code-Text wie DSERR_ALLOCATED ?

    Ob man ohne Suchen dazu Text kriegt, weiß ich nicht. Die Makros zum Zerlegen der Zahlencodes stehen in dem Link.

    Wie die hr Nummern aufgebaut sind, wird auch in dem Link erklärt. Siehe "Structure of COM Error Codes".



  • Hallo nn, ( vorab -> Danke für Deine Mühe )
    Das hier habe ich herausgefunden ->

    Die DxErr9.lib muss eine ganz bestimmte sein.(Es gibt mehrere Versionen)
    Außerdem benötigt sie noch die DXErr9ab.dll
    sonst funktioniert der Return-Code nicht.

    Damit erhalte ich nun folgende Ergebnisse :

    Eingabe :_____________________Return-Code :

    DS-Create____________________Unknown
    CreateSoundBuffer_____________ERROR_EXCL_SEM_ALREADY_OWNED

    DS-CaptureCreate______________ERROR_INVALID_PASSWORD (->obwohl als erfolgreich gemeldet)
    CreateCaptureBuffer____________ERROR_DISK_CHANGE

    Das ist doch schonmal was. Kann man damit etwas anfangen ?

    Gruß


Anmelden zum Antworten