W3C home > Mailing lists > Public > public-audio-dev@w3.org > March 2015

Re: Don't manage to modulate the playbackRate of a BufferSourceNode with an AudioNode

From: s p <sebpiq@gmail.com>
Date: Sun, 29 Mar 2015 17:07:33 +0300
Message-ID: <CAGKuoCUyxYE=_ZK4sjyeKYQH7jLrbXpfPrsYDc37P4W6wx3cSw@mail.gmail.com>
To: Chinmay Pendharkar <notthetup@gmail.com>
Cc: "public-audio-dev@w3.org" <public-audio-dev@w3.org>
> There was something tricky about getting a "DC" signal out of an
AudioNode.

What do you mean? More tricky than that :
https://github.com/sebpiq/WAAOffsetNode/blob/master/lib/WAAOffsetNode.js ?

I've been using the above as a DC for different uses, and it always worked
well. This is basically the same implementation as what I gave in the code
snippet I posted. I use it here for example
http://sebpiq.github.io/WAATableNode/demos/cello-drone.html  to add an
offset to an oscillator, in order to obtain a triangle wave between 0 and 1.

Using a WaveShaper to create this perfect sawtooth instead of what I tried
above is a good idea ... however I'd still want to understand why the above
snippet doesn't work :(

On Sun, Mar 29, 2015 at 4:16 PM, Chinmay Pendharkar <notthetup@gmail.com>
wrote:

> Ah yes! I remember a discussion on this issue before. There was something
> tricky about getting a "DC" signal out of an AudioNode. I keep thinking it
> was Soledad who was talking about it. Don't quite remember what why it was
> behaving this way.
>
> The other option is look at what Yotam is doing with Tone.js. He has an
> entire 'signalling' system based on such "DC" signals.
>
> https://github.com/TONEnoTONE/Tone.js/tree/master/Tone/signal
>
> I believe he generates by passing an osc through a wave shaper.
>
>
> https://github.com/TONEnoTONE/Tone.js/blob/master/Tone/signal/Signal.js#L346
>
> -Chinmay
>
> On Sun, Mar 29, 2015 at 6:11 PM, s p <sebpiq@gmail.com> wrote:
>
>> var context = new AudioContext()
>>         , phasorNode = context.createBufferSource()
>>         , frequencyNode = context.createBufferSource()
>>         , bufferFrequency = context.createBuffer(1, context.sampleRate,
>> context.sampleRate)
>>         , arrayFrequency = bufferFrequency.getChannelData(0)
>>         , bufferRamp = context.createBuffer(1, context.sampleRate,
>> context.sampleRate)
>>         , arrayRamp = bufferRamp.getChannelData(0)
>>         , acc = 0, step = 1 / context.sampleRate, i
>>
>>       for (i = 0; i < arrayRamp.length; i++) {
>>         arrayRamp[i] = (acc % 1)
>>         acc += step
>>       }
>>
>>       for (i = 0; i < arrayFrequency.length; i++) {
>>         arrayFrequency[i] = 200
>>       }
>>
>>       phasorNode.buffer = bufferRamp
>>       phasorNode.connect(context.destination)
>>       phasorNode.loop = true
>>       phasorNode.start(0)
>>
>>       frequencyNode.buffer = bufferFrequency
>>       frequencyNode.connect(phasorNode.playbackRate)
>>       frequencyNode.loop = true
>>       frequencyNode.start(0)
>>
>
>
>


-- 

*S├ębastien Piquemal*

 -----* @sebpiq*
 ----- http://github.com/sebpiq
 ----- http://funktion.fm
Received on Sunday, 29 March 2015 14:08:01 UTC

This archive was generated by hypermail 2.3.1 : Sunday, 29 March 2015 14:08:02 UTC