-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathf0Analysis.scd
76 lines (56 loc) · 1.92 KB
/
f0Analysis.scd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
Run a pitch analysis periodically and send values over OSC
*/
// s.options.inDevice_("UMC202HD 192k");
// s.options.outDevice_("UMC202HD 192k");
s.waitForBoot({
//////////////////////////////////// synth def and busses
~inputCount = 2;
~oscSendPeriod = 0.05; //sec
Bus.clear;
// bus arrays, group per audio input
~meterBusses = Array.new;
~pitchBusses = Array.new;
~voicedBusses = Array.new;
~inputCount.do{|i|
~meterBusses = ~meterBusses.add(Bus.control(s, 1));
~pitchBusses = ~pitchBusses.add(Bus.control(s, 1));
~voicedBusses = ~voicedBusses.add(Bus.control(s, 1));
};
// Analyze audio features and copy them in control busses
SynthDef(\audioAnalyzer, {
|in=0, meterOut=0, pitchOut=0, voicedOut=0|
var input, amp, pitch, hasFreq, minFreq, maxFreq;
minFreq = 90;
maxFreq = 800;
input = SoundIn.ar(in);
amp = Amplitude.kr(input, releaseTime: 0.1).lag;
# pitch, hasFreq = Pitch.kr(input, minFreq:minFreq, maxFreq:maxFreq, downSample:2, median:10);
Out.kr(meterOut, amp);
Out.kr(pitchOut, (pitch * hasFreq / maxFreq).lag(1));
// Out.kr(voicedOut, (amp *10* hasFreq.linlin(0, 1, -1, 1)).lag(1));
Out.kr(voicedOut, hasFreq.lag(1));
}).add;
s.sync;
// Poll the value of a signal periodically, and send over the value via OSC.
~uiMachine = NetAddr.new("127.0.0.1", 12000);
SystemClock.sched(0.0,
{
~inputCount.do({|i|
~pitchBusses[i].get({|pitchVal|
~meterBusses[i].get({|ampVal|
~voicedBusses[i].get({|voicedVal|
// pitchVal.postln;
~uiMachine.sendMsg("/audio/chan_"++i, pitchVal, ampVal, voicedVal);
});
});
};
);
});
~oscSendPeriod;
};
);
~player1 = Synth(\audioAnalyzer, [\in, 0, \meterOut, ~meterBusses[0].index, \voicedOut, ~voicedBusses[0], \pitchOut, ~pitchBusses[0].index ] );
~player2 = Synth(\audioAnalyzer, [\in, 1, \meterOut, ~meterBusses[1].index, \voicedOut, ~voicedBusses[1], \pitchOut, ~pitchBusses[1].index ] );
};
);