Funkcja do odtwarzania mp3 dla własnej biblioteki w C++.

0

...

0

To se napisz. Polecam BASS.

0

VS2012 wywala errory przy korzystaniu z biblioteki Bass

Jakie błędy?

funckja PlaySound nie obsługuje typu *char

Przyjmuje LPCTSTR, czyli w dzisiejszych czasach z włączoną obsługą unicode będzie to const wchar_t*. Jeżeli chcesz podać ścieżkę jako literał to wystarczy napisać L"../plik.mp3". Jeżeli koniecznie masz ten char* to zamienić go możesz za pomocą mbstowcs_s.

1
#define UNICODE
#define _UNICODE

#include <WinSDKVer.h>
#define _WIN32_WINNT _WIN32_WINNT_WINXP
#include <SDKDDKVer.h>

#include <Windows.h>
#include <Dshow.h>
#include <comip.h>
#include <comdef.h>

#pragma comment(lib,"strmiids.lib")

#ifdef NDEBUG
#  pragma comment(lib,"comsuppw.lib")
#else
#  pragma comment(lib,"comsuppwd.lib")
#endif

_COM_SMARTPTR_TYPEDEF(IGraphBuilder, IID_IGraphBuilder);
_COM_SMARTPTR_TYPEDEF(IMediaControl, IID_IMediaControl);
_COM_SMARTPTR_TYPEDEF(IMediaEvent, IID_IMediaEvent);

#define HR(co) { hr = co; if (FAILED(hr)) _com_raise_error(hr); }

void PlayMusic(const wchar_t *fileName)
{
	HRESULT hr;

	IGraphBuilderPtr filterGraph;
	HR(filterGraph.CreateInstance(CLSID_FilterGraph));

	IMediaControlPtr mediaControl;
	HR(filterGraph.QueryInterface(IID_IMediaControl, &mediaControl));

	IMediaEventPtr mediaEvent;
	HR(filterGraph.QueryInterface(IID_IMediaEvent, &mediaEvent));

	HR(filterGraph->RenderFile(fileName, NULL));
	HR(mediaControl->Run());

	LONG dummy;
	HR(mediaEvent->WaitForCompletion(INFINITE, &dummy));
}

struct CCoInitialize
{
	HRESULT hr;
	CCoInitialize() { hr = CoInitialize(NULL); }
	~CCoInitialize() { if (SUCCEEDED(hr)) CoUninitialize(); }
};

int main()
{
	CCoInitialize coinit;

	PlayMusic(L"c:\\Muzyka\\Anime mp3\\GITS\\GITS TV\\OST1\\09 - Lithium Flower.mp3");
}

Kwestię konwersji nazwy pliku z char* do wchar_t* pozostawiamy czytelnikowi.

0

Co do biblioteki BASS, to mam taki problem:

Błąd	1	error C2065: "hwnd" : niezadeklarowany identyfikator	c:\users\użytkownik\documents\visual studio 2012\projects\clight\clight\main.cpp	4	1	cLight
Błąd	2	error C2065: "Stream" : niezadeklarowany identyfikator	c:\users\użytkownik\documents\visual studio 2012\projects\clight\clight\main.cpp	5	1	cLight
Błąd	3	error C2065: "Stream" : niezadeklarowany identyfikator	c:\users\użytkownik\documents\visual studio 2012\projects\clight\clight\main.cpp	6	1	cLight

Kod:

#include "bass.h"

int main(){
	BASS_Init(-1, 44100, 0, hwnd, 0); // initialize default output device
	Stream = BASS_StreamCreateFile(FALSE, "electric_angel.mp3", 0, 0, 0); // create a stream for the MP3 file
	BASS_ChannelPlay(Stream, FALSE); // start playing it
	return 0;
}
0

@Szczepancio zanim zaczniesz pisać odtwarzacz muzyki, grę i system operacyjny to proponuje poświęcić 3 dni na dowolny kurs programowania...
Już po 3 minutach wiedziałbyś że nie możesz używać zmiennych których nie zadeklarowałeś, vide to twoje hwnd...

0

Dobra, szczerze to już wiem jakie błędy popełniłem, i czuję się jak debil z tego powodu. Dla tych co nie wiedzą jak korzystać, choć jest to banalnie proste, wklejam kod:

 
//Inicjacja.
HSTREAM StreamHandle;
BASS_Init(-1, 44100, 0, 0, NULL);

//Funkcja:
void PlayMusic(char *FileName){    
StreamHandle = BASS_StreamCreateFile(FALSE, FileName, 0, 0, 0);    
BASS_ChannelPlay(StreamHandle, FALSE);
}

Akurat hwnd nie jest mi potrzebne, gdyż korzystam z konsoli :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1