C++ : Audio im Hintergrund abspielen

Prestige__

Mitglied
Hallo erstmals.

Bei diesem Thema/Frage hier werde ich öfters verschiedene Fragen stellen die aber zu C++ gehören, und da ich mir dachte das dies besser ist als jeder Frage ein neues Thema zu erstellen, hab ich mich entschlossen diese einfach hier unter einem Hut unterzubringen.



Also meine erste Frage wäre:

Wie kann ich in C++ Audio-Dateien abspielen, sodass sich zb nicht Groove oder der MediaPlayer startet, sondern zB. so wie in Spielen im Hintergrund abgespielt wird. Also zB ich mache in einer Konsolenanwendung in C++ eine Art "Splash Screen" und während dieser gezeigt wird soll im Hintergrund eine kleine Melodie abgespielt werden oder ähnliches. Gibt es dafür einen Befehl wie 'playSound("welcome.mp3")' ?

MFG,
Marcel
 

Prestige__

Mitglied
Jap... .wav Dateien sind auch willkommen. Ich habe das jetzt mittlerweile geregelt aber es kommen so viele andere Fragen und Gedanken hoch.... drum werd ich die hier weiterführen.

Hie die Lösung für das "Audio Problem":

Also zuerst hab ich eine Art Nebenprozess gemacht. Also kurz: ein zweites Programm mit dem Auftrag die wav-Datei abzuspielen. Im Hauptprogramm sieht das so aus:

C++:
STARTUPINFO si = { sizeof(STARTUPINFO) };
                  PROCESS_INFORMATION pi;
                    if (!CreateProcessA(NULL, (char*)string("cmd /c boot.exe").c_str(), NULL, NULL, false, CREATE_UNICODE_ENVIRONMENT,NULL, NULL, &si, &pi))                   {
                        cout << GetLastError();
                   }

Also das einzige was hier dadruch passiert ist dass das Hauptprogramm ein zweites startet.... Und so sieht dann die "boot.exe" aus:

C++:
#include <iostream>
#include <tchar.h>
#include <Windows.h>
#include <unistd.h>
#include <stdlib.h>
#include <fstream>
#include <winbase.h>
#include <process.h>
#include <mmsystem.h>

using namespace std;



int main()
{



    FreeConsole();

    cout << "BYE" << endl;


    PlaySound(TEXT("boot_snd.wav"), NULL, SND_SYNC);



    STARTUPINFO si = { sizeof(STARTUPINFO) };
                  PROCESS_INFORMATION pi;
                    if (!CreateProcessA(NULL, (char*)string("start \\start-message.vbs").c_str(), NULL, NULL, false, CREATE_UNICODE_ENVIRONMENT,NULL, NULL, &si, &pi))                   {
                        cout << GetLastError();
                   }





    return 0;


}

Was hier passiert erkennt man hoffentlich ^^.... Also das 'FreeConsole();' sorgt dafür das sich die Konsole dannach verzieht, bei mir wird die nichtmal mehr angezeigt beim start.... nichtmal kurz. Dannach startet es die Audio-Datei, in meinem Fall die "boot_snd.wav" Datei. Dannach (kommt oft vor^^) soll die 'boot.exe' eine Willkommensnachricht starten. Die Aufgabe mit der Willkommensnachricht hatte bisher das Hauptprogramm gemacht. Da ich jetzt diesen kleinen "Nebenprozess" geschrieben habe hab ich mir gedacht diese eine Aufgabe auch noch 'boot.exe' zu übergeben ^^....

Diese Frage wäre erledigt. Ich habe aber auch schon eineige neue Fragen^^... Und zwar:


Kann man in C++ eine float-in Animation machen für Texte? Ich habe das so erstmals gemacht:
C++:
cout << endl;
cout << " F";
Sleep(200);
cout << "o";
Sleep(200);
cout << "r";
Sleep(200);
cout << " ";
Sleep(200);
cout << "t";
Sleep(200);
cout << "h";
Sleep(200);
cout << "o";
Sleep(200);
cout << "s";
Sleep(200);
cout << "e";
Sleep(200);
cout << " ";
Sleep(200);
cout << "w";
Sleep(200);
cout << "h";
Sleep(200);
cout << "o";
Sleep(200);
cout << " ";
Sleep(200);
cout << "c";
Sleep(200);
cout << "a";
Sleep(200);
cout << "r";
Sleep(200);
cout << "e" << endl;
Ich würde gerne mein Logo so wie beim Text einzeln auflisten/einblenden lassen, aber beim Logo wäre es etwas viel Arbeit, also bestimmt umständlich auf die weise wie ich es machen würde :/ . Ich hätte es so gemacht wie hier bei meinem Beispiel mit dem X:

C++:
    cout << " \033[31m\033[1mX";
    Sleep(25);
    cout << "                        X" << endl;
    Sleep(25);
    cout << "  X";
    Sleep(25);
    cout << "                      X" << endl;
    Sleep(25);
    cout << "   X";
    Sleep(25);
    cout << "                    X" << endl;
    Sleep(25);
    cout << "    X";
    Sleep(25);
    cout << "                  X" << endl;
    Sleep(25);
    cout << "     X";
    Sleep(25);
    cout << "                X" << endl;
    Sleep(25);
    cout << "      X";
    Sleep(25);
    cout << "              X" << endl;
    Sleep(25);
    cout << "       X";
    Sleep(25);
    cout << "            X" << endl;
    Sleep(25);
    cout << "        X";
    Sleep(25);
    cout << "          X" << endl;
    Sleep(25);
    cout << "         X";
    Sleep(25);
    cout << "        X" << endl;
    Sleep(25);
    cout << "          X";
    Sleep(25);
    cout << "      X" << endl;
    Sleep(25);
    cout << "           X";
    Sleep(25);
    cout << "    X" << endl;
    Sleep(25);
    cout << "            X";
    Sleep(25);
    cout << "  X" << endl;
    Sleep(25);
    cout << "             XX" << endl;
    Sleep(25);
    cout << "            X";
    Sleep(25);
    cout << "  X" << endl;
    Sleep(25);
    cout << "           X";
    Sleep(25);
    cout << "    X" << endl;
    Sleep(25);
    cout << "          X";
    Sleep(25);
    cout << "      X" << endl;
    Sleep(25);
    cout << "         X";
    Sleep(25);
    cout << "        X" << endl;
    Sleep(25);
    cout << "        X";
    Sleep(25);
    cout << "          X" << endl;
    Sleep(25);
    cout << "       X";
    Sleep(25);
    cout << "            X" << endl;
    Sleep(25);
    cout << "      X";
    Sleep(25);
    cout << "              X" << endl;
    Sleep(25);
    cout << "     X";
    Sleep(25);
    cout << "                X" << endl;
    Sleep(25);
    cout << "    X";
    Sleep(25);
    cout << "                  X" << endl;
    Sleep(25);
    cout << "   X";
    Sleep(25);
    cout << "                    X" << endl;
    Sleep(25);
    cout << "  X";
    Sleep(25);
    cout << "                      X" << endl;
    Sleep(25);
    cout << " X";
    Sleep(25);
    cout << "                        X" << endl;

So würde das Logo aussehen in der Konsole, von dem ich die Buchstaben einfliegen lassen will (also eine Art "Eintipp" Animation:

C++:
Sleep(200);
cout << " #####################################################################################################################" << endl;
Sleep(200);
cout << " #####################################################################################################################" << endl;
Sleep(200);
cout << " ##########                                                                                                         ##" << endl;
Sleep(200);
cout << " #########                                                                                                          ##" << endl;
Sleep(200);
cout << " ########                                                                                                           ##" << endl;
Sleep(200);
cout << " #######                                                                                                            ##" << endl;
Sleep(200);
cout << " ######       A        DDD       SSSSS     OOOOO     L       EEEEE  W               W       A       RRRR   EEEEE    ##" << endl;
Sleep(200);
cout << " #####       A A       D  DD    S         O     O    L       E       W             W       A A      R   R  E        ##" << endl;
Sleep(200);
cout << " ####       A   A      D    D    SSSSS   O       O   L       EEE      W     W     W       A   A     RRRR   EEE      ##" << endl;
Sleep(200);
cout << " ###       AAAAAAA     D    D    SSSSS   O       O   L       EEE       W   W W   W       AAAAAAA    R R    EEE      ##" << endl;
Sleep(200);
cout << " ##       A       A    D  DD          S   O     O    L       E          W W   W W       A       A   R  R   E        ##" << endl;
Sleep(200);
cout << " ##      A         A   DDD       SSSSS     OOOOO     LLLLLL  EEEEE       W     W       A         A  R   R  EEEEE    ##" << endl;
Sleep(200);
cout << " ##                                                                                                                 ##" << endl;
Sleep(200);
cout << " ##                                                                                                                 ##" << endl;
Sleep(200);
cout << " ##                                                                                                                 ##" << endl;
Sleep(200);
cout << " #####################################################################################################################" << endl;
Sleep(200);
cout << " #####################################################################################################################" << endl;
 

Technipion

Erfahrenes Mitglied
Hallo Prestige__,
ui ui ui, da hast du ja etwas zusammengebastelt. Hoffen wir mal, dass du bei den ganzen Prozessen und Unterprogrammen den Überblick behältst. Gab es denn einen Grund, warum du nicht alles in einem zentralen Hauptprogramm haben wolltest?

Ich würde gerne mein Logo so wie beim Text einzeln auflisten/einblenden lassen, aber beim Logo wäre es etwas viel Arbeit, also bestimmt umständlich auf die weise wie ich es machen würde :/ . Ich hätte es so gemacht wie hier bei meinem Beispiel mit dem X:
Ändert sich das Logo denn? Ansonsten würde es sich hier anbieten, das Logo in einer Datei abzuspeichern, und diese dann im Hauptprogramm einfach "animiert" ausgeben zu lassen. Hast du schon Erfahrungen mit Dateien?

Gruß Technipion
 

Prestige__

Mitglied
Hallo Prestige__,
ui ui ui, da hast du ja etwas zusammengebastelt. Hoffen wir mal, dass du bei den ganzen Prozessen und Unterprogrammen den Überblick behältst. Gab es denn einen Grund, warum du nicht alles in einem zentralen Hauptprogramm haben wolltest?
Also ich hab vor einige Nebenprozesse du erstellen, da ich nicht ganz sicher bin wie ich die ganzen 'if (number ==1)' mehrmals in einem Programm verwenden kann oder soll. Also im Hauptprogramm hat man gewisse Funktionen zur Verfügung die sich mit 1, 2, 3 , 4, ... auswählen lassen. Wenn man zB 1 drückt und Enter kommt man zum 'Web Opener", ein neuer Prozess der sich dann im vorhandenen Konsolenfenster starten soll also das is so als würde man in die ganz normale cmd.exe den Pfad zur Datei eingeben und die Datei startet in der cmd, so wie wenn man in Linux ein Script für das Terminal startet. Zuerst hatte ich auch alles im Hauptprogramm vereint, was aber dann zu einem Problem für das hinzufügen neuer Funktionen bzw für die Listung darstellte.

Also den Überblick hab ich noch^^. Manchmal verlier ich ihn aber dann setzt ich mich immer hin und schaue alles an und geh alles durch und dann fällt mir auch wieder alles ein. Ich notier mir auch immer alles und denk sehr viel drüber nach.


Ändert sich das Logo denn? Ansonsten würde es sich hier anbieten, das Logo in einer Datei abzuspeichern, und diese dann im Hauptprogramm einfach "animiert" ausgeben zu lassen. Hast du schon Erfahrungen mit Dateien?
Was meinst du genau mit dem ob sich das Logo ändert? Das Logo sieht ja vom Code her so aus:
C++:
cout << " #####################################################################################################################" << endl;
Sleep(150);
cout << " #####################################################################################################################" << endl;
Sleep(150);
cout << " ##########                                                                                                         ##" << endl;
Sleep(150);
cout << " #########                                                                                                          ##" << endl;
Sleep(150);
cout << " ########                                                                                                           ##" << endl;
Sleep(150);
cout << " #######                                                                                                            ##" << endl;
Sleep(150);
cout << " ######       A        DDD       SSSSS     OOOOO     L       EEEEE  W               W       A       RRRR   EEEEE    ##" << endl;
Sleep(150);
cout << " #####       A A       D  DD    S         O     O    L       E       W             W       A A      R   R  E        ##" << endl;
Sleep(150);
cout << " ####       A   A      D    D    SSSSS   O       O   L       EEE      W     W     W       A   A     RRRR   EEE      ##" << endl;
Sleep(150);
cout << " ###       AAAAAAA     D    D    SSSSS   O       O   L       EEE       W   W W   W       AAAAAAA    R R    EEE      ##" << endl;
Sleep(150);
cout << " ##       A       A    D  DD          S   O     O    L       E          W W   W W       A       A   R  R   E        ##" << endl;
Sleep(150);
cout << " ##      A         A   DDD       SSSSS     OOOOO     LLLLLL  EEEEE       W     W       A         A  R   R  EEEEE    ##" << endl;
Sleep(150);
cout << " ##                                                                                                                 ##" << endl;
Sleep(150);
cout << " ##                                                                                                                 ##" << endl;
Sleep(150);
cout << " ##                                                                                                                 ##" << endl;
Sleep(150);
cout << " #####################################################################################################################" << endl;
Sleep(150);
cout << " #####################################################################################################################" << endl;
In der cmd oder hat in der Konsole (eigendlich das gleiche) sieht es so aus (evt hier nicht richtig formatiert):
Code:
 #####################################################################################################################
 #####################################################################################################################
 ##########                                                                                                         ##
 #########                                                                                                          ##
 ########                                                                                                           ##
 #######                                                                                                            ##
 ######       A        DDD       SSSSS     OOOOO     L       EEEEE  W               W       A       RRRR   EEEEE    ##
 #####       A A       D  DD    S         O     O    L       E       W             W       A A      R   R  E        ##
 ####       A   A      D    D    SSSSS   O       O   L       EEE      W     W     W       A   A     RRRR   EEE      ##
 ###       AAAAAAA     D    D    SSSSS   O       O   L       EEE       W   W W   W       AAAAAAA    R R    EEE      ##
 ##       A       A    D  DD          S   O     O    L       E          W W   W W       A       A   R  R   E        ##
 ##      A         A   DDD       SSSSS     OOOOO     LLLLLL  EEEEE       W     W       A         A  R   R  EEEEE    ##
 ##                                                                                                                 ##
 ##                                                                                                                 ##
 ##                                                                                                                 ##
 #####################################################################################################################
 #####################################################################################################################

 For those who care

Was das mit dem Dateien angeht... Ich weiß wie man Dateien einliest und Dinge wie zb Strings in Dateien speichert und wieder ausliest, falls du das meint.
 

sheel

I love Asm
Hi

zu der Sache mit den Prozessen bzw. dem hinzufügen neuer Funktionen, wenn es da ein Problem gab kann man das sicher lösen (wenn man den Code sieht) ... langfristig sicher übersichtlicher als viele Einzelprogramme.

Das Logo wird ja von oben nach unten zeilenweise nach und nach angezeigt. Statt so direkte Codeanweisungen könntest du eben das gesamte Logo in einer Datei haben, und dann in einer kleinen Schleife: Zeile einlesen und ausgeben, sleep, nächste Zeile, sleep, usw.
 

Prestige__

Mitglied
zu der Sache mit den Prozessen bzw. dem hinzufügen neuer Funktionen, wenn es da ein Problem gab kann man das sicher lösen (wenn man den Code sieht) ... langfristig sicher übersichtlicher als viele Einzelprogramme.
Das 'Problem' war eben mehrere IF (nubmer ==1) zb zu verwenden, also das man öfters die 1 verwenden kann, und dennoch die verschiedenen funktionen IN einer if funktion verwenden. Zb so:

C++:
if (number ==1) {
      cout << "Hey... such dir was aus" << endl;
      if (number==1) {
              cout << "Zweite if funktion im ersten if 1" << endl;
}
Das hab ich jetzt nur mal als beispiel schnell hingeklascht, aber so hätte ich mir das vorgestellt
 

Endurion

Erfahrenes Mitglied
Bleib um Himmels Willen bei einem Einzelprozess. Da verzettelt man sich ganz ganz schnell.

PlaySound hat übrigens auch ein SND_ASYNC-Flag, damit spielt es den einen Sound dann im Hintergrund.