[#1] Okreslanie pozycji w odgrywanym piku mp3
Czesc,
chcialbym dodac cos w rodzaju belki pokazujacej w jakiej pozycji jest odgrywanie pliku (jak w kazdym playerze)
W jaki sposob do tego podejsc?
Mi tylko jeden pomysl przychodzi do glowy do tego chyba malo dokladny:
moge sprawdzic calkowity czas odgrywania piosenki, wystartowac timer przy starcie piosenki , stopowac przy ewentualnych pausach i na tej zasadzie odswierzac belke postepu.
Albo ewentualnie polegac na czasie i ilosci buforow. Na poczatku grania okreslic ile czasu zabiera wyczyszczenie (odegranie) kilku buforow, zliczac te bufory dla piosenki i na tej zasadzie okreslac pozycje?

Czy to co napisalem ma sens czy to totalne bzdury?


edit
chyba ze jeszce rozmiar pliku , rozmiar bufora i bede wiedzial ile buforow potrzeba na cala pisenke i potem to juz latwo. No ale jesli w pliku sa obrazki i inne rzeczy to to tez nie bedzie dokladne

Ostatnia aktualizacja: 15.09.2019 21:16:36 przez peceha
[#2] Re: Okreslanie pozycji w odgrywanym piku mp3

@peceha, post #1

rozmiar pliku , rozmiar bufora i bede wiedzial ile buforow potrzeba na cala pisenke

jezeli nie jest to VBR to tak.
s.
[#3] Re: Okreslanie pozycji w odgrywanym piku mp3

@sq7bti, post #2

Dzieki,
juz dzis mis sie totalnie nie chce ale jutro podejme pierwsza probe tym sposobem.
[#4] Re: Okreslanie pozycji w odgrywanym piku mp3

@peceha, post #1

Metoda z timerem bedzie najsensowniejsza, z rozmiaru pliku i buforow nie bedziesz w stanie dokladnie okreslic przedzialow miedzy aktualizacjami polozenia
[#5] Re: Okreslanie pozycji w odgrywanym piku mp3

@docent, post #4

Mam jednak co do tej metody jedna niewiadoma.
Jak (jesli wogole do tego dojde) mialbym zmieniac miejsce odgrywania piosenki?

Klikajac na suwaku wyskalowanym od 0 do dlugosci piosenki dostane wartosc czasu w miejscu klikniecia ale jak to przelozyc na miejsce w pliku?
Wyglada na to, ze mimo wszystko bede potrzebowal rozmiar pliiku + rozmiar buforow - wtedy "mniej wiecej" trafie w pozycje klikniecia na suwaku czasu.
[#6] Re: Okreslanie pozycji w odgrywanym piku mp3

@peceha, post #5

Nie możesz tego tak zrobić bo pliki MP3 nie muszą być 'liniowe'. Pozycja w pliku nie musi przekładać się liniowo do pozycji w utworze. Wszystko jest bardziej skomplikowane. Na początek polecam poczytać o strukturze plików MP3.
Odtwarzanie odbywa się ramkami. Każda ramka ma nagłówek i dane. W nagłówku masz ilość próbek, częstotliwość i inne takie. Teoretycznie na początku odtwarzania powinieneś przelecieć plik i przeskanować nagłówki (możesz też robić to tylko w przypadku kiedy użytkownik zechce przewinąć odtwarzanie). W ten sposób zbudujesz sobie mapę pozycji w plików do czasu odtwarzania.
Teraz druga kwestia. Odtwarzacze najczęściej odtwarzają pliki ramkami. Najpierw szukają słowa synchronizującego i dopiero od tego miejsca zaczynają odtwarzanie. Nie możesz sobie np wskazać pozycji w środku ramki. Oczywiście wszystko zależy od implementacji ale o tej nic nie napisałeś. Jeżeli tak jest w twoim przypadku to po wybraniu pozycji przez użytkownika masz dwa wyjścia:
- wyrównać tą pozycję do najbliższej ramki (prościej)
- zdekodować całą ramkę i pominąć część próbek (trudniej)

Pozdro.
[#7] Re: Okreslanie pozycji w odgrywanym piku mp3

@peceha, post #5

Nie jest to łatwe niestety, ćwiczyłem to ostro pisząc klasę do dekodowania MP3 w MorphOS-ie. Da się to zrobić ściśle, ale trzeba przeskanować cały plik MP3 i zapisać sobie położenia początków wszystkich ramek, czyli trzeba napisać „częściowy dekoder”. Poza tym na Amidze klasycznej ze względu na moc procesora i szybkość dysku będzie to trwało co najmniej kilkanaście sekund.

Większość odtwarzaczy tak nie robi i zakłada, że miejsce w pliku (w bajtach) jest proporcjonalne do czasu od początku utworu. Zdecydowania większość dekoderów ma autosynchronizację, więc można im podać strumień ucięty w dowolnym miejscu, przeskoczą kawałki i załapią synchro z ramkami. Metoda ma problem w dwóch przypadkach:
  • Plik ze zmiennym bitrate (VBR), proste odtwarzacze (stary WinAMP na przykład) czytają bitrate pierwszej ramki (zazwyczaj 32 kbps, bo na początku jest chwila ciszy) i zakładają, że cały plik ma takie, otrzymując fałszywy czas trwania utworu (znacznie dłuższy niż rzeczywisty), więc wszelkie wyliczenia pozycji w pliku na bazie czasu idą się czesać.
  • Plik z dużym tagiem ID3v2 na początku (np. z miniaturą okładki płyty), tag dokłada się do długości pliku, ale nie dokłada się do czasu trwania. Im krótsza muzyka, tym większa niedokładność wywołana obecnością taga.
[#8] Re: Okreslanie pozycji w odgrywanym piku mp3

@peceha, post #1

Dzieki za odpowiedzi.
O ile "jako taki" "pogress bar" bede w stanie zrobic (miniej lub bardziej dokladny) o tyle "szukanie" w pliku widze ze odpada.

Ogranicze player-a do "skip fwd/bwd" przesuwajac aktualna pozycje w pliku o kilka dlugosci bufora do przodu/do tylu - to powinno sie odbyc calkiem plynnie.

Oczywiscie synchronizacja z "progress barem" bedzie wykonywana BARDZO nie tak jak nalezy ale zmniejszajac dlugosc "progress bar-a" bede mogl oszukiwac na dokladnosci.

Dzieki.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem