Program do odtwarzania muzyki

Hmm… wykonywalne, tylko jeszcze muszę zrobić możliwość zarządzania playlistami. Chodzi o to że obecnie możliwa jest tylko jedna, dla mnie też się to stało trochę niewygodne. Jak dorzucę zarządzanie playlistami i otwieranie pliku m3u to wrzucę nową wersje programu.

@hitm3n i na każdej z nich będzie pamiętał, że np zapauzowałem na 15 pliku 7 min 39 sekund, gdy zacznęsłuchać innego pliku z innej playlisty i wrócę do tej, to będzie nadal na tym momencie?

To, że wykonywalne to wiem, sam chyba napisze sobie playera do audiobooków.

Prostą wersję, czas/plik będzie przechowywany w pliku tekstowym w folderze audiobooka :wink:

No aż tak to nie ma :stuck_out_tongue:

Nawiązując do twojego pomysłu tu wykonanie tego u mnie by było takie. Dołoży się opcje dla jakich utworów ma być zapamiętana pozycja (np dłuższych niż 5 minut albo gdy aktualna pozycja wyjechała 5 minut dalej niż poprzednia). Do tego da się proste okienko wyboru playlist i gotowe. A pozycje utworu zapamiętywał by dla wszystkich utworów w playliście np. odtwarzasz utwór 5 ale w połowie zmienisz na 8. To gdy wrócisz do 5-tego ruszy od poprzedniego momentu.

W ten weekend nie dam rady nic zrobić bo szkoła. Od poniedziałku zacznę pomału tworzyć. Chce jeszcze jakoś sprytnie zrobić aby dla każdej playlisty można było wybrać inne ustawienia, ale z możliwością użycia ustawień ogólnych programu. Użycie wszystkich opcji albo żadnej to żaden problem, ale gdyby się chciało zabrać 5 opcji z ustawień ogólnych a 3 z playlisty robi się problem bo trza zaznaczyć które to opcje.

Prawie skończyłem to zapamiętywanie pozycji utworu. Managera playlist puki co pominę dam tylko możliwość zapisywania playlisty np na pulpicie i późniejsze otwarcie jej. Chciałem jeszcze dorobić odtwarzanie radia internetowego, ale nie wiem jak mam to zrobić. Jeśli kogoś to interesuje to w piątek wrzucę nową wersje programiku.

Wygląda na to że program działa tylko wtedy gdy pliki które chce się w nim odtwarzać są powiązane z WMP a gdy są powiązane z innym programem nie działa.

To nie powinno mieć żadnego znaczenia, natomiast na pewno mogą być odtwarzane tylko te pliki które może odtwarzać także WMP.

W związku z tym, że ja też napisałem taki mały odtwarzacz oparty na bibliotekach MCI, to byłbym zainteresowany wiadomością czy w tym programie odtwarzanie działa prawidłowo także u Ciebie. Gdybyś zechciał sprawdzić, to tu link do programu.

terminarz

(W programie są dwa odtwarzacze. Jeden to właśnie napisany przeze mnie, a drugi to oryginalny WMP.)

floyd , ten twój program też nie działa, nie generuje żadnych błędów ale nic nie odtwarza.

krzychu91prog podesłał mi jeszcze wersję która daje komunikaty w przypadku błędów i ona przy próbie odtworzenia czegokolwiek generuje mi taki błąd:

errorhoq.png

Okazuje się że prosty player który stworzyłem w Delphi bazujący na windowsowym komponencie tak jak te wasze generuje ten sam błąd.

Trochę pogoogałem i okazało się że prawdopodobnie problemem jest to że jako domyślny odtwarzacz jest u mnie ustawiony inny program niż WMP, zobacz tu: http://wiki.supermemo.org/index.php?tit … yer_device

Jeśli uda się komuś znaleźć rozwiązanie inne niż podane na tamtej stronie to też jestem zainteresowany.

Specjalnie zmieniłem odtwarzacz domyślny na inny i nie ma to znaczenia. Google też podpowiada, że może być brak odpowiednich kodeków, tylko jakich? ? Być może powinien być zainstalowany w systemie WMP?

(W moim programie można też ustawić odtwarzanie na odtwarzacz domyślny, opcja-Player)

Sprawdzałem program pod XP, Vistą czy Windows 7 i działa poprawnie, ale w każdym systemie był zainstalowany WMP.

Nie sprawdzałem tylko pod systemami 64bitowymi.

floyd , jak przełączę ten twój odtwarzacz na wmp (klawiszem F11) to odtwarza mi ładnie (aktywuje się kodek AC3 Filter) ale w domyślnym trybie odtwarzacz milczy.

A jak włączę opcję “player” to pliki odpalane są w moim domyślnym odtwarzaczu czyli w ALLPlayerze.

Mam windowsa xp pro 32bitowego.

Ja myślałem, że ty nie masz zainstalowanego WMP, ale i tak musi Ci chyba brakować jakiejś biblioteki albo AllPlayer podmienił, co też czasami się zdarza. Jak naliczyłem to chyba z 15 plików .dll jest powiązanych z odtwarzaczem WMP i to w dwóch katalogach:C:\WINDOWS\system32\ i kopie w C:\WINDOWS\system32\dllcache. Ciekawe czy dało by się uruchomić taki odtwarzacz bez zainstalowanego WMP. Żeby to sprawdzić, to musiał bym chyba zainstalować drugą wersję Windowsa, odinstalować WMP i potem eksperymentować z tymi bibliotekami. W podstawowym systemie nie chcę ryzykować z odinstalowaniem WMP bo jeszcze mi się coś namiesza i będę bez WMP. :slight_smile:

PS.

Wiem, że masz Windowsa xp i przeglądarkę Firefox 9.0. Pozdrawiam Gdańsk. :slight_smile:

Ja mam zainstalowany Win7 x64 dodatkowo skasowałem systemowego Windows Media Playera :stuck_out_tongue: Kodeki mam w wersji 32-bitowej, chociaż bez kodeków też działał. Ten błąd może być spowodowany tym że moje ustawienia MCI same próbują dopasować rodzaj urządzenia do pliku. Tam jest ich chyba kilka, jedno do wav inne do ścieżek audio z płyty CD. Szkoda tylko że u mnie to działa i nie mam jak testować na bieżąco. W ostateczności zamienię MCI na coś innego.

floyd , nie wykluczam tego że czegoś mi brakuje ale sam WMP działa bez problemów.

Te biblioteki z dllcache to są tylko kopie które windows automatycznie wkopiowuje do właściwego folderu gdy zostaną z niego usunięte lub pomienione.

PS.

Jesteś pewien? IP i header można łatwo sfałszować… :wink:

PS2.

Możesz mi podesłać kod jakiego używasz w tym pliku php?

krzychu91prog , w Delphi też standardowo jest dla komponentu odtwarzacza ustawione automatyczne dopasowywanie typu urządzenia i z tym ustawieniem mój testowy program wywala mi ten sam błąd co ten twój.

Próbowałem ustawiać ręcznie z listy dostępnych ale na żadnym nie działało, na jednych wywalało błąd a na innych zwyczajnie nie działało nie wywalając błędu.

Widzę, że waćpan zmienił miejsce zamieszkania na Chicago. :slight_smile:

Ten kod to tak na szybko i do publikacji to bym go trochę uszlachetnił. Główną jego zaletą jest to, że tego samego kodu używam do plików o różnych nazwach i tylko tak dla orientacji statystycznej o ile dane są poprawne. :slight_smile:

<?php 

if (!IsSet($_GET['id'])) 

{ 

   echo "Nie znaleziono pliku!"; 

} 

else 

{ 

    function nazwa() { 

       global $nazwa; 

       global $nazwa2;

       $sciezka = $_GET['id']; 

       $dlugosc = strlen ($sciezka); 

       $nazwa = substr($sciezka,1,($dlugosc-1)); 

       $nazwa2='pliki'.substr($sciezka,strrpos($sciezka,"/"),($dlugosc-1));

    } 


    nazwa(); 


    function odczytaj() { 

       global $ile, $nazwa2; 

      $plik=fopen("$nazwa2.txt","r"); 

      flock($plik,1); 

      $ile=fgets($plik,20); 

      flock($plik,3); 

      fclose($plik);

      $ile++;

    } 

    function zapisz($ile) { 

	global $nazwa2; 

	global $nazwa; 

      $plik=fopen("$nazwa2.txt","w"); 

      flock($plik,2); 

      fwrite($plik,$ile); 

      flock($plik,3); 

      fclose($plik); 

      if (headers_sent()) { 

         echo ""; 

      } else { 

         header("location: ".$nazwa.""); 

      } 

    } 


    if (file_exists("$nazwa2.txt")) { 

      odczytaj(); 

    } else { 

      $ile=1; 

    } 

zapisz($ile); 

}

if($_SERVER['REMOTE_ADDR'] == '')

{

$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];

}

else

{

$ip=$_SERVER['REMOTE_ADDR'];

}

$adres="187.228.56.12";

if($ip != $adres && $ip !="")

{

$dat=date("Y-m-d G:i:s"); 

$user_agent=$_SERVER["HTTP_USER_AGENT"]; 

$remote_addr=$_SERVER["REMOTE_ADDR"]; 

$host=gethostbyaddr($ip); 

$przegladarka=$HTTP_USER_AGENT;

$f=@fopen($nazwa2.".dat","a"); 

@fputs($f,"$dat"." |**| "); 

@fputs($f,"$remote_addr | **| $host |** | $przegladarka\r\n"); 

@fclose($f); 

} 

?>

Skoro twierdzisz że ręczne nadanie typu urządzenia MCI nic nie da pozostaje zmienić bibliotekę do odtwarzania dźwięku.

Jeśli znalazłby się ochotnik któremu nie działa mój programik mogę przesłać wersje w której sprawdzi po kolei wszystkie dostępne typy urządzeń MCI ręcznie i wyświetli raport. Mimo wszystko chce mieć pewność czy moje rozwiązanie na pewno nie zadziała.

krzychu91prog , możesz mi podesłać.

To jest program testowy, sprawdzający jakie błędy wyrzuca MCI na wszystkich swoich urządzeniach.

@edit

Wersja *.exe już nie potrzebna, ale zostawiam kod dla ciekawskich

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 


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


std::string GetName(HWND Parent, const char *Mask, const char *Path)

{

	std::string sResult;


	char *sLoadedFileName = new char[MAX_PATH];

	ZeroMemory(sLoadedFileName, MAX_PATH * sizeof(char));


	OPENFILENAMEA ofn;

	memset(&ofn, 0, sizeof(OPENFILENAMEA));

	ofn.lStructSize = sizeof(OPENFILENAMEA);

	ofn.hwndOwner = Parent;

	ofn.lpstrFilter = Mask;

	ofn.nMaxFile = MAX_PATH;

	ofn.lpstrFile = sLoadedFileName;

	ofn.lpstrDefExt = "";

	ofn.lpstrInitialDir	= Path;

	ofn.Flags = OFN_HIDEREADONLY | OFN_NONETWORKBUTTON | OFN_OVERWRITEPROMPT;


	GetSaveFileNameA(&ofn);


	sResult = sLoadedFileName;

	delete[] sLoadedFileName;


	return sResult;

}


std::wstring GetName(HWND Parent, const wchar_t *Mask, const wchar_t *Path)

{

	std::wstring wResult;


	wchar_t *wLoadedFileName = new wchar_t[MAX_PATH];

	ZeroMemory(wLoadedFileName, MAX_PATH * sizeof(wchar_t));


	OPENFILENAMEW ofn;

	memset(&ofn, 0, sizeof(OPENFILENAMEW));

	ofn.lStructSize = sizeof(OPENFILENAMEW);

	ofn.hwndOwner = Parent;

	ofn.lpstrFilter = Mask;

	ofn.nMaxFile = MAX_PATH;

	ofn.lpstrFile = wLoadedFileName;

	ofn.lpstrDefExt = L"";

	ofn.lpstrInitialDir	= Path;

	ofn.Flags = OFN_FILEMUSTEXIST | OFN_NONETWORKBUTTON;


	GetOpenFileNameW(&ofn);


	wResult = wLoadedFileName;

	delete[] wLoadedFileName;


	return wResult;

}


std::string GetErrorText(DWORD ErrorCode)

{

	std::string sResult;


	char *sBufor = new char[0x0AFF];


	mciGetErrorStringA(ErrorCode, sBufor, 0x0AFF);

	sResult = sBufor;


	delete[] sBufor;


	return sResult;

}


int __stdcall _tWinMain(HINSTANCE hInst, HINSTANCE, TCHAR *, int nCmdShow)

{

	std::vector > vDevice;

	vDevice.push_back(std::pair(MCI_ALL_DEVICE_ID, "MCI_ALL_DEVICE_ID"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_ANIMATION, "MCI_DEVTYPE_ANIMATION"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_CD_AUDIO, "MCI_DEVTYPE_CD_AUDIO"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_DAT, "MCI_DEVTYPE_DAT"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_DIGITAL_VIDEO, "MCI_DEVTYPE_DIGITAL_VIDEO"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_OTHER, "MCI_DEVTYPE_OTHER"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_OVERLAY, "MCI_DEVTYPE_OVERLAY"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_SCANNER, "MCI_DEVTYPE_SCANNER"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_SEQUENCER, "MCI_DEVTYPE_SEQUENCER"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_VCR, "MCI_DEVTYPE_VCR"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_VIDEODISC, "MCI_DEVTYPE_VIDEODISC"));

	vDevice.push_back(std::pair(MCI_DEVTYPE_WAVEFORM_AUDIO, "MCI_DEVTYPE_WAVEFORM_AUDIO"));


	MessageBox(0, _T("Podaj plik muzyczny"), _T("Tytuł okna"), MB_ICONINFORMATION);

	std::wstring FileNameMusic = GetName(0, L"Wszystko *.*\0*.*", 0);


	MessageBox(0, _T("Podaj wynikowy plik raportu"), _T("Tytuł okna"), MB_ICONINFORMATION);

	std::string FileNameRaport = GetName(0, "Plik raportu *.txt\0*.txt", 0);


	std::ofstream oFile;

	oFile.open(FileNameRaport.c_str(), std::ios::out);


	if (oFile.is_open() == false)

	{

		MessageBox(0, _T("Błąd otwarcia pliku raportu"), 0, MB_ICONERROR);

		return 0;

	}


	DWORD dwResult;

	for (unsigned i = 0; i < vDevice.size(); ++i)

	{

		MCI_OPEN_PARMS OpenParam;

		ZeroMemory(&OpenParam, sizeof(MCI_OPEN_PARMS));

		OpenParam.lpstrElementName = FileNameMusic.c_str();

		OpenParam.lpstrDeviceType = reinterpret_cast(vDevice[i].first);

		dwResult = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_SHAREABLE | MCI_WAIT, (DWORD) (void *) &OpenParam);


		if (OpenParam.wDeviceID)

		{

			MCI_GENERIC_PARMS GenericParam;

			ZeroMemory(&GenericParam, sizeof(MCI_GENERIC_PARMS));

			mciSendCommand(OpenParam.wDeviceID, MCI_CLOSE, MCI_WAIT, (DWORD) (void *) &GenericParam);

		}


		oFile << "Index: " << i << std::endl

			<< "DeviceID: " << vDevice[i].first << std::endl

			<< "Stala: " << vDevice[i].second << std::endl

			<< "Kod wyjścia: " << dwResult << std::endl

			<< "Tekst wyjścia: " << GetErrorText(dwResult) << std::endl << std::endl;


		Sleep(250);

	}


	oFile.close();


	MessageBox(0, _T("Zakończono"), _T("Tytuł okna"), MB_ICONINFORMATION);

	return 0;

}

W ten sposób otwieram pliku w moim odtwarzaczu, z tym że nie ma pętli tylko ALL_DEVICE.

Zrobiłem dwa testy na tym samym pliku mp3.

Pierwszy z moimi ustawieniami, raport:

Index: 0

DeviceID: 4294967295

Stala: MCI_ALL_DEVICE_ID

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 1

DeviceID: 519

Stala: MCI_DEVTYPE_ANIMATION

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 2

DeviceID: 516

Stala: MCI_DEVTYPE_CD_AUDIO

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 3

DeviceID: 517

Stala: MCI_DEVTYPE_DAT

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 4

DeviceID: 520

Stala: MCI_DEVTYPE_DIGITAL_VIDEO

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 5

DeviceID: 521

Stala: MCI_DEVTYPE_OTHER

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 6

DeviceID: 515

Stala: MCI_DEVTYPE_OVERLAY

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 7

DeviceID: 518

Stala: MCI_DEVTYPE_SCANNER

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 8

DeviceID: 523

Stala: MCI_DEVTYPE_SEQUENCER

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 9

DeviceID: 513

Stala: MCI_DEVTYPE_VCR

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 10

DeviceID: 514

Stala: MCI_DEVTYPE_VIDEODISC

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.


Index: 11

DeviceID: 522

Stala: MCI_DEVTYPE_WAVEFORM_AUDIO

Kod wyjścia: 281

Tekst wyjścia: Nie można ustalić typu urządzenia na podstawie podanego rozszerzenia pliku.

Potem postanowiłem powiązać pliki mp3 z WMP (poprzez opcje programu WMP) i nagle twój program ruszył co w świetle tego co czytałem i wcześniej już tu pisałem nie było dla mnie zaskoczeniem, raport po powiązaniu z WMP:

Index: 0

DeviceID: 4294967295

Stala: MCI_ALL_DEVICE_ID

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 1

DeviceID: 519

Stala: MCI_DEVTYPE_ANIMATION

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 2

DeviceID: 516

Stala: MCI_DEVTYPE_CD_AUDIO

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 3

DeviceID: 517

Stala: MCI_DEVTYPE_DAT

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 4

DeviceID: 520

Stala: MCI_DEVTYPE_DIGITAL_VIDEO

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 5

DeviceID: 521

Stala: MCI_DEVTYPE_OTHER

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 6

DeviceID: 515

Stala: MCI_DEVTYPE_OVERLAY

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 7

DeviceID: 518

Stala: MCI_DEVTYPE_SCANNER

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 8

DeviceID: 523

Stala: MCI_DEVTYPE_SEQUENCER

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 9

DeviceID: 513

Stala: MCI_DEVTYPE_VCR

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 10

DeviceID: 514

Stala: MCI_DEVTYPE_VIDEODISC

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.


Index: 11

DeviceID: 522

Stala: MCI_DEVTYPE_WAVEFORM_AUDIO

Kod wyjścia: 0

Tekst wyjścia: Wydane polecenie zostało wykonane.

Myślę że to nie wymaga już żadnego dodatkowego komentarza.

Dodane 15.12.2011 (Cz) 21:31

Jeszcze dziwniejsze się okazało że po ponownym powiązaniu tych plików z ALLPlayerem twój program dalej działa, dam znać czy utrzyma się to po restarcie windowsa.

Dobrze że o tym wspomniałeś, raport sprawdził tylko czy wina jest w typach urządzeń MCI co ciekawe i u mnie i u ciebie nie ma znaczenia typ urządzenia przy otwieraniu pliku. Urządzenie nawet MCI_DEVTYPE_SCANNER poradził sobie z dzwiękiem, a według dokumentacji jest to skaner.

W edytorze rejestru tyle znalazłem o powiązaniu z plikami

W 1-szym jest informacja o typie pliku

W 2-gim jest informacja o programie

W 3-cim są powiązania rozszerzenia z programami np Otwórz - media player, edytuj - notatnik itp…

W drugim program dostarczał informacje o wspieranych typach plików i to wydaje mi się najbardziej prawdopodobne ustawienie. Jeśli znajdziemy rozwiązanie modyfikując rejestr, to nauczę program aby robił to automatycznie w razie potrzeby.

Komputer\HKEY_CLASSES_ROOT\.mp3

Komputer\HKEY_CLASSES_ROOT\Applications\Nazwa programu

Komputer\HKEY_CLASSES_ROOT\mp3_auto_file

W pierwszym kluczu który podałem jest nazwa typu pliku u mnie było to mp3_auto_file dziwna i głupio brzmi pewnie u was jest inna. Jak znajdę trochę czasu i chęci to pobawię się sam z tymi plikami, spróbuje popsuć i zaś to jakoś naprawić.

Dodane 16.12.2011 (Pt) 17:03

To nowa wersja mojego programu 1.2

http://wyslijplik.pl/download.php?sid=VZyWSLJP

W paczce dołączyłem instalke plików dll, możliwe że nie będą konieczne bo sporo programów z tego korzysta, a biblioteki są współdzielone. Jako ciekawostkę dodam że moje pliki dll od programu można usunąć, ale wtedy program straci na funkcjonalności. (np po zaakceptowaniu licencji plik Licence.dll nie zostanie nigdy więcej użyty). W planach mam jeszcze jedną rzecz, chce zrobić że po wrzuceniu go na płytę cd z muzyką lub pendrive i uruchomieniu automatycznie zacznie odtwarzać zawartość nośnika.

Nie zmieniło się dużo:

  • Możliwość zapamiętania pozycji utworu według określonych kryteriów.

  • Możliwość drobnego zarządzania playlistami

  • Zmieniony wygląd dialogu z ustawieniami

  • Drobne zmiany w wyświetlanych komunikatach

Będę wdzięczny za opinie i pomysły.

No, nie całkiem wszystko wyjaśnione. Pozostaje jeszcze wyjaśnić dlaczego program działa gdy WMP w ogóle nie jest zainstalowany i nie trzeba robić żadnych powiąząń. Ja bym podejrzewał za zaistniałą sytuację AllPlayera tyle, że tego zawłaszczenia dokonuje podczas instalacji, a nie podczas zmiany odtwarzacza domyślnego.

Próbowałem kiedyś taki odtwarzacz o nazwie: vanBasco’s Karaoke Player do odtwarzania plików midi który robił to samo z plikami midi i szybko go wywaliłem.