홈피 배경음악 랜덤 재생 스크립트 > script

본문 바로가기
사이트 내 전체검색

script

홈피 배경음악 랜덤 재생 스크립트

페이지 정보

작성자 서방님 댓글 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>

댓글목록

등록된 댓글이 없습니다.

Total 846건 23 페이지
게시물 검색

회원로그인

접속자집계

오늘
21
어제
302
최대
1,347
전체
155,082
Latest Crypto Fear & Greed Index

그누보드5
Copyright © 서방님.kr All rights reserved.