sound abspielen



  • oke, das hab ich auch probiert, ich habe das winmm.lib reingeschrieben und mein code lautet:

    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>

    #include <mmsystem.h>
    #pragma comment(lib,"winmm.lib")

    int main()
    {
    int i;
    i=0;
    i= PlaySoundA("D:\\6. Semester\\Projekt\\Mein Projekt\\Programmierung\\TEST\\TEST\\tetris_melodie.wav", NULL, SND_ASYNC | SND_FILENAME | SND_NODEFAULT);
    i=5+1;

    }

    aber es geht trotzdem nicht !!!



  • Ich hab ne winapi geschrieben mit grundgerüst und Hinterher bei der Callback Funktion PlaySoundA abspielen lassen

    Als ich dein Codeblock ausgeführt habe waren nur fehler da ...
    Versuch erstmal ein Normales WinApi Grundgerüst zu bauen und dann PlaySound einzubauen..

    Was willst du denn mit deinem Programm bezwecken?



  • oke, also ich habe ein Programm dass durchläuft und an einer bestimmten Stelle soll ein wave-sound abgespielt werden, aber das Programm soll dann während dem spiel weiterlaufen, und sobald man an einer bestimmten stelle im Programm ist, soll die wave-datei stoppen!



  • Da past am besten ne Library, z.B eine die Extra Audio Funktionen besitzt
    [url] http://www.fmod.org/index.php/download[/url]

    Die Anleitung zum Installieren und den Funktionen gibt es hier:
    http://www.gamedev.net/page/resources/_/reference/programming/sweet-snippets/a-quick-guide-to-fmod-r2098

    🤡



  • oke aber was soll ich den da runterladen, da gibt es so viele verschiedene fmod sachen, ich brauch ja eigentlich nur die header-datei und die lib oder ?

    Danke
    mfg aqua5748



  • Alternativ kannst Du es auch mit einem thread machen in dem Du es laufen lässt, und bei bedarf beendest.



  • sorry, aber so gut kenne ich mit jetzt noch nicht aus, das was du jetzt gerade geschrieben hast, damit kann ich leider nichts anfangen!!!

    Danke
    aqua5748



  • Wenn du willst kannst du es mal mit meiner PlaySound Klasse versuchen die ich vor Ewigkeiten geschrieben hab (eben noch einmal gestestet und funktioniert alles wunderbar):

    CSimpleSound.h

    #ifndef HEADER_CSIMPLESOUND_H
    #define HEADER_CSIMPLESOUND_H
    
    /*
    	Written by Listing 24.08.2011
    	Feel free to use for any purpose
    	There is no warranty of any kind
    */
    
    #include <windows.h>
    #pragma comment (lib, "Winmm.lib")
    
    enum PlaybackIdentifier
    {
    	PLAYBACK_START = 0,
    	PLAYBACK_STOP = 1
    };
    
    class CSimpleSound
    {
    public:
    	CSimpleSound(char * cFilename);
    	~CSimpleSound();
    
    	void Play(PlaybackIdentifier ePlay);
    
    protected:
    	char * GetFileName() {return m_Filename;}
    	static void PlaybackThread(CSimpleSound * cInstance);
    
    private:
    	char m_Filename[MAX_PATH];
    	HANDLE m_PlaybackThread;
    	PlaybackIdentifier m_Playback;
    };
    
    #endif
    

    CSimpleSound.cpp

    #include "CSimpleSound.h"
    
    CSimpleSound::CSimpleSound(char * cFilename)
    {
    	strncpy(m_Filename,cFilename,sizeof(m_Filename)/sizeof(char));
    	m_PlaybackThread = NULL;
    }
    
    CSimpleSound::~CSimpleSound()
    {
    	this->Play(PLAYBACK_STOP);
    }
    
    void CSimpleSound::Play(PlaybackIdentifier ePlay)
    {
    	m_Playback = ePlay;
    
    	if(m_PlaybackThread)
    	{
    		DWORD dwExitCode = NULL;
    		GetExitCodeThread(m_PlaybackThread,&dwExitCode);
    		if(dwExitCode != STILL_ACTIVE)
    		{
    			CloseHandle(m_PlaybackThread);
    			m_PlaybackThread = NULL;
    		}
    	}	
    
    	if(!m_PlaybackThread && ePlay==PLAYBACK_START)
    		m_PlaybackThread = CreateThread(0,0,reinterpret_cast<LPTHREAD_START_ROUTINE>(CSimpleSound::PlaybackThread),reinterpret_cast<LPVOID>(this),0,0);	
    }
    
    void CSimpleSound::PlaybackThread(CSimpleSound * cInstance)
    {
    	PlaySoundA(cInstance->GetFileName(), NULL,SND_ASYNC);
    
    	while(cInstance->m_Playback != PLAYBACK_STOP)
    		Sleep(5);
    
    	PlaySoundA(NULL, NULL, SND_PURGE);
    }
    

    Ein kleines, vollständiges Beispiel:

    #include "CSimpleSound.h"
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	CSimpleSound MeinSound("C:\\PumpAbDasBier.wav");
    	for(unsigned int i = 0; i < 2; ++i)
    	{
    		cout << "Wiedergabe wird gestartet!" << endl;
    		MeinSound.Play(PLAYBACK_START); //Starte die Wiedergabe
    		cout << "Bitte druecken Sie eine Taste um die Wiedergabe zu beenden!" << endl;
    		system("Pause");
    		MeinSound.Play(PLAYBACK_STOP);
    		system("Pause");
    	}
    
    	system("Pause");
    }
    

  • Mod

    @listing: Nurmalso ein paar Dinge die ich nicht OK finde:
    1. Warum ein anderer Thread wenn PlaySound sowieso schon asynchron abspielen kann?
    2. Warum ein Sleep in dem Thread und kein Event un WaitForSingleObject
    3. Warum CreateThread in einem Programm das dir CRT benutzt und nicht _beginthread?
    http://blog.m-ri.de/index.php/2007/11/28/createthread-und-die-crt/



  • @Martin:
    Vielen Dank für die Hinweise, 2. und 3. waren mir noch garnicht klar. Wenn es sowieso asynchron geht sollte der Thread-ersteller meinen Beitrag wohl ignorieren 😃



  • oke, also funktioniert jetzt der Quellcode nicht richtig oder wie ?



  • aqua5748 schrieb:

    oke, also funktioniert jetzt der Quellcode nicht richtig oder wie ?

    Doch er funktioniert, aber er hat ein paar programmiertechnische schönheitsfehler und ist überflüssig weil wenn man asynchron abspielt sollte sowieso das gleiche dabei rauskommen.



  • ja oke, und wie würde das aussehen wenn ich es asynchron abspiele ? kannst du mir vielleicht mal ein Beispiel zeigen ?

    Danke
    mfg aqua5748


  • Mod

    aqua5748 schrieb:

    ja oke, und wie würde das aussehen wenn ich es asynchron abspiele ? kannst du mir vielleicht mal ein Beispiel zeigen ?

    Unfassbar 👎
    Ist Dir nicht das Flag SND_ASYNCH aufgefallen?
    Lies doch einfach die PlaySound Doku...



  • ja doch doch, wie im thread schon beschrieben, habe ich es damit auch schon versucht, aber es kommt einfach kein ton raus !!!

    nur bei SND_SYNC hat es funktioniert, aber dann kann man es halt nicht unterbrechen!!!

    mfg aqua5748



  • kann mir den keiner mehr helfen, ich habe schon alles probiert was mir hier vorgeschlagen wurde und nichts davon hat funktioniert leider!

    mfg
    aqua5748



  • #include <stdio.h>
    #include <Windows.h>
    
    #pragma comment (lib, "Winmm.lib")
    
    int main()
    {
        PlaySound("sound.wav", 0, SND_ASYNC | SND_FILENAME | SND_LOOP | SND_NODEFAULT);
        getchar();
        return 0;
    }
    

    Falls das nicht funktioniert: Welchen Compiler nutzt du?
    Für alles Ernsthafte sollte man aber wohl auf eine externe Lösung zurückgreifen. Eine (wie ich finde) schöne Bibliothek wäre z.B. IrrKlang.



  • IrrKlang ist nicht gerade günstig. Aber ich muss zugeben, dass

    irrKlang Pro full (490€ Price excluding VAT: Depending on your location or company status, VAT may be added the price.)

    günstiger als

    FMOD (FMOD Commercial License, $ 3,000 USD)

    und

    BASS (Unlimited Commercial licence: €2750)

    sind.

    Ich würde einen einfachen MOD-Player empfehlen. Die gibt es wie Sand am Meer.



  • @cooky451,

    das was du geschrieben hast, hab ich auch schon versucht, hat leider aber nicht funktioniert...

    welcher compilier ich benutze weis ich nicht direkt!
    ich arbeite mit Microsoft Visual Studio 2005!

    dass was du geschrieben hast, habe ich versucht, es funktioniert nicht, es kommt eine Fehlermeldung:

    ": error C2664: 'PlaySoundW': Konvertierung des Parameters 1 von 'const char [19]' in 'LPCWSTR' nicht möglich. Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat."

    mfg
    aqua5748



  • Beschäftige Dich mal mit TCHAR oder verwende PlaySoundA anstelle von PlaySound...


Anmelden zum Antworten