2012-01-02 16 views
12

Bir şarkıyı analiz etmek ve ortalama ses frekansı belirli bir değerin altına düştüğünde işaretçiler oluşturmak için HTML5 web ses API'sini kullanıyorum. Mevcut AudioNode altyapısını kullanarak bunu yapmayı başardım ancak ses sadece ve sadece şarkı çalındığında analiz edilir.Bir mp3 dosyasının şarkı frekansını HTML5 web ses API'sini kullanarak ayıklama

Ancak ne istediğim, şarkıyı önceden analiz etmektir, bu yüzden sessizlik işaretleyicilerini ayıklayabilir ve kullanıcının şarkı boyunca hareket etmek için kullanabileceği CUE düğmelerine dönüştürebilirim.

Açıkçası, özellikle şarkı 50 dakikalık bir podcast gibi bir şey varsa, bunu analiz etmek için önce tüm şarkıyı çalmaya güvenmek çok yavaş olacaktır. PlaybackRate'i 10 kata kadar hızlandırmayı denedim, ancak bu yardımcı olmuyor.

Çözümün Web ses API'sini atlama ve ham ArrayBuffer'ı analiz etmede yattığını varsayalım, ancak nereden başlayacağımı gerçekten bilmiyorum.

Öneriler? Fikirler?

cevap

5

Ben tam bu açıklayan bir sunumda slayt bulmak mümkün olmuştur: API here

Normal kullanım gerçek zamanlı olarak ses işlenmesidir.

Tek sorun ses API benim anlayış 'hile' kod örneğinden ne olduğunu görmek için çok basit bir yaklaşım olduğunu: Bunun yerine, neden tüm sistem üzerinden ses-sürecini önceden ve alabilirsiniz:

var sampleRate = 44100.0; 
var length = 20; // seconds 
var ctx = new webkitAudioContext(2, sampleRate * length, sampleRate); 
ctx.oncomplete = function(e) { 
    var resultAudioBuffer = e.renderedBuffer; 
    ... 
}; 

function convolveAudio(audioBuffer, audioBuffer2) { 
    var source = ctx.createBufferSource(); 
    var convolver = ctx.createConvolver(); 
    source.buffer = audioBuffer; 
    convolver.buffer = audioBuffer2; 

    // source -> convolver -> destination. 
    source.connect(convolver); 
    convolver.connect(ctx.destination); 

    source.noteOn(0); 
    ctx.startRendering(); 
} 

Ama bunun tam olarak vermek umuyordum cevap olmasa bile, tamamen rahat bırakın hiç olmadığı kadar en azından bu paylaşılmasının daha iyi olacağını düşündük.

+1

Üç yılda ne kadar öğreniyor olursanız olun, bu cevabın üzerinde bir cevap aldınız ve bunun üzerinden okumak artık çocuk oyuncağı gibi görünüyor :). –

-2

Yukarıdaki evrişim, sesinizi zaman içindeki bir yoğunluğa, frekans üzerindeki bir yoğunluğa taşıyan bir fourier dönüşümüdür. Javascript fourier dönüşümü googling öneririz. Aradığına bağlı olarak, konuyla ilgili birkaç yararlı bağlantı gördüm.