Skocz do zawartości
DobryZiom

XenonCore Test Dźwięku

Rekomendowane odpowiedzi

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

może :D A czy Xenon sam w sobie posiada zdatne do tego funkcje?

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

nom jak zmieniać utwory to będę wiedział...ale jak je wyszukać, np: z folderu?

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ę.

×