Once I get that upgrade to 36-hour days, I will tackle that. – Mychaeel

Difference between revisions of "UE1:RMusicPlayer"

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search
m (Gametype integration (with save support))
m (Gametype integration (without save support))
Line 197: Line 197:
 
if(Level.NetMode != NM_DedicatedServer && Level.NetMode != NM_ListenServer)
 
if(Level.NetMode != NM_DedicatedServer && Level.NetMode != NM_ListenServer)
 
{
 
{
//we have to find music player in Entry level
+
if(NewPlayer.GetEntryLevel() != none)
foreach NewPlayer.GetEntryLevel().AllActors(class'RMusic_Player',RMusic_Player)
+
 
{
 
{
//then we stops currently played song
+
//we have to find music player in Entry level
RMusic_Player.RMusic_Stop(false);
+
foreach NewPlayer.GetEntryLevel().AllActors(class'RMusic_Player',RMusic_Player)
//and eventually add info about player/current level
+
if( RMusic_Player.bAuthoritative )
+
 
{
 
{
RMusic_Player.RMusic_LocalPlayer = NewPlayer;
+
//then we stops currently played song
RMusic_Player.RMusic_OldLevel = NewPlayer.Level;
+
RMusic_Player.RMusic_Stop(false);
 +
//and eventually add info about player/current level
 +
if( RMusic_Player.bAuthoritative )
 +
{
 +
RMusic_Player.RMusic_LocalPlayer = NewPlayer;
 +
RMusic_Player.RMusic_OldLevel = NewPlayer.Level;
 +
}
 
}
 
}
 
}
 
}

Revision as of 11:34, 26 May 2008

About

RMusicPlayer is new version of RvMp3Player. The code has been completly rewritten, this time using FMODEX. Features:

  • Mod support (you can subclass RMusic_Player to define new music directory)
  • Save support in SP games
  • Supports many audio files (flac, mp2, mp3, ogg, wma, wav)
  • Crossfades/fades in/fades out music

Current bugs (will be fixed):

  • DSP plugins - everything loads fine, but I can't hear difference :)
  • You can't have more then one DSP plugin
  • Additional codecs doesn't work

ToDo:

  • Add complete readme about RMusic_Player native function, non-native functions and variables
  • Fix DSP plugin architecture
  • Fix loading additional codecs

Class tree

+- Actor_(UT)
   +- RMusic_Component - holds everything toghether and implements some basic functions
       +- RMusic_Controller - controls RMusic_Player
       +- RMusic_Player - plays music. This class is spawned either by RMusic_Controller or game type/console.
       +- RMusic_Save - spawned by RMusic_Controller. Stores information about last used RMusic_Controller

Usage

In ActorBrowser find Actor->RMusic_Component->RMusic_Controller, place it on map and configure it.

RMusic_Controller properties

You can configure following properties:

Name: PlayerClass

Type: class<RMusic_Player>

Description: Player class (if you want to have own music directory)


Name: RMusic_File

Type: string

Description: Music file to play


Name: RMusic_PlayAtStartup

Type: bool

Description: Should it be played at level start


Name: RMusic_MuteUMX

Type: bool

Description: If true will mute all music in umx files


Name: RMusic_BroadcastToAll

Type: bool

Description: If true, it'll broadcast functions to all players


Name: RMusic_bUnloadPreviousDSP

Type: bool

Description: If true, all DSP plugins will be unloaded


Name: RMusic_bOwnFadeUpdateTime

Type: bool

Description: If true, RMusic_OwnFadeUpdateTime will be used instead of default FaderUpdateTime in RMusic_Player


Name: RMusic_OwnFadeUpdateTime

Type: float

Description: Defines how fast music will fade in/out


Name: RMusic_bUseSaveControl

Type: bool

Description: If true, special RMusic_Save will be spawned to track last used controller


Name: RMusic_DSPPlugins[16]

Type: string

Description: DSP plugins to load


Name: Action

Type: ENum

Values:

  • AC_Play - Plays music
  • AC_Stop - Stops music
  • AC_ShutDown - Shutdown FMODEX (avoid this one ;) )

Description: Action


Name: RMusic_PlayType

Type: ENum

Values:

  • PT_Loop - Loops music
  • PT_PlayOnce - Plays once

Description: Play type


Name: RMusic_Transition

Type: ENum

Values:

  • TRANS_Instanly - Instant transition
  • TRANS_Fade - Smooth fade

Description: Transition type

Advanced usage (gametype/console integration)

RMusicPlayer can be also integrated with gametypes, console.

Gametype integration (with save support)

Subclass of SinglePlayer2 (SinglePlayer2 is part of OldSkool by UsAaR33)

class RMusic_SingleGameInfo extends SinglePlayer2;
 
event PostLogin( playerpawn NewPlayer )
{
	local RMusic_Controller RMusic_Controller;
	local RMusic_Save RMusic_Save;
	local RMusic_Player RMusic_Player;
 
        Super.PostLogin(NewPlayer);
 
	if(Level.NetMode != NM_DedicatedServer && Level.NetMode != NM_ListenServer)
	{
		if(NewPlayer.GetEntryLevel() != none)
		{
			//we have to find music player in Entry level
			foreach NewPlayer.GetEntryLevel().AllActors(class'RMusic_Player',RMusic_Player)
			{
				//then we stops currently played song
				RMusic_Player.RMusic_Stop(false);
				//and eventually add info about player/current level
				if( RMusic_Player.bAuthoritative )
				{
					RMusic_Player.RMusic_LocalPlayer = NewPlayer;
					RMusic_Player.RMusic_OldLevel = NewPlayer.Level;
				}
			}
		}
		//we have to found save part
		foreach AllActors(class'RMusic_Save', RMusic_Save)
		{
			//we have to check if we have saved controller
			if(RMusic_Save.SavedController != none)
			{
				RMusic_Controller=RMusic_Save.SavedController;
				break;
			}
		}
		//if saved controller is found, we have to restore music
		if(RMusic_Controller != none) RMusic_Controller.EVENT_Player();
	}
}

Gametype integration (without save support)

Subclass of coopgame2 (coopgame2 is part of OldSkool by UsAaR33)

class RMusic_CoopGameInfo extends coopgame2;
 
event PostLogin( playerpawn NewPlayer )
{
	local RMusic_Controller RMusic_Controller;
	local RMusic_Save RMusic_Save;
	local RMusic_Player RMusic_Player;
 
	Super.PostLogin(NewPlayer);
 
	if(Level.NetMode != NM_DedicatedServer && Level.NetMode != NM_ListenServer)
	{
		if(NewPlayer.GetEntryLevel() != none)
		{
			//we have to find music player in Entry level
			foreach NewPlayer.GetEntryLevel().AllActors(class'RMusic_Player',RMusic_Player)
			{
				//then we stops currently played song
				RMusic_Player.RMusic_Stop(false);
				//and eventually add info about player/current level
				if( RMusic_Player.bAuthoritative )
				{
					RMusic_Player.RMusic_LocalPlayer = NewPlayer;
					RMusic_Player.RMusic_OldLevel = NewPlayer.Level;
				}
			}
		}
	}
}

Console integration

Subclass of UTConsole

class RMusic_Console extends UTConsole;
 
function DrawLevelAction( canvas C )
{
	local RMusic_Player RMusic_Player;
	local PlayerPawn PP;
 
	if ( Viewport.Actor.Level.LevelAction == LEVACT_Loading ) // Loading Screen
	{
		PP = Root.GetPlayerOwner();
		if(PP != none)
		{
			foreach PP.GetEntryLevel().AllActors(class'RMusic_Player', RMusic_Player) break;
 
			if (RMusic_Player != none) RMusic_Player.RMusic_Stop(false);
		}	
	}
	Super.DrawLevelAction(C);
}

Download

link: [1]