CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Playlista na listview zapis/odczyt z pliku.

Playlista na listview zapis/odczyt z pliku.

dział ogólny

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez polymorphism » środa, 18 grudnia 2019, 22:44

Zrozumiałeś w ogóle, co ta funkcja robi, czy tylko przeczytałeś path w komentarzu i ... w sumie nie wiem, co sobie pomyślałeś. Jaki to ma związek z tematem wątku?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2263
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 210
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    UbuntuFirefox

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez Peter_M » środa, 18 grudnia 2019, 22:54

polymorphism napisał(a):Nie pomyliłeś kolumn z wierszami?
Fakt, miało być wiersze. Nie mniej jednak wiadomo o co mnie chodzi.
polymorphism napisał(a):Jeśli w listview nie ma pełnych ścieżek, to nie zapiszesz ich do pliku. Chyba że dodasz jeszcze jedną kolumnę, np. Path, w której będą pełne ścieżki do plików mp3. No i wtedy z górki.
Są na pewno, ponieważ mogę odtwarzać wybrane piosenki.
polymorphism napisał(a):Inna opcja, bardziej pr0, to listview działający w trybie virtual, wtedy całą playlistę trzymasz w wektorze (wraz ze ścieżkami). Poczytaj o właściwości TListView::OwnerData.
Czytałem o tej właściwości, i wygląda na to że było by to odpowiednie, musiał bym jakies przykłady zastosowania komponentu ListView z użyciem OwnerData popatrzyć, swoją drogą ja pro koderem nie jestem początkujący programista - amator :)
swoją drogą może Autor forum CyfrowyBaron, ma jakieś materiały, sugestie?
lukagrom napisał(a):Naturalnie mój błąd ze złych przyzwyczajeń, oczywiście powinno być:
KOD cpp:     UKRYJ  
ofstream music_F1;
 music_F1.open(name_File.c_str());
 music_F1<<result_Mus.c_str();
 music_F1.close();
 


A na stackoverflow znalazłem funkcję do ścieżki dostępu:
Quick and nice solution is to use this function to remove chars from string:

KOD cpp:     UKRYJ  
void removeCharsFromString( string &str, char* charsToRemove ) {
   for ( unsigned int i = 0; i < strlen(charsToRemove); ++i ) {
      str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
   }
}

string myAbsolutepath; //fill with your absolute path
removeCharsFromString( myAbsolutepath, "\"" );
 
Funkcja ta najprawdopodobniej usuwa znaki ze stringów, zupełnie nie nada się do zapisu PlayListy z komponentem Listview.
Ostatnio edytowano środa, 18 grudnia 2019, 22:58 przez Peter_M, łącznie edytowano 1 raz
Avatar użytkownika
Peter_M
Bladawiec
Bladawiec
 
Posty: 41
Dołączył(a): poniedziałek, 3 grudnia 2018, 23:36
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: RAD Studio 10.3.2
SKYPE: pikus_666
Gadu Gadu: 68554272
    WindowsChrome

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez lukagrom » środa, 18 grudnia 2019, 22:57

Tak, zrozumiałem w całej rozciąglości, po czym po kilku głębszych odinstalowałem ten builderowski pakiet dla wybranych, kierując jednocześnie prośbę do admina o usunięcie mego konta z tego dynamicznego forum.
Avatar użytkownika
lukagrom
Intelektryk
Intelektryk
 
Posty: 129
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 9
Otrzymał podziękowań: 5
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    Windows VistaChrome

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez polymorphism » środa, 18 grudnia 2019, 23:15

O jakim pakiecie dla wybranych piszesz? O C++ Builderze?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2263
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 210
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez polymorphism » czwartek, 19 grudnia 2019, 11:43

Są na pewno, ponieważ mogę odtwarzać wybrane piosenki.

Pisałem o listiew. Czego używasz do odtwarzania tych mp3ek?

musiał bym jakies przykłady zastosowania komponentu ListView z użyciem OwnerData popatrzyć

Nie jest to jakieś skomplikowane. Ustawiasz OwnerData na true. Tworzysz zdarzenie TListView::OnData, w którym kontrolka będzie prosić o podanie danych dla poszczególnych pozycji w listview, które w danej chwili będą wyświetlane. Jeśli mnie pamięć nie myli, w TListView::Items::Count ustawiasz ilość elementów.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2263
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 210
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez Peter_M » czwartek, 19 grudnia 2019, 13:29

polymorphism napisał(a):Pisałem o listiew. Czego używasz do odtwarzania tych mp3ek?
Tak. Ja tak samo nawiązałem do komponentu listview. W jakim sensie? Czy mam inny odtwarzacz czy o coś innego? Wiesz playlistę to troszkę chciałem skopiować z foobar2000 tam prawdopodobnie jest ona zrobiona z komponentu listview.
polymorphism napisał(a):Nie jest to jakieś skomplikowane. Ustawiasz OwnerData na true. Tworzysz zdarzenie TListView::OnData, w którym kontrolka będzie prosić o podanie danych dla poszczególnych pozycji w listview, które w danej chwili będą wyświetlane. Jeśli mnie pamięć nie myli, w TListView::Items::Count ustawiasz ilość elementów.
No tak. Mimo wszystko lepiej się będę czuł mając przed sobą schemat jak można dodać element do listview mając włączony ownerData. Albo może coś poszukam.
Avatar użytkownika
Peter_M
Bladawiec
Bladawiec
 
Posty: 41
Dołączył(a): poniedziałek, 3 grudnia 2018, 23:36
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: RAD Studio 10.3.2
SKYPE: pikus_666
Gadu Gadu: 68554272
    LinuxChrome

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez Peter_M » czwartek, 19 grudnia 2019, 13:34

lukagrom napisał(a):Tak, zrozumiałem w całej rozciąglości, po czym po kilku głębszych odinstalowałem ten builderowski pakiet dla wybranych, kierując jednocześnie prośbę do admina o usunięcie mego konta z tego dynamicznego forum.
Ale ja jestem bardzo wdzięczny że grupka ludzi którzy mają doświadczenie w tej branży chce mi pomóc z tym komponentem listview robiąc wspólnie playlistę. Ja nie widzę powodu żebyś usuwał konto tu na forum jak i buildera. Naprawdę.
Avatar użytkownika
Peter_M
Bladawiec
Bladawiec
 
Posty: 41
Dołączył(a): poniedziałek, 3 grudnia 2018, 23:36
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: RAD Studio 10.3.2
SKYPE: pikus_666
Gadu Gadu: 68554272
    LinuxChrome

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez polymorphism » czwartek, 19 grudnia 2019, 14:21

W jakim sensie?

Chodzi mi o bibliotekę. Nie pytam się przecież, czy używasz Winampa, czy też innego foobara ;)

Albo może coś poszukam.

Albo poeksperymentuj. Stwórz nowy projekt z listview i sprawdź to całe OwnerData. Na tym polega nauka programowania, że jak nie ma czegoś pokazane wprost, to trzeba kombinować, testować. W ostateczności napisz priva do Barona, niech Ci przykładowy projekt zrobi. Ja nie mogę, bo nie używam C++ Buildera od lat.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2263
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 210
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    UbuntuFirefox

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez Peter_M » czwartek, 19 grudnia 2019, 15:08

Tak. Biblioteka to libzplay, pamiętam jak pomogłeś mi w bitmapie dla graphu, ale jak doczytałem może ona podstawowe formaty plików audio odtwarzać natomiast MP4 wma WMV i innych już nie, zwraca błąd . Kurde jak tak patrzę na ten mój projekt to robi się powoli gruby odtwarzacz audio.
No będę kombinował testował na testowym projekcie gdzie mam miejsce na testy nowych funkcji co by nie psuć aplikacji bazowej (MP3Play). Dzięki temu sam widzę po sobie że jakiś progress jest.
Avatar użytkownika
Peter_M
Bladawiec
Bladawiec
 
Posty: 41
Dołączył(a): poniedziałek, 3 grudnia 2018, 23:36
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: RAD Studio 10.3.2
SKYPE: pikus_666
Gadu Gadu: 68554272
    LinuxChrome

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez polymorphism » czwartek, 19 grudnia 2019, 20:46

Z tego, co widzę, w tej bibliotece można dodać pliki do kolejki odtwarzania, ale nie widzę, żeby można było tę kolejkę jakoś edytować, czy nawet listować (popraw mnie, jeśli się mylę). Czyli taka playlista musi być w formie zewnętrznej listy (np. std::vector<klasa_reprezentująca_plik>).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2263
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 210
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    UbuntuFirefox

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez Peter_M » czwartek, 19 grudnia 2019, 23:27

polymorphism napisał(a):Z tego, co widzę, w tej bibliotece można dodać pliki do kolejki odtwarzania,
Tak, jest tam Funkcja AddFile
polymorphism napisał(a):ale nie widzę, żeby można było tę kolejkę jakoś edytować, czy nawet listować (popraw mnie, jeśli się mylę).
No właśnie, Ja również nie znalazłem nic na ten temat.
polymorphism napisał(a):Czyli taka playlista musi być w formie zewnętrznej listy (np. std::vector<klasa_reprezentująca_plik>).
Można prosić o jakiś przykład twego zamysłu, jak by miało to wyglądać?
Avatar użytkownika
Peter_M
Bladawiec
Bladawiec
 
Posty: 41
Dołączył(a): poniedziałek, 3 grudnia 2018, 23:36
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: RAD Studio 10.3.2
SKYPE: pikus_666
Gadu Gadu: 68554272
    WindowsChrome

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez polymorphism » piątek, 20 grudnia 2019, 12:20

Tak to widzę:
KOD cpp:     UKRYJ  
class PlaylistItem
{
        unsigned mNumber;
        std::string mTitle;
        std::string mArtist;
        std::string mAlbum;
        std::string mPath;

public:
        PlaylistItem(ZPlay &zplay, std::string path)
        : mPath(std::move(path))
        {
                // tu z IDtagów wyciągasz resztę danych
        }      

        unsigned getNumber() const { return mNumber; }
        std::string getTitle() const { return mTitle; }
        std::string getArtist() const { return mArtist; }      
        std::string getAlbum() const { return mAlbum; }
        std::string getPath() const { return mPath; }
};



std::vector<PlaylistItem> playList;
...

// gdzieś, gdzie jest obsługa przycisku play
player->Close();

for (size_t i = playFrom; i < playList.size(); ++i)
        player->AddFile(playList[i].getPath(), sfAutodetect);

player->Play();


// zapis playlisty
std::ofstream ofs("filename");

for (auto &i : playList)
        ofs << i.getPath() << '\n';


// odczyt playlisty
std::string path;
std::ifstream ifs("filename");

while(std::getline(ifs, path))
        playList.emplace_back(*player, path);
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2263
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 210
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez lukagrom » piątek, 20 grudnia 2019, 16:47

Jeszcze sobie pozwolę dygresję dopisać, bo sam dziergam coś podobnego.
Przyjmując uproszczenie założenie, że baza muzyczna jest już na dysku i przyjmuje postać, katalogów z plikami .mp3, to ja bym do odtwarzania i poruszania się wybrał prymitywniejsze rozwiązania, bo bazujące bezpośrednio na komponentach C++ Buildera.
Czyli. Skoro są już katalogi i pliki, to komponenty: DirectoryListBox, FileListBox, ListBox i do samego odtwarzania builderowy MediaPlayer.
W skrócie na początku należy połączyć DirectoryListBox i FileListBox czyli własność FileList DirecoryListBox na FileListBox,
Tym samym już można przemieszczać się po wybranych na dwóch komponentach przemieszczać się po katalogach i plikach (inna kwestia czy poszło by to zawęzić do jakiegoś obszaru np głównego katalogu muzyka z podkatalogami i plikami muzycznymi).
Odtworzenie interesującej playlisty z takiej bazy jest trywialne - klikamy na wybrane pliki z FileListBox i przenosimy z automatu do ListBoxa.
KOD cpp:     UKRYJ  
void __fastcall TForm1::FileListBox1Click(TObject *Sender)
{
 ListBox1->Items->Add(FileListBox1->FileName);
}
 

Odtworzenie pojedyńczego utworu przez kliknięcie w utwór z ListBoxa:
KOD cpp:     UKRYJ  
 MediaPlayer1->FileName=ListBox1->Items->Strings[ListBox1->ItemIndex];
 MediaPlayer1->Open();
 MediaPlayer1->Play();
 

Odtworzenie wybranej listy (i tego nie jestem pewien, bo tworzę to trochę na sucho).
KOD cpp:     UKRYJ  
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 int ilosc_Utworow=ListBox1->ItemIndex;
 for(int i=0;i<ilosc_Utworow;i++)
 {
  MediaPlayer1->FileName=ListBox1->Items->Strings[i];
  MediaPlayer1->Open();
  MediaPlayer1->Play();
  MediaPlayer1->Close();
 }

}
 

I pozostaje kwestia zapisu całości playlisty lub pojedyńczego utworu, co jest tylko wykorzystaniem ListBoxa i wielu z możliwych "builderowych" metod zapisu jak choćby SaveToFile, czy użycie w ogóle komponentu SaveDialog. Oczywiście należy dla koponentów uwzględnić w filtrach właściwości plików (.mp3,.wav, etc), żeby nie pojawiały się zawiechy MediaPlayera.
Avatar użytkownika
lukagrom
Intelektryk
Intelektryk
 
Posty: 129
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 9
Otrzymał podziękowań: 5
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    Windows VistaChrome

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez Peter_M » piątek, 20 grudnia 2019, 17:28

O jak miło, widzieć przyjaciela Lukagrom, mam nadzieję, że jednak zmienił zdanie i pozostanie w gronie builderowców.
lukagrom napisał(a):Przyjmując uproszczenie założenie, że baza muzyczna jest już na dysku i przyjmuje postać, katalogów z plikami .mp3, to ja bym do odtwarzania i poruszania się wybrał prymitywniejsze rozwiązania, bo bazujące bezpośrednio na komponentach C++ Buildera.
Czyli. Skoro są już katalogi i pliki, to komponenty: DirectoryListBox, FileListBox, ListBox i do samego odtwarzania builderowy MediaPlayer.
Tak, tylko że ja już cały mechanizm odtwarzania , dodawania pojedynczych piosenek mam już zrobiony i bazuje na darmowej bibliotece LibZPlay. Pozostała właśnie PlayLista właściwie to jej zapis i odczyt, a także tzw Drag and drop, która bazuje na komponencie ListView, ponieważ dodawanie DirectoryList, mam zbudowane na komponencie TsDirectoryList z pakietu AlphaSkins. Nie mniej jednak ListBox ma wiele wspólnego z ListView, więc twoje wskazówki porady, na pewno będą pomocne w napisaniu funkcji zapisu i odczytu playlisty z pliku na komponencie ListView.
Avatar użytkownika
Peter_M
Bladawiec
Bladawiec
 
Posty: 41
Dołączył(a): poniedziałek, 3 grudnia 2018, 23:36
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: RAD Studio 10.3.2
SKYPE: pikus_666
Gadu Gadu: 68554272
    WindowsChrome

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postprzez lukagrom » piątek, 20 grudnia 2019, 17:47

Ale to swoją drogą, nie dziwne, że mając potężny pakiet programistyczny, którego wersje są horendarnie drogie, trzeba uciekać do zewnętrznych bibliotek i to jeszcze open source? Gdybym miał czas to bym znalazł jakiegoś gotowca z jakiejś złożonej playlisty z wypasioną obsługą plików. Zakładam, że mimo wszystko komponenty Embarcadero i ich metody, na pewno umożliwiają jakąś drogę komfortową i jednocześnie skrótową dla takich zagadnień. Oni mieli kiedyś nawet taką dewizę, jak najmniej pisania, klikaniem i automatyką, wszystko można ogarnąć.
Avatar użytkownika
lukagrom
Intelektryk
Intelektryk
 
Posty: 129
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 9
Otrzymał podziękowań: 5
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    Windows VistaChrome

Poprzednia stronaNastępna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 1 gość

cron