First: as an experienced web user, I beg you to at the very least offer an on/off button for the music. I am very much of the opinion that any multimedia should be in the user's control and preferably turned off unless the user requests it on. I hate going to a site and being scared out my brains when music starts out of nowhere (or videos with sound, etc).
You will need to use ajax, yes. You would create a navigation header, your music bar footer (with off button!) and a content area. Any navigation in the site would trigger an ajax function to retrieve that content and replace the current content.
Something like:
===================================================================
home | about | content | more content | contact
-------------------------------------------------------------------
content of page
-------------------------------------------------------------------
MusicPlayer [off/on]
===================================================================
Where each of the navbar links is tied to a js function that requests the content from the server (based on the link id or href) and returns false (so the link doesn't actually load), and then replaces the current content with the requested content.
In jquery:
$("#navbar a").click(function(() {
$("#content").load("somescript.php", content = $("this").attr("id"));
});
One last thing:
If you go this route, the page URL will not change, so this can affect bookmarking and people forwarding specific pages to each other.
Since you asked, here's a simple model for the PHP that the ajax talks to:
<?php
$home_page = (!($_GET)) ? true : false;
$content = (!($home_page)) ? $_GET['content'] : 'home';
if ($home_page) {
include("header.php"); //some script that has your header content above the content div.
}
//This part always gets output. So you don't have to worry about the method that requests it.
include($content.".php"); //some script or html of that content.
//Notice that it always defaults to home in case there is no $_GET.
// Be careful, though. Now someone could put in "www.yoursite.org/index.php?content="blah"
// and they would get the content but no header or footer!
if($home_page) {
include("footer.php"); // Just like the header.
}
?>