[js] Audio 사용하기

soob·2022년 1월 20일
0

javascript

목록 보기
3/4

js로 오디오를 컨트롤하려고 js Audio 객체를 생성하여 구현하였다.

<script>
$(function((){
//오디오 플레이어
 	const audioPlayer = $('.mn_audio-player');
 	var url = '';
    
	if('${resDs.MT0010BC.subjectMediaInfo.EX_PATH}'.indexOf('/UPLOAD') == -1){
		url = '/UPLOAD'+'${resDs.MT0010BC.subjectMediaInfo.EX_PATH}';
	}else{
		url = '${resDs.MT0010BC.subjectMediaInfo.EX_PATH}';
	}
		
	const audio = new Audio(url);
	const volumeBarInput = $('.volume-bar input');

	//time init
	audio.onloadedmetadata = function() {
			
    //총 시간 넣기
      $('.time-text .total').text(getTimeCodeFromNum(audio.duration));
      audio.volume = .5;
      volumeBarInput.val(audio.volume * 100);
      $('.volume-bar span').css('width', audio.volume * 100+'%');

    }

	//재생 바
	const timeline = $('.timeline');
	$('.timeline').click(function(e){
		const timelineWidth = $(this).width();
		const timeSeek = e.offsetX / parseInt(timelineWidth) * audio.duration;
			audio.currentTime = timeSeek;
	});
		
	 //volume
	 const volumeBar = $('.volume-bar');
		
	  volumeBarInput.on('change', function(e){
		const barWidth = volumeBar.width();
		let newVolume = $(this).val();

		audio.volume = newVolume/100;

		$('.volume-bar span').css('width', newVolume+'%');
	  });

	//play button 	
	$('.player').click(function(){
		if($(this).hasClass('on')) {
			//play
			$(this).removeClass('on');
			audio.pause();
		} else {
			//play off
			$(this).addClass('on');
			audio.play();
		}
	});

	//재생시간 초마다 시간 변경
	setInterval(()=>{
		let nowTime = $('.time-text .time').text();
		let totalTime = $('.time-text .total').text();
		const timeBar = $('.time-bar');
		let timeData = audio.currentTime / audio.duration * 100+'%';
		timeBar.width(timeData);

		//현재 재생시간 넣기
		$('.time-text .time').text(getTimeCodeFromNum(audio.currentTime));
		// 종료되면 처음으로
		if(timeData == '100%'){
			$('.player').removeClass('on');
			timeBar.css('width','0%');
		}

	}, 500);

	//volume button
	$('.volume-btn').on('click', function(){
		$(this).toggleClass('off');
		timeline.toggleClass('big');

		if($(this).hasClass('off')) {
		//off
		audio.volume = 0;
		$('.volume-bar').hide();	
	} else {
		//on
		audio.volume = volumeBarInput.val()/100;
		$('.volume-bar').show();
	}
});
//audio player end
});

//시간 형식 변경 함수
function getTimeCodeFromNum(num) {
	num = parseInt(num);
	const hours = parseInt(num/3600);
	const minutes = parseInt((num%3600)/60);
	const seconds = parseInt(num%60);

	if (hours === 0) return minutes+":"+String(seconds % 60).padStart(2, 0);
	return String(hours).padStart(2, 0)+":"+minutes+String(seconds % 60).padStart(2, 0);
}
</script>

https://codepen.io/EmNudge/embed/rRbLJQ?default-tab=js%2Cresult&theme-id=light

const audio = new Audio(url);

오디오 파일 경로를 넣어 파일에 대한 정보를 받아온다.
볼륨과 재생시간 등의 데이터를 받아올 수 있다.

주어진 데이터를 사용하여 재생바와 볼륨 조절 바를 만들었다.
모바일에서 사용할 경우는 볼륨 조절이 작동하지 않았다.

0개의 댓글