MOJA PASJA - PROGRAMOWANIE
   Dzisiaj jest Sobota, 4 lutego, 2012r. 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.24/10 (49 głosów)
       
       Liczba komentarzy: 8095 (pokaż wszystkie)Skomentuj !   


    Autor: levitra without prescriptionData dodania: 2012-01-31
    As much as necessary. or order levitra online or cmzouaoha or levitra online or 814383 or buy levitra online or 4665 or buy levitra or 964103032831 or


    Autor: levitra prescriptionData dodania: 2012-01-30
    Bravo, you were visited with a remarkable idea or cheap levitra or 62828857 or levitra without prescription or 54437492 or buy levitra or :-OO or levitra or sekyyxultqa or


    Autor: buy levitra onlineData dodania: 2012-01-30
    This theme is simply matchless :), very much it is pleasant to me))) or buy levitra or 81976994 or levitra prescription or qlarv or levitra online or >:-[[ or levitra or rowaud or


    Autor: levitra without prescriptionData dodania: 2012-01-30
    It does not approach me. Perhaps there are still variants? or cheap levitra or :-O or buy levitra or rqi or buy levitra or =-OOO or cheap levitra or 753955375018 or


    Autor: levitra no prescriptionData dodania: 2012-01-30
    Completely I share your opinion. It seems to me it is excellent idea. I agree with you. or cheap levitra or 09995851 or levitra without prescription or kokxoh or levitra without prescription or >:-((( or buy cheap levitra or zormcjsjzjwx or


    Autor: levitraData dodania: 2012-01-30
    What would you began to do on my place? or cheap levitra or >:-]] or buy levitra or mufuvqml or levitra online or 8-(( or order levitra online or 8]]] or


    Autor: buy levitraData dodania: 2012-01-30
    I can not participate now in discussion - it is very occupied. I will return - I will necessarily express the opinion on this question. or levitra without prescription or =-]] or levitra online or >:-]] or levitra online or 8-DD or levitra no prescription or 535002 or



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