Mit FMOD Datei abspielen
-
Hallo!
Ich möchte gerne mehrere Musikdateien gleichzeitig, aber mit verschiedenen Lautstärken abspielen lassen. Da das über die Funktionen des TMediaPlayers hinaus geht, habe ich gesucht und bin bei fmod fündig geworden.
Leider bin ich ab dem Punkt nicht weiter gekommen. Ich habe die fmodex_bc.lib und die fmod.hpp dem Projekt hinzugefügt und versucht, ein bisschen Code zu kopieren, aber beim Versuch zu compilieren sagt er "unresolved external".
Die Bitte ist recht unsportlich, aber könnte mir jemand entweder ein Quelle nennen, wo ich ein funktionierendes Programm auf BCB-Basis finde, aus dem ich das Prinzip abschauen kann oder mir sagen, was ich tun muss, um eine Datei abzuspielen (den Rest bastel ich dann selbst zusammen)?
Das wäre sehr nett!
Vielen Dank,
Nicole
-
Hallo
ich vermute du must in dem BCB-Projekt noch den korrekten Pfad zu den beiden fmod-Dateien setzen.
Dazu must du unter Projekt/Optionen.../Verzeichnisse und Bedingungen in der Liste Include-Pfad die Pfad zur hpp und in Biblithekspfad den zur lib anfügen.Das Eindinden der Compiler-unabhängigen Bibliothel ist übrigens nicht BCB-spezifisch.
bis bald
akari
-
Suchfunktion benutzen! Z.B.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-79588-and-highlight-is-*fmod*.html
-
Hallo und vielen Dank für die Antworten!
Gesucht hatte ich bereits, allerdings nur nach "fmod", was keine Ergebnisse brachte. "fmod*" hingegen schon. Ich verstehe nicht warum, verstehe jetzt aber, warum das Sternchen "Joker" genannt wird.
Dann habe ich das Beispiel von barnie (http://www.c-plusplus.net/forum/viewtopic-var-t-is-79588-and-highlight-is-fmod%2A.html)
nachgebaut und seitdem kommt nur noch die Fehlermeldung "[C++ Fehler] Unit1.cpp(22): E2268 Aufruf der undefinierten Funktion 'FSOUND_Init'".
akaris Tipps habe ich befolgt und dann habe ich munter Dateien in Ordner kopiert und wieder gelöscht und Dateipfade geändert, aber immer mit dem gleichen, unveränderbaren Ergebnis.
Mein derzeitiger Stand ist:#include "C:\Programme\FMOD SoundSystem\FMOD Programmers API\api\inc\fmod.hpp" #include "C:\Programme\FMOD SoundSystem\FMOD Programmers API\api\inc\fmod_errors.h"Dem Projekt habe ich die Dateien fmod.hpp, fmod_errors.h, fmodex_bc.lib und die fmodex.dll hinzugefügt. Die Dateien liegen alle im Installationsverzeichnis von fmod.
Es wäre wahnsinnig nett, wenn mir jemand sagen könnte, was ich wohin kopieren muß, damit es funktioniert.
Nicole (2)
P.S. Nach "undefinierten Funktion" und "undefinierten Funktion*" habe ich bereits ohne Ergebnis gesucht.
-
Du brauchst fmod.h.
-
Hatte ich bereits ausprobiert. Bringt leider die gleiche Fehlermeldung. Ich habe zuerst das Beispiel von barnie nachgebaut und dann angefangen, nach dem Try&Error-Prinzip kleine Änderungen auszuprobieren. Bis jetzt stehe ich aber noch bei Error.
Mich beschleicht zwar langsam das Gefühl, das das nichts mehr wird, aber nur um völlig sicher zu gehen, dass es nicht doch am Code liegt, folgt meine Umsetzung://--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "C:\Programme\FMOD SoundSystem\FMOD Programmers API\api\inc\fmod.h" #include "C:\Programme\FMOD SoundSystem\FMOD Programmers API\api\inc\fmod_errors.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; #define NUMCHANNELS 128 int outputfreq=44100; char Laufwerk; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Laufwerk='D'; FSOUND_Init(outputfreq, NUMCHANNELS, FSOUND_INIT_GLOBALFOCUS); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int iMaxTrack=FSOUND_CD_GetNumTracks(Laufwerk); //Für Anzeige: Zahl der Tracks iCurrentTrack=1; FSOUND_CD_Play(Laufwerk, iCurrenttrack); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { FSOUIND_CD_Stop(Laufwerk); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { if (FSOUND_CD_Getpaused(Laufwerk)) { FSOUND_CD_SetPaused(Laufwerk, false); } else { FSOUND_CD_SetPaused(Laufwerk, true); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { FSOUND_CD_Eject(Laufwerk); } //---------------------------------------------------------------------------Und das hier sind die Fehler, die angezeigt werden:
[C++ Fehler] Unit1.cpp(22): E2268 Aufruf der undefinierten Funktion 'FSOUND_Init'
[C++ Fehler] Unit1.cpp(22): E2451 Undefiniertes Symbol 'FSOUND_INIT_GLOBALFOCUS'
[C++ Fehler] Unit1.cpp(28): E2268 Aufruf der undefinierten Funktion 'FSOUND_CD_GetNumTracks'
[C++ Fehler] Unit1.cpp(29): E2451 Undefiniertes Symbol 'iCurrentTrack'
[C++ Fehler] Unit1.cpp(30): E2268 Aufruf der undefinierten Funktion 'FSOUND_CD_Play'
[C++ Fehler] Unit1.cpp(30): E2451 Undefiniertes Symbol 'iCurrenttrack'
[C++ Warnung] Unit1.cpp(31): W8004 'iMaxTrack' wurde ein Wert zugewiesen, der nie verwendet wird
[C++ Fehler] Unit1.cpp(35): E2268 Aufruf der undefinierten Funktion 'FSOUIND_CD_Stop'
[C++ Fehler] Unit1.cpp(40): E2268 Aufruf der undefinierten Funktion 'FSOUND_CD_Getpaused'
[C++ Fehler] Unit1.cpp(42): E2268 Aufruf der undefinierten Funktion 'FSOUND_CD_SetPaused'
[C++ Fehler] Unit1.cpp(52): E2268 Aufruf der undefinierten Funktion 'FSOUND_CD_Eject'Ein schönes Wochenende!
Nicole (2)
-
Das Beispiel ist für FMOD3 geschrieben, da hat sich gegenüber dem offenbar von dir verwendeten FMODEx4 einiges geändert.
Darauf zumindest lässt ein Blick in die Hilfe zu FMODEx4 schliessen, wo man unter anderem auch einen extra Abschnitt Tutorials inklusive Code-Beispielen findet.PS:
Der Code in der Hilfe verwendet das C++-Interface (aus fmod.hpp), welches sich im BCB nicht einsetzen lässt. Hier ist man auf das syntaktisch etwas abweichende C-Interface aus fmod.h angewiesen, glücklicherweise wird das aber auch in den zahlreichen Beispielprogrammen im examples-Ordner der FMODEx-Installation verwendet.
-
Ich muß zugeben, dass ich es mir recht leicht gemacht habe: Ich habe einfach einen alte Version von FMOD von der Seite runter geladen. Aber es funktioniert!
Vielen Dank Jansen!
Nur für den Fall, dass nach mir noch jemand jemals ein Problem mit FMOD3 (!!!) haben sollte:
fmod.h und
fmod_errors.h
ins Projekt einbinden, den korrekten Pfad angeben, die fmodbc.lib einbinden und die fmod.dll in den Projektordner kopieren.
Da in dem Beispiel von barnie ein paar Tippfehler waren, folgt hier noch mal der mit "FMOD 3.74 Programmers API" funktionierende Code://--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "C:\Pfad\fmod.h" //Pfad anpassen #include "C:\Pfad\fmod_errors.h" //Pfad anpassen //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; #define NUMCHANNELS 128 int outputfreq=44100; char Laufwerk; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Laufwerk='D'; FSOUND_Init(outputfreq, NUMCHANNELS, FSOUND_INIT_GLOBALFOCUS); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int iMaxTrack=FSOUND_CD_GetNumTracks(Laufwerk); //Für Anzeige: Zahl der Tracks int iCurrentTrack=1; FSOUND_CD_Play(Laufwerk, iCurrentTrack); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { FSOUND_CD_Stop(Laufwerk); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { if (FSOUND_CD_GetPaused(Laufwerk)) { FSOUND_CD_SetPaused(Laufwerk, false); } else { FSOUND_CD_SetPaused(Laufwerk, true); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { FSOUND_CD_OpenTray(Laufwerk,1); } //---------------------------------------------------------------------------