2013-10-16 1 views
14

HTML5에 createMediaElementSource (YouTube 비디오 시각화 그리기). 그게 가능하니?youtube stream의 오디오 스펙트럼 생성하기 HTML5

예를 들어 주시겠습니까? 난 그냥 전통적인 유튜브 플레이어를 추가하고 스펙트럼/시각화 아래에, 나는 인터넷에서 MP3 버전을 발견했다.

여기에 오디오/mp3 버전이 있습니다. YouTube 동영상 스트림에서 작동하는지 전혀 모르겠습니다.

<style type="text/css"> 
div#mp3_player{ width:500px; height:60px; background:#000; padding:5px; margin:50px auto; } 
div#mp3_player > div > audio{ width:500px; background:#000; float:left; } 
div#mp3_player > canvas{ width:500px; height:30px; background:#002D3C; float:left; } 
</style> 
<script> 
// Create a new instance of an audio object and adjust some of its properties 
var audio = new Audio(); 
audio.src = '613814.mp3'; 
audio.controls = true; 
audio.loop = true; 
audio.autoplay = false; 
// Establish all variables that your Analyser will use 
var canvas, ctx, source, context, analyser, fbc_array, bars, bar_x, bar_width, bar_height; 
// Initialize the MP3 player after the page loads all of its HTML into the window 
window.addEventListener("load", initMp3Player, false); 
function initMp3Player(){ 
    document.getElementById('audio_box').appendChild(audio); 
    context = new webkitAudioContext(); // AudioContext object instance 
    analyser = context.createAnalyser(); // AnalyserNode method 
    canvas = document.getElementById('analyser_render'); 
    ctx = canvas.getContext('2d'); 
    // Re-route audio playback into the processing graph of the AudioContext 
    source = context.createMediaElementSource(audio); 
    source.connect(analyser); 
    analyser.connect(context.destination); 
    frameLooper(); 
} 
// frameLooper() animates any style of graphics you wish to the audio frequency 
// Looping at the default frame rate that the browser provides(approx. 60 FPS) 
function frameLooper(){ 
    window.webkitRequestAnimationFrame(frameLooper); 
    fbc_array = new Uint8Array(analyser.frequencyBinCount); 
    analyser.getByteFrequencyData(fbc_array); 
    ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas 
    ctx.fillStyle = '#00CCFF'; // Color of the bars 
    bars = 100; 
    for (var i = 0; i < bars; i++) { 
     bar_x = i * 3; 
     bar_width = 2; 
     bar_height = -(fbc_array[i]/2); 
     //fillRect(x, y, width, height) // Explanation of the parameters below 
     ctx.fillRect(bar_x, canvas.height, bar_width, bar_height); 
    } 
} 
</script> 
</head> 
<body> 
<div id="mp3_player"> 
    <div id="audio_box"></div> 
    <canvas id="analyser_render"></canvas> 
</div> 

답변

0

어쩌면 오디오를 다운로드하고 wavesurfer을 사용하는 것이 해결책일까요? Joriktos가 지적한 문제를 해결할 것입니다. 하지만 백 엔드 필요합니다.

+1

답변을 약간 확장하십시오. [How to Answer] (http://stackoverflow.com/help/how-to-answer)를 참조하십시오. – AgataB