Odtwarzacz muzyki

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Odtwarzacz muzyki

Nowy postprzez mani » niedziela, 15 marca 2009, 21:03

Witam, zrobiłem odtwarzacz muzyki, posługując się wskazówkami z serwisu Cyfbar. Chciałbym do odtwarzacza dorobić playlistę. Ktoś mógłby pomóc i powiedzieć, w jaki sposób to zrobić?
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez Cyfrowy Baron » niedziela, 15 marca 2009, 21:08

Playlistę możesz dorobić za pomocą obiektu klasy TStringList a wyświetlać możesz ją w ListBox, np.

Kod: Zaznacz cały
TStrings *PlayList = new TStringList;

if(OpenDialog1->Execute())
{
PlayList->Add(OpenDialog1->FileName);
PlayList->SaveToFile("playlist.txt");
ListBox1->Items->Assign(Playlist);
}


To tylko prosty przykład ukazujący jak to może wyglądać, całość wymaga dopracowania, ale masz już na czym eksperymentować.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez mani » niedziela, 15 marca 2009, 21:26

OK, dzięki, popracuję nad tym ;]
I jeszcze takie jedno pytanie. Chciałbym w jakimś miejscu próbować wyświetlać nazwę utworu, działa mi coś takiego:
Kod: Zaznacz cały
StatusBar1->SimpleText=OpenDialog1->FileName;

Jednakże, wolałbym pokazywać samą nazwę, a nie całą ścieżkę do pliku.
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez Cyfrowy Baron » niedziela, 15 marca 2009, 21:33

Tak na szybko, można tak:

Kod: Zaznacz cały
  String title = ExtractFileName(OpenDialog1->FileName);
  int x = title.Pos(".");
  title = title.SubString(1, x - 1);

  StatusBar1->SimpleText=OpenDialog1->FileName;
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez mani » niedziela, 15 marca 2009, 21:38

Nie działa. W sumie, to ten kod nic nie dał ;]

Mam jeszcze kłopot z:
1. Włączeniem piosenki po kliknięciu w daną opcję ListBoksa.
2. Zrobieniem buttona, odtwarzającego następną piosenkę playlisty.
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez Cyfrowy Baron » niedziela, 15 marca 2009, 21:41

Popełniłem błąd, powinno być:

Kod: Zaznacz cały
  String title = ExtractFileName(OpenDialog1->FileName);
  int x = title.Pos(".");
  title = title.SubString(1, x - 1);

  StatusBar1->SimpleText = title;


co do kolejnego problemu, następnym razem, dziś już nie mam czasu, ale sam też mógłbyś pokombinować.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez mani » niedziela, 15 marca 2009, 22:27

Coś tam sam myślę ;] Generalnie nie wiem, jak się odwołać do pozycji w ListBoksie, która jest zaznaczona. Bo jeśli dobrze rozumuję, mając taką daną, mogę ją odtworzyć podwójnym kliknięciem, innym przyciskiem odtworzyć następną po niej. Bo chcąc odtworzyć piosenkę 3 w kolejności na playliście, zrobiłem coś takiego:
Kod: Zaznacz cały
MediaPlayer1->FileName = PlayList->Strings[2];

Problem w tym, jak zamienić 2 na numer podświetlonej pozycji.
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez Witold » niedziela, 15 marca 2009, 23:57

mani napisał(a):Generalnie nie wiem, jak się odwołać do pozycji w ListBoksie, która jest zaznaczona.


Kod: Zaznacz cały
  ListBoks->Items->Strings[ListBoks->ItemIndex];   
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez mani » poniedziaÅ‚ek, 16 marca 2009, 00:23

Wielkie dzięki, działa ;]

Jeszcze takie pytanie, jak zrobić, by zaznaczona była aktualnie grająca piosenka. Zrobiłem button next:
Kod: Zaznacz cały
MediaPlayer1->FileName = ListBox1->Items->Strings[ListBox1->ItemIndex + 1];
MediaPlayer1->Open();
MediaPlayer1->Play();

i zaznaczenie nie przesuwa siÄ™, bo pewnie jakiegoÅ› kodu brakuje ;]
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez Witold » poniedziaÅ‚ek, 16 marca 2009, 01:13

mani napisał(a):Jeszcze takie pytanie, jak zrobić, by zaznaczona była aktualnie grająca piosenka.

Kod: Zaznacz cały
  AnsiString AktualnieGrajacaPiosenka = MediaPlayer1->FileName;
  int p = ListBoks->Items->IndexOf(AktualnieGrajacaPiosenka);
  if (p!=-1) ListBoks->ItemIndex = p; else throw Exception("AktualnieGrajacaPiosenka nie znajduje siÄ™ w PlayLiscie!");


mani napisał(a):i zaznaczenie nie przesuwa się, bo pewnie jakiegoś kodu brakuje ;]


Kod: Zaznacz cały
ListBoks->ItemIndex =  ListBoks->ItemIndex + 1;  // brak sprawdzania zakresu
MediaPlayer1->FileName = ListBoks->Items->Strings[ListBoks->ItemIndex];
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez wargo » poniedziaÅ‚ek, 16 marca 2009, 11:46

Przydatne wskazówki które mogą być przydatne podczas pisania programu:
  • wpisz nazwÄ™ komponentu a nastÄ™pnie ->, poczekaj chwilkÄ™ i powinna pokazać siÄ™ lista funkcji i wÅ‚aÅ›ciwoÅ›ci (wystarczy trochÄ™ angielskiego).
  • Każdy komponent ma zakÅ‚adkÄ™ events, gdzie możesz ustawiać różne zdarzenia np. po klikniÄ™ciu myszkÄ….
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez mani » poniedziaÅ‚ek, 16 marca 2009, 13:07

Wielkie dzięki Witold, wszystko gra i buczy.
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez mani » poniedziaÅ‚ek, 23 marca 2009, 22:02

Witam, mam jeszcze 3 pytania.
1. Próbowałem zrobić, aby po kliknięciu klawisza Delete, zaznaczona piosenka była usuwana z playlisty. Utworzyłem w MainMenu1 opcję usuń i nadałem jej skrót klawiszowy Delete. Następnie na kliknięcie klawisza, wpisałem taki kod:
Kod: Zaznacz cały
ListBox1->DeleteSelected();
PlayList->SaveToFile("playlist.txt");
MediaPlayer1->Stop();

W ListBoksie zaznaczyłem Multiselect na true. Po usunięciu więcej niż jednej piosenki i kliknięciu potem Play na innej, niebieskie podświetlenie jest na jednej piosence, a zaznaczenie z kropek na aktualnie zaznaczonej. Jak to naprawić?
2. Jak poprzez OpenDialog otworzyć wszystkie pliki danego formatu w folderze? Ewentualnie, jak uaktywnić przycisk Control podczas otwierania, by dodać kilka rzeczy na raz do mojej playlisty?
3. Co powinienem wpisać w OnDragDrop ListBoksa, aby dodać do playlisty piosenkę poprzez przeciągnięcie jej do ListBoksa.
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez Cyfrowy Baron » wtorek, 24 marca 2009, 09:20

Kod: Zaznacz cały
ListBox1->DeleteSelected();
PlayList->SaveToFile("playlist.txt");


Zauważ, że usuwasz zawartość listy ListBox1, a zapisujesz zawartość listy PlaytList, a w tej drugiej żadne zmiany nie zaszły, gdyż nie usunąłeś z listy PlayList niczego. Usunięcie czegokolwiek z listy ListBox1 nie jest równoznaczne z usunięcia czegokolwiek z listy PlayList, z listy PlayList musisz usunąć to samo co z ListBox1. Nie mogę powiedzieć jak to zrobić, gdyż nie wiem w jaki sposób umieszczasz dane na liście PlayList, w jaki sposób przepisujesz to do ListBox1.

Obiekt OpenDialog niczego nie otwiera on tylko zwraca ścieżkę dostępu do pliku zaznaczonego w oknie dialogowym. Żeby móc pobierać ścieżki dostępu do wielu plików trzeba ustawić w komponencie OpenDialog właściwość Options -> ofAllowMultiSelect na true. Pobieranie wielu ścieżek w takiej sytuacji odbywa się nie do jednej zmiennej typu AnsiString lecz do listy typu TStrings. Tak na szybko może to wyglądać tak:

Kod: Zaznacz cały
  AnsiString nazwaPliku = "";
  TStrings *listaPlikow = new TStringList;

  OpenPictureDialog1->Options = OpenPictureDialog1->Options << ofAllowMultiSelect;

if(OpenPictureDialog1->Execute())
{
   if(OpenPictureDialog1->Files->Count > 1)
   {
    listaPlikow->Assign(OpenDialog1->Files);
   }
   else
   nazwaPliku = OpenDialog1->FileName;
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Odtwarzacz muzyki

Nowy postprzez mani » wtorek, 24 marca 2009, 22:30

Cyfrowy Baron napisał(a):Nie mogę powiedzieć jak to zrobić, gdyż nie wiem w jaki sposób umieszczasz dane na liście PlayList, w jaki sposób przepisujesz to do ListBox1.

Tak, jak sam poradziłeś kilka postów wyżej ;]
Kod: Zaznacz cały
TStrings *PlayList = new TStringList;

if(OpenDialog1->Execute())
{
PlayList->Add(OpenDialog1->FileName);
PlayList->SaveToFile("playlist.txt");
ListBox1->Items->Assign(Playlist);
}
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości

cron