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

2013-09-26 13:00

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

Lokalizacja: Olsztyn

0

...

edytowany 1x, ostatnio: User52632, 2015-11-30 15:20
\music.mp3 ma względny tylko dysk (bieżący), ale ścieżka wskazuje katalog główny. - Azarien 2013-09-26 14:20

Pozostało 580 znaków

2013-09-26 13:45

Rejestracja: 17 lat temu

Ostatnio: 3 dni temu

0

To se napisz. Polecam BASS.

Pozostało 580 znaków

Rev
2013-09-26 14:02
Rev
Moderator

Rejestracja: 13 lat temu

Ostatnio: 2 tygodnie temu

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.


Pozostało 580 znaków

2013-09-26 14:07

Rejestracja: 16 lat temu

Ostatnio: 4 godziny temu

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.

Pozostało 580 znaków

2013-09-26 20:47

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

Lokalizacja: Olsztyn

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;
}
edytowany 1x, ostatnio: User52632, 2013-09-26 20:50
i czym jest wg. ciebie to hwnd? wklejasz kod bez zrozumienia… - Azarien 2013-09-26 21:04
@Azarien - ten kod jest z forum un4seen, po prostu mi się najłatwiej uczy na przykładach, a że takowy znalazłem w google, to próbuję z niego skorzystać, a że nie działa, to chcę dostać pomoc z forum, proste? - User52632 2013-09-26 21:10
ale przydałaby się znajomość podstaw; zamiast przybiegać z każdym błędem kompilacji powinieneś się zastanowić dlaczego dostajesz te błędy. - Azarien 2013-09-26 21:42
pierwszy link na Google po wpisaniu BASS_Init daje odpowiedź. - Azarien 2013-09-26 21:44

Pozostało 580 znaków

2013-09-27 09:53
Moderator

Rejestracja: 16 lat temu

Ostatnio: 1 minuta temu

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...


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2013-09-27 10:47

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

Lokalizacja: Olsztyn

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 :)

edytowany 2x, ostatnio: User52632, 2013-09-27 10:48

Pozostało 580 znaków

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