Jak dodać dźwięk wav do rejestru programu?

0

Dodałem do swojego programu dźwięk za pomocą funkcji

 PlaySound('C:\plik.wav', 0, SND_FILENAME);

problem w tym że plik jest przypisany do konkretnego katalogu

Przeglądając wątek o dźwiękach na forum doszedłem że to kwestia dodania do rejestru. Problem w tym że nie wiem do końca jak to zrobić. ;)

Czy możecie mi pomóc w dokładnym przedstawieniu tych parametrów z funkcji

PlaySound(pszSound, PCHar; hmod: HMODULE; fdwSound: DWORD); 

?

ale troche obszerniej niż tam -> Dzwięki w Delphi

1

problem w tym że plik jest przypisany do konkretnego katalogu

A co nie możesz go skopiować/przenieść? Jeśli możesz to nie jest przypisany... no chyba że chodzi o path, który można zmenić.

Przeglądając wątek o dźwiękach na forum doszedłem że to kwestia dodania do rejestru. Problem w tym że nie wiem do końca jak to zrobić.

1.Program nie ma czegoś takiego jak rejestr
2.Problem w tym że ty nie wiesz nic o języku w którym chcesz pisać, wyciągasz dziwne i błędne wnioski. Żeby pisać coś bardziej ambitnego niż kopiuj wklej musisz się nauczyć języka.

Czy możecie mi pomóc w dokładnym przedstawieniu tych parametrów z funkcji
PlaySound(pszSound, PCHar; hmod: HMODULE; fdwSound: DWORD);

Wszystko masz dokładnie podane w tym linku co podałeś, wszystko jest ładnie opisane więc nie rozumiem jak możemy ci je dokładniej przedstawić. Bo to że nie rozumiesz języka nie ma nic do tej procedury.

NAUCZ SIĘ JĘZYKA A POTEM PYTAJ BO TAK TO WYCHODZĄ GŁUPOTY. Oszczędzisz swój i nasz czas...

0

@LulHax, spokojnie... :]

Jak @LulHax napisał - program nie ma takiego czegoś jak rejestr (chyba, że jakiś jego element sam tak nazwałeś, ale skąd my mamy to wiedzieć..?), system owszem ma i pewnie chodzi Ci o tą linikę z podanego przez ciebie artykułu:

PlaySound('SystemStart', 0, SND_ALIAS or SND_NODEFAULT);

gdzie SystemStart to systemowa nazwa dźwięku; Tak jak w tym artykule napisano, nazwy angielskie wszystkich systemowych dźwięków masz w rejestrze pod kluczem HKEY_CURRENT_USER\AppEvents\EventLabels:

EventLabels.png

Zarknij na to u siebie i pokombinuj;

W tym artykule także jest elegancko opisany każdy z argumentów:

  • pszSound - nazwa dźwięku (jeżeli masz plik na dysku to pełna nazwa pliku - np. C:\Plik.wav, jeżeli odczytujesz z rejestru systemu to nazwa klucza - np. SystemStart czy WindowsLogon)
  • hmod - jeżeli nie odczytujesz dźwięku z zasobu exe'ka (poczytaj o zasobach programu) tylko z pliku to podajesz 0
  • fdwSound - są to flagi (też poczytaj o flagach), które są określone dla różnych argumentów (chyba jaśniej się nie da ich opisać niż jest to w tym artykule...)
0

Wracając do tematu. Pisząc rejestr zasugerowałem się tym:
"pszSound - Oznacza nazwę pliku lub pozycji rejestru.

Myślałem że są tylko dwie możliwości. Albo plik który tylko ja mam na komputerze np. C:\plik.wav lub druga opcja że dźwięk już będzie w programie na stałe.

Chodzi o to że gdy wykorzystam funkcję

PlaySound('C:\plik.wav', 0, SND_FILENAME); 

i przeniosę program na inny komputer tam wcale nie musi być C:\plik.wav

Jak zrobić żeby dźwięk "był zawsze tam gdzie program" ;)"?

hmm zasoby programu?

0

Kolega już zasugerował ci abyś poczytał o zasobach. Generalnie możesz umieścić plik "wave" w zasobach swojego programu, wówczas
będzie on "przenoszony" razem z twoim plikiem .exe. I wtedy odtwarzasz również w inny sposób...

0

najpierw naucz się kultury, potem pomyśl po co tu jesteś, potem czy chcesz pomóc. Jak odpowiedź na oba pytania brzmi nie to się nie wypowiadaj.

Nie rozróżniasz kultury od pseudo-uprzejmości, nie mam wcale zamiaru być uprzejmym dla tych którzy mają problem żeby opisać problem=wiedzą naprawdę mało/nic.

Myślałem że są tylko dwie możliwości. Albo plik który tylko ja mam na komputerze np. C:\plik.wav lub druga opcja że dźwięk już będzie w programie na stałe.

Bo każdy program składa się z jednego pliku. Widać że wiesz co to rejestr skoro planujesz dżwięk dodawać do rejestru ażeby się przenosił razem z twoim programem. Naprawdę genialne...

Chodzi o to że gdy wykorzystam funkcję
PlaySound('C:\plik.wav', 0, SND_FILENAME);
i przeniosę program na inny komputer tam wcale nie musi być C:\plik.wav
Jak zrobić żeby dźwięk "był zawsze tam gdzie program" "?

Na twoim poziomie (czyli nie wiem nic/newbie poziomu 0), robisz to tak: kopiujesz ten plik razem z programem i używasz pathu relatywnego (jeśli wiesz co to path bo jak nie wiesz co to rejestr no to sorry).

0

wow, ale Ty musisz być zajebi*sty gościu!

który masz już level?

moim skromnym zdaniem takie osoby z takim wysokim levelem i ego nie powinny mieć dostępu do newbie.

a problem już rozwiązałem , dziękuje bardzo wszystkim za pomoc

0

@bronks: przeanalizuj sobie kod i program dołączony do tego posta. Szczegółnie moduł a_bass_lib_resource.pas bo do odtwarzania dźwięków z wieloma dodatkowymi możliwościami polecam właśnie dllkę bass.dll, która w tym programie jest wkompilowana w zasoby i używana przy pomocy innego modułu dllloader.pas. Machnąłem ten projekt kiedyś na potrzebe kogoś kto nawet później mi nie odpisał "cmoknij się w noc", ani nic innego. To tak a propos uprzejmości. A polecam po prostu w zmiennej przechowywać ścieżkę katalogu z którego uruchomiliśmy program i później dodać do tego stały podkatalog na przykłąd SOUNDS\ i z niego ładować wave'y wcześnej sprawdzając czy istnieją żeby nie mieć jakiś niepotrzebnych wyjątków. Przykładowo:

var
  App_Path : string;
begin
  App_Path := ExtractFilePath(Application.ExeName);
end;

Ale ogólnie polecam zastosować bass.dll i trzymać dźwięki - jeżeli w prosty sposób użytkownik nie ma mieć możliwości ich podmiany - w zasobach. Więcej dowiesz się analizując mój przykład oraz samodzielnie szukając w google, bo informacji o bass.dll i zasobach w exe również w Delphi jest po prostu od groma i ciut, ciut :) A i pewne antywirusy w tym nawet KAV 2010 mogą zgłaszać potencjalnie złośliwy kod w moim exeku, ale zignoruj to, bo prawodpodobnie nie podoba się programom antywirusowym - metoda globalnego hooka na myszkę, jakiej użyłem, gdyż taką poznałem, jednak dzieci neo stosowały niestety często takową w swoich keylogerach, trojanach i innym syfie, więc programy antywirsowe z proaktywną ochroną lub czasem bez niej są na takowy kod w programie "uczulone".

0
bronks napisał(a)

i przeniosę program na inny komputer tam wcale nie musi być C:\plik.wav

Jak zrobić żeby dźwięk "był zawsze tam gdzie program" "?

A myślałeś o tym, zeby zrobić do Twojego programu prosty instalator? Nie musisz od razu kombinować z kompresowaniem zawartości instalatora, możesz na początek posłużyć się zasobami (poczytaj o nich bo zasoby programu to bardzo przydatna sprawa), utworzyć jeden plik exe i do niego wpakować wszystkie pliki programu, potem zrobić prosty kreator, w którym użytkownik będzie mógł wybrać ścieżkę instalacji no i ewentualnie komponenty programu; Po wciśnięciu odpowiedniego przycisku zaczynasz wyciągać pliki z zasobów exe'ka i zapisywać je na dysku pod wybraną przez użytkownika ścieżką; Proste a rozwiązuje całkowicie problem istnienia plików dźwiękowych na dysku użytkownika;

Jeżeli nie chcesz mieć odrębnego pliku z dźwiękiem to wpakuj go do zasobów pliku exe Twojego programu, a nie instalatora, wtedy po instalacji dalej nie będzie widać pliku z dźwiękiem, wtedy jednak musisz umieć odtwarzać dźwięk z zasobów; Wszystko jest opisane w artykule, którym się inspirowałeś;

Napisz sobie mały programik, w którym przetestujesz działanie funkcji PlaySound; Jak już dojdziesz do tego jak się jej używa w różnych sytuacjach dopiero wtedy swoją właściwą aplikację oprogramuj pod tym kątem;

Sposób @olesia jest bardzo dobry, ale jak jeszcze nie umiesz na tyle języka to możesz mieć problem ze zrozumieniem funkcji WinAPI; Jednak nic nie stoi na przeszkodzie, abyć się zagłębił i w ten temat :]

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