[Gelöst] WAV/MP3 gleichzeitig wiedergeben
-
Hallo allerseits!
Ich hoffe der Beitrag ist hier richtig aufgehoben; bin noch blutiger C++ Anfänger (leicht oberhalb des Hello-World-Stadiums) und habe ein mittelschweres Problem:
Benötigt wird eine Art "Nippelboard" für WAV Sounds (besser, aber aufwendiger wäre MP3), welches man über die Tastatur bedient. Ich habe bereits ein Programm geschrieben, das mittels
PlaySound
genau die Aufgabe erfüllt, allerdings läuft alles über einen Kanal und beendet ggf. den vorhergehenden Sound. Teilweise ist dieses Verhalten erwünscht, es gibt aber ein Problem mit der Hintergrundmusik. Womit wir beim eigentlichen Problem wären: ich benötige exakt 2 Tonspuren: eine für die Musik und eine für sonstige Effekte. Ließe sich zwar über 2 Programminstanzen machen, ist aber unkomfortabel.Forum-Suche ergab folgendes
http://www.c-plusplus.net/forum/viewtopic-var-t-is-247918.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-252914.html
...hilft mir aber nicht so richtig weiter.Ich brauche möglichst schnell eine möglichst simple Lösung (zweiter Thread?) und bin für jede Hilfe dankbar!
-
char data[100]; sprintf_s(data,"open %s","c:/test.mp3"); mciSendString(data, NULL, 0, NULL); //Öffnen sprintf_s(data,"play %s from 0","c:/test.mp3"); mciSendString(data, NULL, 0, NULL); //Play // Hier natürlich ne Schleife oder Warten, sonst hört man nichts sprintf_s(data,"stop %s ","c:/test.mp3"); mciSendString(data, NULL, 0, NULL); //Stop (nur nötig, wenn manuell gestoppt wird) mciSendString("close all ", NULL, 0, NULL); //Alle schließen
Das Ganze für jede WAV/MP3.
So geht's synchron
-
Also ich hab da folgendes Problem ich benutze Visual Studio 2010 und hier ist erstmal mein Quellcode:
#include "stdafx.h"
#include <windows.h>
#include "mmsystem.h"int main()
{
[DllImport("winmm.dll")]
private static extern int mciSendString(string cmd, StringBuilder ret, int retLen, IntPtr hwnd);
mciSendString("open Laser.wav", NULL, 0, NULL);
mciSendString("play Laser.wav wait", NULL, 0, NULL);
mciSendString("close Laser.wav", NULL, 0, NULL);
}und ich krieg folgende Fehlermeldung:
Fehler 1 error C2337: "DllImport": Attribut wurde nicht gefunden. c:\users\jonathan\documents\visual studio 2010\projects\mci-test\mci-test\mci-test.cpp 13
Fehler 2 error C2143: Syntaxfehler: Es fehlt ';' vor 'private' c:\users\jonathan\documents\visual studio 2010\projects\mci-test\mci-test\mci-test.cpp 13
Fehler 3 error C2159: Mehr als eine Speicherklasse angegeben c:\users\jonathan\documents\visual studio 2010\projects\mci-test\mci-test\mci-test.cpp 13
Fehler 4 error C2664: 'mciSendStringW': Konvertierung des Parameters 1 von 'const char [15]' in 'LPCWSTR' nicht möglich c:\users\jonathan\documents\visual studio 2010\projects\mci-test\mci-test\mci-test.cpp 15
Fehler 5 error C2664: 'mciSendStringW': Konvertierung des Parameters 1 von 'const char [20]' in 'LPCWSTR' nicht möglich c:\users\jonathan\documents\visual studio 2010\projects\mci-test\mci-test\mci-test.cpp 16
Fehler 6 error C2664: 'mciSendStringW': Konvertierung des Parameters 1 von 'const char [16]' in 'LPCWSTR' nicht möglich c:\users\jonathan\documents\visual studio 2010\projects\mci-test\mci-test\mci-test.cpp 17was kann ich machen woran liegts?
-
Du solltest dich erst einmal in die Grundlagen der C++-Programmierung einarbeiten.
Welchen Sinn die Deklaration von mciSendString auch noch _innerhalb_ von main macht (nämlich keinen, außer dass dies ein Syntaxfehler ist) sollte dir erst einmal klar werden.
Außerdem wird niemals gegen die Dlls, sondern gegen die korrespondierenden Lib-Dateien gelinkt, zu allem Überfluss ist dein Versuch, was der Compiler zu Recht moniert, auch noch falsch.
Die Lib, die eingebunden werden muss, heißt Winmm.lib. Also entweder in den Projekteinstellungen->Linker->Input den Dateinamen hinzufügen oder ein passendes #pragma in den Code schreiben (ich persönlich würde Ersteres bevorzugen).