AudioContext.createWaveShaper()
åºçº¿
广æ³å¯ç¨
èª 2021å¹´4æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
AudioContext æ¥å£ç createWaveShaper() æ¹æ³åå»ºäº è¡¨ç¤ºé线æ§å¤±ççWaveShaperNodeã该èç¹éå¸¸è¢«ç¨æ¥ç»é³é¢æ·»å å¤±çææ
è¯æ³
js
var audioCtx = new AudioContext();
var distortion = audioCtx.createWaveShaper();
è¿å
示ä¾
ä¸é¢çä¾åå±ç¤ºäº AudioContext å建ä¸ä¸ªæ³¢å½¢æ´å½¢å¨èç¹çåºæ¬ç¨æ³ãæå ³åºç¨ç¤ºä¾/ä¿¡æ¯ï¼è¯·æ¥çæä»¬ç voice-change-O-matic demo æ¼ç¤ºï¼æå ³ä»£ç ï¼è¯·åé app.jsï¼ã
夿³¨ï¼å®ç°å¤±çæ²çº¿å¹¶ä¸æ¯ç®åçäºæ ï¼ä½ å¯è½éè¦å°å¤æ¾èµææ¥æ¾å°è¿æ ·çç®æ³ãæä»¬å¨Stack Overflow䏿¾å°äºä»¥ä¸çå¤±çæ²çº¿ä»£ç
js
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var distortion = audioCtx.createWaveShaper();
...
function makeDistortionCurve(amount) {
var k = typeof amount === 'number' ? amount : 50,
n_samples = 44100,
curve = new Float32Array(n_samples),
deg = Math.PI / 180,
i = 0,
x;
for ( ; i < n_samples; ++i ) {
x = i * 2 / n_samples - 1;
curve[i] = ( 3 + k ) * x * 20 * deg / ( Math.PI + k * Math.abs(x) );
}
return curve;
};
...
distortion.curve = makeDistortionCurve(400);
distortion.oversample = '4x';
è§è
| è§è |
|---|
| Web Audio API > # dom-baseaudiocontext-createwaveshaper > |