-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
156 lines (122 loc) · 3.15 KB
/
README
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
SImple SYnthetiser
------------------
FEATURES:
- real time midi synthetiser
- polyphonic management
- virgule fixe processing
EXEMPLE:
This is an exemple of instrument description. It will change soon.
======BEGINING OF THE INSTRUMENT DESCRIPTION======
instru carre {
data {
value polyphony_nb_voices=2;
}
voice {
data {
new buffer tmp;
}
square(T:midi_note_period, buff:tmp, level:midi_velo);
envolope(buff:tmp, duration:midi_note_duration);
}
}
======END OF THE INSTRUMENT DESCRIPTION======
In the future, there will have event handling and procedures:
======BEGINING OF THE INSTRUMENT DESCRIPTION======
module carre
{
process
{
data
{
in value param1=42;//with range(0,42);
in fixed freq(min:42, max:21000, default:42, precision:4);
out buffer output;
}
square(T:freq, buff:pouet);
}
}
instru pouet
{
data
{
in value voices_nb=42;
out buffer audio_output;
}
process voice=carre(value paramX:...); #creation, initialisation et affectation
process global #creation, definition, affectation
{
data
{
value tmp;
in value volume=42;
}
event voice
{
data
{
in value note;
in value velocity;
in value cord;
}
note2freq(note:note, freq:freq);
sound_bank_load(position:cord, output:sound);
create_voice(freq:freq);
}
process_voices(mixer:log, param1:42, output:audio_output);
}
}
======END OF THE INSTRUMENT DESCRIPTION======
Object will be needed to be able to change their states.
creation de voix
reception d'events
events routés par voix
Systeme|Instrument|Note
...
Wave forms: Sin, Square, Noise, Table(Base64), Whatever...
Enveloppe: ADSR, Whatever...
Filters: Low, High, Whatever...
Mixer: Whatever...
PIANO:WaForms+Env
CHROM_PERCUSSION:WaForms+Env
ORGAN:WaForms+Env+Mixer
GUITAR:WaForms+Env+Reverb
BASS:WaForms+Env
STRINGS:WaForms+Env
ENSEMBLE:WaForms+Env
BRASS:WaForms+Env
REED:WaForms+Env
PIPE:WaForms+Env
SYNTH_LEAD:WaForms+Env
SYNTH_PAD
SYNTH_EFFECTS
ETHNIC:?
PERCUSSIVE:Samples?:Noise
SOUND_EFFECTS:Samples
Integration to gstreamer ? What's that ?
...
View_sound: add spectrum.
INTERNALS:
INIT:
sisy load a file in a midi pipe or open a port.
for each chan, an instru is loaded, sisy.conf is parsed.
instru are build, voices are copied as affects and watches.
IO data are cloned.
PROCESS
sisy read on the port and dispatch the midi mesages on chans.
the chans fill the the instru, voices and midi IOs banks.
modules are processed, affects are done and callback are called.
mixing
audio_writing
que ca soit un piano, un orgue ou une guitare qui est syth'etis'e, on
a des ressources limit'ees qui sont les cordes (6 ou 88), les tubes
(un ou plein).
- La polyphonie dans ce cas consiste a activer ou non ces resources. -
Si on se trouve dans le cas ou l'on a plus de contraintes fixes, on
peux creer les resources suivant les besoins.
- La polyphonie dans ce cas consiste a r'epliquer les ressources autant
de fois que necessaire. -
Maintenant, on recois des notes a jouer avec une certaine velocit'ee,
et eventuellement certains parametres.
Quand on recois une note, dans le ca dur, ou utilise les ressources
dispo ou sinon, on cree les resources.
Schema audio et controles