Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   31 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
DobryZiom

XenonCore Test Dźwięku

Rekomendowane odpowiedzi

Witam. Dopiero zacząłem pracować z Xenon Core i tak w ramach nauki napisałem przykład odtwarzanie muzyki, wyświetlania na ekranie Volume, Pitch, Pan, Czas odtwarzania utworu/długość utworu i ustawianie volume, pitch i pan.

 

Download:

 

http://gmclan.org/up6605_4_XenonCore_Test_Dzwieku.html

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

moze by tak zrobic do tego playliste i kiedys rozbudowac w odtwarzacz? :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

playliste można zrobić jako gui gdzie każde pole to kontrolka która po naciśnięciu stopuje muzykę, zwalnia z pamięci, ładuje nową tą którą wskazuje pole i odtwarza ją

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

do szukania plików w folderze poprzez okienko dialogowe służy funkcja:

XE_STRING filename = Game.GetFilename( XEF_OPEN, "MP3 Music|*.mp3|OGG Music|*.ogg" );

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A czy istnieją funkcje typu gmowego ds_list ? podaje folder i sprawdza każdy plik po kolei i jeśli ma format .mp3 czy jakiś to dodaje itp?

 

I jeszcze jedno:

Music.Access( "m1" ) = Game.Audio.MusicAdd( "data/music/m1.mp3" );

tak dodaje muzykę. Czy istnieje możliwość zrobienia tablicy typu:

Music.Access( "m1" ) = Game.Audio.MusicAdd( "data/music/m1.mp3" );
Music.Access( "m2" ) = Game.Audio.MusicAdd( "data/music/m2.mp3" );
plik[1]=Music.Acces( "m1" )
plik[2]=Music.Acces( "m2" )

?

i wtedy było by super ;D

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Przeszukiwania folderów jeszcze nie dodałem - będzie w następnym update sdk.

odpowiednikiem gmowej listy jest XE_ELEMENTS, przykład użycia:

// obiekt listy elementow
XE_ELEMENTS< XE_STRING > Lista;

// dodajemy string do listy i zwracamy element dodanego obiektu
XE_ELEMENT_POINTER< XE_STRING > element = Lista.AddPointer( XE_STRING( "jakis tekst" ) );

// pobieramy i wyswietlamy wartosc stringa
Game.Message( element->Get() );

czyszczenie kontenera gdy jest niepotrzebny wiecej: Lista.Clear();

 

a jako tablica robi kontener XE_ARRAY i z jego użyciem będzie wyglądać tamten kod tak:

// obiekt tablicy elementow muzyki
XE_ARRAY< C_ELM_MUSIC > plik;
// rezerwujemy miejsce na 2 obiekty
plik.Reserve( 2 );
// wypelniamy pola tablicy
plik[ 0 ] = Music.Acces( "m", 0 );
plik[ 1 ] = Music.Acces( "m", 1 );

a zwalniamy tablice tak: plik.Free();

 

generalnie zrob jak Ci powiedzialem: lista trzyma sciezki do plikow a gdy jakas pozycje wybierzesz z listy to dopiero wtedy ta muzyczke ladujesz i odtwarzasz, a jak klikniesz znowu na inna pozycje to stopujesz i usuwasz ta muzyczke co aktualnie leci i znowu ladujesz i odtwarzasz inna co wybrales

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

działa :D

 

AppData.h

#ifndef APP_DATA_H
#define APP_DATA_H

C_APPLICATION    Game;            
XE_CONTAINER< C_ELM_MUSIC >    Music;
XE_STRING                    Artist;        
XE_STRING                    Title;        
XE_STRING                    Album;    
XE_ARRAY< C_ELM_MUSIC >        utwor;
int                            aktualny=1;
int                            wszystkie=0;


#endif

 

AppEvent.h

#ifndef APP_EVENTS_H
#define APP_EVENTS_H

//VOID'Y
void m_add()
{
    wszystkie += 1;
    utwor[ wszystkie ] = Music.Access( "m1", wszystkie ) = Game.Audio.MusicAdd( "data/music/m1.mp3" );
    wszystkie += 1;
    utwor[ wszystkie ] = Music.Access( "m2", wszystkie ) = Game.Audio.MusicAdd( "data/music/m2.mp3" );
    wszystkie += 1;
    utwor[ wszystkie ] = Music.Access( "m3", wszystkie ) = Game.Audio.MusicAdd( "data/music/m3.mp3" );
}
void t_zmiana()
{
    if( !Game.Audio.MusicIsPlaying( utwor[aktualny] ) ){
        aktualny += 1;
        if( ( aktualny <= wszystkie ) && ( aktualny != 0 ) ){
            Game.Audio.MusicPlay( utwor[aktualny] );
        }
        if( aktualny > wszystkie ){
            aktualny=1;
            Game.Audio.MusicPlay( utwor[aktualny] );
        }
    }
}
void t_scene()
{
    Game.Windows( "main" )->Width = 800;
    Game.Windows( "main" )->Height = 600;
    Game.WindowCentralize( "main" );    
    Game.Windows( "main" )->Update();
    Game.OnWindowSetup( "main" );        
    Game.Vsync( true );                

    Game.Camera.Width = (float)Game.Windows( "main" )->Width;
    Game.Camera.Height = (float)Game.Windows( "main" )->Height;
    utwor.Reserve( 3 );
    Game.Fonts( "font" )->Prepare( "data/fonts/courier_new.xet", "data/fonts/courier_new.fnt" );
}

//PROGRESS'Y
PROGRESS(GameProgress)
{
    //Wyłączanie gry ESC
    if( XE_IO::KeyboardGetPressed( XE_KEY_ESC ) )
        Game.Exit();
    
    //Jeśli trzymamy lewy klawisz...
    if( XE_IO::KeyboardGet( XE_KEY_LEFT ) ){
        //i jeśli głośność miejsza od 0.01(bo po tyle dodaje/odejmuje...jak dasz 0 to będzie "pykać"...sprawdź :D) to...
        if ( Game.Audio.MusicVolumeGet( Music.Access( "m1" ) ) < 0.01 ) 
            //ustawia głośność na 0.01
            Game.Audio.MusicVolume( Music.Access( "m1" ), (float)0.01 );
            //w przeciwnym razie
            else
                //zwyczajnie zcisza
                Game.Audio.MusicVolume( Music.Access( "m1" ), Game.Audio.MusicVolumeGet( Music.Access( "m1" ) )-(float)0.01);
    }
    //to samo co wyżej 
    if( XE_IO::KeyboardGet( XE_KEY_RIGHT ) ){
        if ( Game.Audio.MusicVolumeGet( Music.Access( "m1" ) ) > 0.99 ) 
            Game.Audio.MusicVolume( Music.Access( "m1" ), (float)0.99 );
            else
                Game.Audio.MusicVolume( Music.Access( "m1" ), Game.Audio.MusicVolumeGet( Music.Access( "m1" ) )+(float)0.01);
    }
    //-||- ... i tak dalej
    if( XE_IO::KeyboardGet( XE_KEY_UP ) ){
        if ( Game.Audio.MusicPanGet( Music.Access( "m1" ) ) > 1 ) 
            Game.Audio.MusicPan( Music.Access( "m1" ), (float)1 );
            else
                Game.Audio.MusicPan( Music.Access( "m1" ), Game.Audio.MusicPanGet( Music.Access( "m1" ) )+(float)0.01);
    }
    if( XE_IO::KeyboardGet( XE_KEY_DOWN ) ){
        if ( Game.Audio.MusicPanGet( Music.Access( "m1" ) ) < -1 ) 
            Game.Audio.MusicPan( Music.Access( "m1" ), (float)-1 );
            else
                Game.Audio.MusicPan( Music.Access( "m1" ), Game.Audio.MusicPanGet( Music.Access( "m1" ) )-(float)0.01);
    }
    if( XE_IO::KeyboardGet( XE_KEY_Q ) ) 
        Game.Audio.MusicPitch( Music.Access( "m1" ), Game.Audio.MusicPitchGet( Music.Access( "m1" ) )-(float)0.01);

    if( XE_IO::KeyboardGet( XE_KEY_W ) ) 
        Game.Audio.MusicPitch( Music.Access( "m1" ), Game.Audio.MusicPitchGet( Music.Access( "m1" ) )+(float)0.01);

    t_zmiana();

    Game.Camera.Update();
    //Teraz wyświetlanie:
    XE_STRING str;//tworzymy zmienną
    XE_STRING str2;
    str.Format(//   \/--Pierwszy argument to text. Za gdy chcemy dodać jakieś zmienne to dodajemy % i do tego literkę np:
        "Test dzwieku - Xenon Core:\nVolume:%f\nPan:%f\nPitch:%f\nCzas:%i / %i",//i- int, f-float i tak dalej...
        (float)Game.Audio.MusicVolumeGet( Music.Access( "m1" ) ),//i po kolei jak dodawaliśmy argumenty teraz je ustalamy
        (float)Game.Audio.MusicPanGet( Music.Access( "m1" ) ),
        (float)Game.Audio.MusicPitchGet( Music.Access( "m1" ) ),
        (int)Game.Audio.MusicPosition( Music.Access( "m1" ) ),
        (int)Game.Audio.MusicLength( Music.Access( "m1" ) )
        );
    str2.Format(
        "%s - %s\n%s",
        Artist.Get(),
        Title.Get(),
        Album.Get()
        );
    
    Game.Fonts( "font" )->Draw( str, XE_VECTOR( 10, 10 ) );//Wyświetlamy text
    Game.Fonts( "font" )->Draw( str2, XE_VECTOR( 10, 200 ) );
    
    XeRenderScene( XE_FLAG_SWAP | XE_FLAG_COLORBUFF | XE_FLAG_TRANSFORMIDENT );
}

//SCENY
SCENE(sGra)
{
    t_scene();//tworzymy okno itp
    m_add();
    Game.Audio.MusicPlay( utwor[aktualny] );//włączamy odtwarzanie utworu
    //Game.Audio.MusicRepeat( Music.Access( "m1" ), true );//i repeat(loop...jak się skończy to znowu sie odtwarza)
    
    ID3V1_TAG tag;
    C_AUDIO::GetID3v1(
        "data/music/m1.mp3",    
        &tag                    
        );
    Artist.Copy( tag.Artist,30            );
    Title.Copy( tag.Title, 30 );
    Album.Copy( tag.Album, 30 );

    XE_EVENTS::Execute( GameProgress );//i coś jak "step" w Game makerze...
    
    utwor.Free();
    Game.Cleanup();//czyścimy pamięć
    //I to tyle :D
}


#endif

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×