26
ofxTonic Frequency Modulation

ofxTonic und Sound

Embed Size (px)

DESCRIPTION

ofxTonic

Citation preview

Page 1: ofxTonic und Sound

ofxTonicFrequency Modulation

Page 2: ofxTonic und Sound

setup

1. ofxAddons : ofxTonic https://github.com/TonicAudio/ofxTonic !2. Accelerate.frameworks !*. TonicAudio (Andere Beispiele) https://github.com/TonicAudio/Tonic

Page 3: ofxTonic und Sound

import Accelerate.framework

1

2

3

Page 4: ofxTonic und Sound

import Accelerate.framework

1

2

Page 5: ofxTonic und Sound

import Accelerate.framework

Page 6: ofxTonic und Sound

code basic

Page 7: ofxTonic und Sound

code

- .h !#include "ofxTonic.h" !using namespace Tonic; ofxTonicSynth synth;

- .cpp !ofSoundStreamSetup(2, 0, this, 44100, 256, 4); __SyntCode__ synth.setOutputGen( __output__ ); !!void ofApp::audioRequested(float* output, int bufferSize, int nChannels){ synth.fillBufferOfFloats(output, bufferSize, nChannels); }

Page 8: ofxTonic und Sound

simple Tone

Page 9: ofxTonic und Sound

synth code

Generator sinTone = SineWave().freq(440); synth.setOutputGen(sinTone);

Page 10: ofxTonic und Sound

simple Parameter

Page 11: ofxTonic und Sound

code

ControlParameter _fq = synth.addParameter(„Frequency"); !Generator sinTone = SineWave().freq(_fq); !!synth.setParameter("Frequency", mouseY);

mouseY

Frequency (in setParameter)

_fq (in addParameter)

_fq

Page 12: ofxTonic und Sound

simple Trigger

Page 13: ofxTonic und Sound

ADSR

http://en.wikipedia.org/wiki/Synthesizer#ADSR_envelope

Page 14: ofxTonic und Sound

code

ControlParameter _trigger = synth.addParameter("Trigger"); Generator env = ADSR().attack(0).decay(1).sustain(0).release(0).trigger(_trigger); !synth.setParameter("Trigger", 1); synth.setParameter("Frequency", 440);

Trigger ( if key == 1 )

Trigger (in setParameter)

_trigger (in addParameter)

ADSR(). trigger( _trigger )

Page 15: ofxTonic und Sound

FM_01 Code

Page 16: ofxTonic und Sound

synth code

- in setup() ! // Parameter ControlParameter triggerPitch = synth.addParameter("triggerPitch"); ControlParameter amountMod = synth.addParameter("amountMod"); ControlParameter amountFQ = synth.addParameter("amountFQ"); ControlParameter envelopTrigger = synth.addParameter("trigger"); ! // Main Fq Generator mainFq = ControlMidiToFreq().input(triggerPitch).smoothed(); // Modulation Fq Generator rModFq = mainFq * amountFQ; Generator modulation = SineWave().freq( rModFq ) * rModFq * amountMod; // Tone Generator Generator tone = SineWave().freq(mainFq + modulation); // Envelop Generator Generator env = ADSR().attack(0.001).decay(0.5).sustain(0).release(0).trigger(envelopTrigger).legato(false); // Output synth.setOutputGen( tone * env * 0.75 ); ofAddListener(ofEvents().keyPressed, this, &ofApp::keyPressedOne);

Page 17: ofxTonic und Sound

synth diagram

Parameter Main Fq Modulation Fq

Tone Generator Envelop Generator

Ouput

triggerPitch amountMod amountFQ envelopTrigger

Page 18: ofxTonic und Sound

code diagram

ControlParameter triggerPitch = synth.addParameter(„triggerPitch“); ControlParameter envelopTrigger = synth.addParameter("trigger");

synth.setParameter("trigger", 1); synth.setParameter("triggerPitch", 48);

KeyPressed

Generator mainFq = ControlMidiToFreq().input(triggerPitch).smoothed(); Generator env = ADSR().~~trigger(envelopTrigger).legato(false);

Page 19: ofxTonic und Sound

Input

Page 20: ofxTonic und Sound

code

-.h !void audioReceived(float* input, int bufferSize, int nChannels); RingBufferWriter inputBuffer;

-.cpp !ofSoundStreamSetup(2, 2, this, 44100, 256, 4); RingBuffer _inputS; inputBuffer = RingBufferWriter("_inputS", 256, 4); RingBufferReader inputReader = RingBufferReader().bufferName(„_inputS"); !void ofApp::audioReceived(float* input, int bufferSize, int nChannels){ inputBuffer.write(input, bufferSize, nChannels); }

Page 21: ofxTonic und Sound

input diagram

audio received inputBuffer

RingBufferReader (RingBuffer)

Ouput

RingBufferWriter ( Buffer Setup )

Page 22: ofxTonic und Sound

Filter

Page 23: ofxTonic und Sound

code

LPF12 lpf12 = LPF12().Q(10).cutoff(400); Generator outputFilter = inputReader >> lpf12;

LPF HPF BPF

inputReader

lpf12

outputFilter

http://en.wikipedia.org/wiki/Low_pass_filter

Page 24: ofxTonic und Sound

Reverb

Page 25: ofxTonic und Sound

code

ControlParameter __Parameter__ = synth.addParameter(„__NAME__“,__VALUE__); ! Reverb reverb = Reverb() .preDelayTime(preDelay) .inputLPFCutoff(inputLPF) .inputHPFCutoff(inputHPF) .decayTime(time) .decayLPFCutoff(lowDecay) .decayHPFCutoff(hiDecay) .stereoWidth(stereo) .density(density) .roomShape(shape) .roomSize(size) .dryLevel(ControlDbToLinear().input(dry)) .wetLevel(ControlDbToLinear().input(wet)); Generator output = inputReader >> reverb;

inputReader

reverb

output

Page 26: ofxTonic und Sound

code

http://www.soundonsound.com/sos/jul08/articles/reverb1.htm