2017-02-18 2 views
0

У меня есть поток аудио, который я получаю через WebRTC. Я хочу проанализировать его и соединить следующий код, чтобы визуально показать бункеры.Анализ звукового потока без его дублирования

<div id="bins"> 
</div> 
<style> 
#bins { 
    position: fixed; 
    top: 20%; 
    width: 100%; 
    height: 40%; 
    -webkit-transition: 0.1s ease all; 
} 

.bin { 
    background-color: blue; 
    height: 100%; 
    width: 2px; 
    float: left; 
} 

</style> 
<script> 
function mediaAnalyze() { 
    var audio = webrtc.localStreams[0]; 
    audioCtx = new AudioContext(); 
    analyzer = audioCtx.createAnalyser(); 
    source = audioCtx.createMediaStreamSource(audio); 
    source.connect(analyzer); 
    analyzer.connect(audioCtx.destination); 
    analyzer.fftSize = 128; 

    var frequencyData = new Uint8Array(analyzer.frequencyBinCount); 

    var bins = []; 
    frequencyData.forEach(function(e) { 
     var e = document.createElement('div'); 
     e.classList.add('bin'); 
     document.getElementById('bins').appendChild(e); 
     bins.push(e); 
    }); 
    function renderFrame() { 
     analyzer.getByteFrequencyData(frequencyData); 
     frequencyData.forEach(function (data, index) { 
      bins[index].style.height = ((data * 100)/256) + "%"; 
     }); 
     requestAnimationFrame(renderFrame); 
    } 
    renderFrame(); 
}; 
mediaAnalyze(); 
</script> 

Анализатор работает должным образом, за исключением того, что я слышу обратную связь в результате его активации. Я предполагаю, что это связано с созданным мной AudioContext. Как отключить дублирование аудио/обратной связи при сохранении оригинала (так как мне нужно передать его через WebRTC)?

+0

В случае, если 'document.getElementById ('ящики')' 'быть document.getElementById ('бар')'? Или должен '

' быть '
'? – guest271314

+0

Да, спасибо, что указали, что у div должен быть идентификатор бункеров. Я скопировал вставку оригинала и переименовал теги, чтобы сделать пример чище, но забыл обновить там идентификатор. –

ответ

2

Не подключайте анализатор к месту назначения. просто комментарий

//analyzer.connect(audioCtx.destination); 

он должен остановить обратной enter image description here

+0

Отлично, спасибо. Не могу поверить, что это было что-то такое глупое на моей стороне. –

Смежные вопросы