홈피 배경음악 랜덤 재생 스크립트
페이지 정보
작성자 서방님 댓글 0건 조회 144회 작성일 07-11-16 00:41본문
시간을 미리 입력해서 종료시간에 맞추어 다른 곡을 재생 시킬 수 도 있겠지만
모든 노래의 시간을 알아야 하는 번거로움이 있지요 ..
중간에 정지했다가 들을 경우 다 듣기도 전에 시간이 초과되어 다른 곡으로 넘어갈 수 도 있구요 ..
님이 원하시는대로 할려면 우선 embed 대신에 media player 개체를 사용해야 합니다.
<object id="Player" classid="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" type="application/x-oleobject">
<param name="FileName" value="">
<param name="autosize" value="1">
<param name="autostart" value="1">
<param name="SendPlayStateChangeEvents" value="-1">
<PARAM NAME="ShowControls" VALUE="1">
</object>
위에 보시면 id="Player"가 보이시죠. 스크립트에서 이를 이용해서 컨트롤 합니다.
하지만 이것만 가지고 다되지는 않습니다.
스크립트가 media player 개체의 이벤트를 받아서 처리해줘야합니다.
즉, 지정된 곡의 재생이 끝나면 재생이 끝났다는 이벤트를 받아서 다음곡을 재생해줘야 하는 부분이 필요합니다.
다음처럼요 ...
<SCRIPT LANGUAGE="JavaScript" FOR="Player" EVENT="PlayStateChange(OldState, NewState)">
switch(NewState) {
case 0 : state.innerText = 'Stoped'; break;
case 1 : state.innerText = 'Paused'; break;
case 2 : state.innerText = 'Playing'; break;
case 3 : state.innerText = 'Waiting'; break;
case 4 : state.innerText = 'Scan Forward'; break;
case 5 : state.innerText = 'Scan Reverse'; break;
case 6 : state.innerText = 'Skip Forward'; break;
case 7 : state.innerText = 'Skip Backward'; break;
case 8 : state.innerText = 'Can't Open'; break;
}
// Play 종료 후
if (OldState==2 && NewState==0) nextsong();
</SCRIPT>
위와 같이하면 media player 개체의 상태가 바뀔때마다 해당 이벤트를 처리하게 됩니다.
자 .. 이제 nextsong() 만 구현하면 되겠군요 ..
// play next song
function nextsong() {
Player.Stop();
setTimeout('playsong()',500);
}
function playsong() {
index = Math.floor(Math.random() * song.length);
Player.FileName = song[index];
songtitle.innerText = title[index];
Player.Play();
}
앗! 우째 바로 다음곡 재생 안하구 타이머로 0.5초 후에 재생하냐구요?
글쎄요... 저도 고생해서 알아낸것인데 .. 바로 재생하면 정상적으로 동작을 안하더라구요.
약간의 지연시간을 주어야만 정상적으로 동작을 합니다.
다음은 전체 소스입니다.
<head>
<script>
// songs for play
song = new Array(4);
song[0] = 'bgm/02Clouds.wma'
song[1] = 'bgm/03.wma'
song[2] = 'bgm/05ClericMorning.wma'
song[3] = 'bgm/09.wma'
// song title
title = new Array(4);
title[0] = 'Clouds'
title[1] = '03.wma'
title[2] = 'Cleric Morning'
title[3] = '09.wma'
// play next song
function nextsong() {
Player.Stop();
setTimeout('playsong()',500);
}
function playsong() {
index = Math.floor(Math.random() * song.length);
Player.FileName = song[index];
songtitle.innerText = title[index];
Player.Play();
}
</script>
</head>
<body onload=nextsong()>
<object id="Player" classid="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" type="application/x-oleobject">
<param name="FileName" value="">
<param name="autosize" value="1">
<param name="autostart" value="1">
<param name="SendPlayStateChangeEvents" value="-1">
<PARAM NAME="ShowControls" VALUE="1">
</object><br>
<div id=songtitle></div>
<div id=state></div>
<SCRIPT LANGUAGE="JavaScript" FOR="Player" EVENT="PlayStateChange(OldState, NewState)">
switch(NewState) {
case 0 : state.innerText = 'Stoped'; break;
case 1 : state.innerText = 'Paused'; break;
case 2 : state.innerText = 'Playing'; break;
case 3 : state.innerText = 'Waiting'; break;
case 4 : state.innerText = 'Scan Forward'; break;
case 5 : state.innerText = 'Scan Reverse'; break;
case 6 : state.innerText = 'Skip Forward'; break;
case 7 : state.innerText = 'Skip Backward'; break;
case 8 : state.innerText = 'Can't Open'; break;
}
// Play 종료 후
if (OldState==2 && NewState==0) nextsong();
</SCRIPT>
</body>
댓글목록
등록된 댓글이 없습니다.