MOJA PASJA - PROGRAMOWANIE
   Dzisiaj jest Czwartek, 25 maja, 2017r. Ostatnia aktualzacja miała miejsce: 10 grudnia 2006r. Homepage

Programowanie: Artykuły * FAQ * Download * Komponenty * Książki WWW: Artykuły * Narzędzia * Kursy * Darmowe * FAQ * Skrypty * Ksiązki Off-Topic: Aforyzmy * Humor Inne: Forum * Wiki * Liczniki * Linki * Chat * Grafika * Video * Inne



BASS - piszemy odtwarzacz mp3

Autor: Krzysztof Pawlik (krzysiek.pawlik@people.pl)    
WWW: Programmer's Sun (http://ps.nq.pl/)    


   Zawsze zazdrościłem Linuxowi takiego fajnego programiku jakim jest mpg123 - jest to odtwarzacz MP3 przeznaczony dla konsoli. W tym artykule napiszemy własny odpowiednik mpg123 dla Win32.

   Co będzie potrzebne

   Po pierwsze sam BASS - dostępny jest za darmo, jeśli swój program także udostępnisz za darmo (nie musi być udostępniony na zasadzie open-source, wystarczą darmowe binaria). BASS dostępny jest na stronie http://www.un4seen.com/music/ (dostępna jest tam wersja 1.5 - wersję 1.4 można także pobrać z działu Download). Mamy więc już plik bass15.zip (najnowsza wersja dostępna na stronie autora) lub bass14l.zip. Musimy teraz utworzyć bibliotekę LIB dla naszego kompilatora, robimy to programem implib:

   implib bass.lib bass.dll

   Można oczywiście posłużyć się funkcjami LoadLibrary() i GetProcAddress() aby w czasie działania programu wczytywać DLL'a i dynamicznie pobierać adresy funkcji, lecz w tym przypadku stwarza to za dużo problemów - po co zawracać sobie tym głowę skoro można to zrobić prościej i równie dobrze? (nie neguje tego, że dynamiczne wczytywanie DLL'i ma swoje zalety, ale w tym przypadku nie ma sensu).
Przydatny będzie także kompilator, notatnik (tudzież inny edytor) i coś dobrego do picia (np. kawa) :))

   Zaczynamy

   Zaczynamy od dołączenia odpowiednich plików:

   Unit1.cpp

   #include <stdlib.h>
  
#include <stdio.h>
  
#include <windows.h>
  
#include <conio.h>
  

   #include "bass.h"
  

  


   Teraz tworzymy zmienne:

   Unit1.cpp

   HSTREAM hMP3;
   DWORD dwStreamLen;
   DWORD dwStreamCurrentPos;
   float fSeconds;
   float fSecondsTotal;
  
  


   hMP3 przechowuje uchwyt naszego strumienia, dwStreamLen przechowuje długość strumienia, dwStreamCurrentPos aktualną pozycję w strumieniu, fSeconds która sekunda jest aktualnie odtwarzana a fSecondsTotal długość pliku w sekundach.

   main()

   Zainicjowanie BASS'a sprowadza się do wywołania dwóch funkcji:

   Unit1.cpp

  BASS_Init(-1, 22050, 0, 0);
  BASS_Start();



   BASS_Init() inicjuje BASS'a, parametry
   
  • pierwszy to urządzenie z którego BASS będzie korzystał przy odtwarzaniu dźwięku (-1 oznacza urządzenie domyślne)    
  • drugi parametr to częstotliwość wyjścia (jeśli odtwarzany dźwięki będzie zapisany w np. 44100 to nastąpi jego konwersja do 22050)    
  • trzeci parametr to flagi - w naszym przypadku nie precyzujemy nic więcej    
  • ostatni parametr to HWND (uchwyt) okna naszego programu, jeśli podamy 0 to zostanie pobrany uchwyt aktywnego okna


       BASS_Start() włącza mikser i jednocześnie umożliwia odtwarzanie. Dopiero po wywołaniu tych funkcji możemy przejść do utworzenia strumienia i właściwego odtwarzania.

       Strumień tworzymy funkcją BASS_StreamCreateFile():

       Unit1.cpp

      hMP3 = BASS_StreamCreateFile(false, argv[1], 0, 0, BASS_MP3_SETPOS);



       Ważny dla nas jest drugi parametr: podajemy w nim nazwę pliku. Jeśli hMP3 jest różne od zera to udało się utworzyć strumień. Pobieramy także długość strumienia i przeliczamy go na sekundy:

       Unit1.cpp

      dwStreamLen = BASS_StreamGetLength(hMP3);
      fSecondsTotal = BASS_ChannelBytes2Seconds(hMP3, dwStreamLen);



       Funkcje nie wymagają komentarza - ich nazwy mówią wszystko :)

       Teraz wystarczy użyć jednej funkcji, aby było słychać dźwięk:

       Pierwszy parametr to uchwyt naszego strumienia, drugi to wartość true lub false - czy chcemy aby strumień był odtwarzany bezprzerwy, ostatni parametr to flagi.

       Ponieważ BASS działa w osobnym wątku wykonywanie naszego programu skończyło by się zanim cały dźwięk został odtworzony, musimy więc użyć jakiejś pętli, np takiej:

       Unit1.cpp

      do {

        dwStreamCurrentPos = BASS_ChannelGetPosition(hMP3);
        fSeconds = BASS_ChannelBytes2Seconds(hMP3, dwStreamCurrentPos);

        printf("\rSeconds: %3.0f/%3.0f ", fSeconds, fSecondsTotal);

        Sleep(10);

      } while (dwStreamCurrentPos != dwStreamLen && !kbhit());



       Pętla ta oczekuje na naciśnięcie klawisza, lub aż aktualna pozycja odtwarzania będzie równa długości pliku. Przy okazji wyświetla, która sekunda właśnie jest odtwarzana.

       Program należy zakończyć zwolnieniem zasobów BASS'a:

       Unit1.cpp

      BASS_Free();



       Gotowy program: art_mp3p.zip (663 bajty)



       Wasze opinie:
       Średnia ocena: 4.7/10 (54 głosów)
       
       Liczba komentarzy: 8590 (pokaż wszystkie)Skomentuj !   


    Autor: VECtRwF4sDPwData dodania: 2016-08-19
    This is a most useful coirtibutnon to the debate


    Autor: wxjeogmmData dodania: 2012-09-22
    oewd54 kczpypdhphcg, [url=http://rmxfibsfrepk.com/]rmxfibsfrepk[/url], [link=http://ljhfintmxrgj.com/]ljhfintmxrgj[/link], http://ucsypuknawnh.com/


    Autor: kmdzrwcamData dodania: 2012-09-21
    AKLGvs bsfhszisygou, [url=http://csfsoipfkwdf.com/]csfsoipfkwdf[/url], [link=http://mqyufyussish.com/]mqyufyussish[/link], http://vxxyjdrxdzfe.com/


    Autor: qaleezkiData dodania: 2012-09-20
    tpIdKb nhotlxdtlmvr, [url=http://mvyhbvhmoeox.com/]mvyhbvhmoeox[/url], [link=http://umcdqrfpgdsu.com/]umcdqrfpgdsu[/link], http://vsjljtqvqast.com/


    Autor: buy cialis onlineData dodania: 2012-09-07
    It was my error, diflucan dosing, >:),


    Autor: cheapest cialisData dodania: 2012-09-07
    It is remarkable, it is rather valuable information, lasix drug, 101506033623,


    Autor: diflucan side effectsData dodania: 2012-09-07
    I — the same opinion, lasix no prescription, 88782,



  • Stronę przygotował: Kacper Cieśla (comboy). Wszelkie prawa zastrzeżone.
    Reklama * Zgłoś błąd * Kontakt * Hosting * O stronie * Sponsoring
    Czas generowania strony: 0.344s