It's possible, yeah.
Here's a script if u want. What it does is when a player enters a zone, it plays music to them.
You can add any music to any zone (a zone can't have more than one music id)
Code:
//Zone Music Player.
//By Jotox/Classic
#include "StdAfx.h"
#include "Setup.h"
using namespace std;
static std::map< uint32, uint32 > ZoneMusicMap;
//Follow this to add music to a zone:
//FORMAT: ZoneMusicMap[ZONE ID] = SOUND ID;
//Ex. : ZoneMusicMap[ 1 ] = 1337;
//This example would play sound 1337 whenever a player entered zone 1.
void PlayMusic( Player * pPlayer, uint32 Music )
{
WorldPacket data(SMSG_PLAY_SOUND, 4);
data << Music;
pPlayer->GetSession()->SendPacket( &data );
}
void OnPlayerZone(Player * pPlayer, uint32 zone)
{
if( !pPlayer->IsInWorld() || !pPlayer->GetSession() )
return;
std::map< uint32, uint32>::iterator itr = ZoneMusicMap.find( zone );
if( itr != ZoneMusicMap.end() )
PlayMusic( pPlayer, itr.second );
}
void SetupZoneMusic(ScriptMgr * mgr)
{
mgr->register_hook(SERVER_HOOK_EVENT_ON_ZONE, &OnPlayerZone);
}