오디오는 곡선 일뿐입니다. 따라서 오실레이터를 빌드하려면 곡선을 출력하는 데 알 고가 필요합니다. 아날로그가 아닌 디지털 방식의 소프트웨어는 곡선이 오디오 곡선의 순간 높이 인 시간의 샘플 (샘플)로 정의해야합니다. 일반적으로 이러한 샘플은 초당 44100 회 발생합니다. 헤르츠.
checkout 웹 오디오 API - 놀라 울 정도로 강력하고 매우 지원 될 것입니다. 그냥 유연성 체크 아웃 구글 관계자 내부자 다른 오디오 위젯 사이
Web Audio Playground
http://webaudioplayground.appspot.com/
에 의해 쓰여진이 데모의 감사의 마음을 얻기 위해,이 블랙 박스 오실레이터를 제공, 아직 당신은 자신의 롤과 합성 또는 파일 기반의 오디오를 렌더링 할 수 있습니다 실시간 데이터. 당신이이 노드
다음
을 연결하여 구축
function setup_onaudioprocess_callback(given_node) {
given_node.onaudioprocess = (function() {
return function(event) {
if (allow_synth) {
// console.log('inside main_glob callback onaudioprocess BUFF_SIZE ', BUFF_SIZE);
var synthesized_output_buffer;
// stens TODO - how to pass in own buffer instead of being given object: out so I can do a circular ring of such buffers
synthesized_output_buffer = event.outputBuffer.getChannelData(0); // stens TODO - do both channels not just left
var phi = 0,
dphi = 2.0 * Math.PI * given_node.sample_freq/
given_node.sample_rate;
for (var curr_sample = 0; curr_sample < given_node.BUFF_SIZE; curr_sample++, phi += dphi) {
synthesized_output_buffer[curr_sample] = Math.sin(phi);
}
given_node.sample_freq *= given_node.freq_factor;
if (given_node.sample_freq <
given_node.MIN_FREQ) {
given_node.freq_factor = given_node.increasing_freq_factor;
} else if (given_node.sample_freq > given_node.MAX_FREQ) {
given_node.freq_factor = given_node.decreasing_freq_factor;
}
// ---
audio_display_obj.pipeline_buffer_for_time_domain_cylinder(synthesized_output_buffer,
BUFF_SIZE, "providence_2");
}
};
}());
}
가이 노드에 관련하여 사용되는 (오실레이터) 음성을 합성하는 데 사용되는 콜백의 정의입니다 - 모듈 형 각각의 구성 요소는 노드라고 createScriptProcessor
function init_synth_settings(given_node, g_MIN_FREQ, g_MAX_FREQ, g_BUFF_SIZE, g_decreasing_freq_factor, g_increasing_freq_factor) {
given_node.MIN_FREQ = g_MIN_FREQ;
given_node.MAX_FREQ = g_MAX_FREQ;
given_node.sample_freq = given_node.MIN_FREQ; // Hertz
given_node.BUFF_SIZE = g_BUFF_SIZE;
given_node.decreasing_freq_factor = g_decreasing_freq_factor;
given_node.increasing_freq_factor = g_increasing_freq_factor;
given_node.freq_factor = g_increasing_freq_factor;
}
var this_glob_01 = audio_context.createScriptProcessor(BUFF_SIZE, 1, 1);
init_synth_settings(this_glob_01, 20, 300, BUFF_SIZE, 0.98, 1.01);
setup_onaudioprocess_callback(this_glob_01);
를 사용하여 생성이 고비
놀이터에 연결해 주셔서 감사합니다. 포스트의 나머지는 근본적으로 나의 질문의 rehash이었다. 어쩌면 내가 분명하지 않았을까요? 실제 구현 방법에 대한 팁을 찾고있었습니다. :) – simme
코드를 보내 주셔서 감사합니다! 그러나 당신은 이것을 어디에서 발견하고 있습니까? https://github.com/cwilso/WebAudio/에서? 내가 찾지 못해서 눈이 멀었나요? : 코드 위의 P – simme
은 내 첫 번째 JavaScript 프로젝트에서 가져온 것입니다. https://github.com/scottstensland/webgl-3d-animation/blob/master/src/webaudio_tooling.js –