summaryrefslogtreecommitdiff
path: root/muse2/doc/html/split/developer_docs/node10.html
blob: c8680be06e073df5950547c229f6e30444559eb0 (plain)
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<!--Converted with LaTeX2HTML 2008 (1.71)
original version by:  Nikos Drakos, CBLU, University of Leeds
* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Pre-Rendering tracks</TITLE>
<META NAME="description" CONTENT="Pre-Rendering tracks">
<META NAME="keywords" CONTENT="developer_docs">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<META NAME="Generator" CONTENT="LaTeX2HTML v2008">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">

<LINK REL="STYLESHEET" HREF="developer_docs.css">

<LINK REL="next" HREF="node11.html">
<LINK REL="previous" HREF="node9.html">
<LINK REL="up" HREF="node8.html">
<LINK REL="next" HREF="node11.html">
</HEAD>

<BODY >

<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html207"
  HREF="node11.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
 SRC="/usr/share/latex2html/icons/next.png"></A> 
<A NAME="tex2html203"
  HREF="node8.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
 SRC="/usr/share/latex2html/icons/up.png"></A> 
<A NAME="tex2html197"
  HREF="node9.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
 SRC="/usr/share/latex2html/icons/prev.png"></A> 
<A NAME="tex2html205"
  HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
 SRC="/usr/share/latex2html/icons/contents.png"></A>  
<BR>
<B> Next:</B> <A NAME="tex2html208"
  HREF="node11.html">Slotted editors</A>
<B> Up:</B> <A NAME="tex2html204"
  HREF="node8.html">Feature requests</A>
<B> Previous:</B> <A NAME="tex2html198"
  HREF="node9.html">Per-Part automation and more</A>
 &nbsp; <B>  <A NAME="tex2html206"
  HREF="node1.html">Contents</A></B> 
<BR>
<BR></DIV>
<!--End of Navigation Panel-->
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>

<UL CLASS="ChildLinks">
<LI><A NAME="tex2html209"
  HREF="node10.html#SECTION00421000000000000000">The feature</A>
<LI><A NAME="tex2html210"
  HREF="node10.html#SECTION00422000000000000000">Use cases</A>
<UL>
<LI><A NAME="tex2html211"
  HREF="node10.html#SECTION00422010000000000000">Saving CPU</A>
<LI><A NAME="tex2html212"
  HREF="node10.html#SECTION00422020000000000000">Exporting as audio project</A>
<LI><A NAME="tex2html213"
  HREF="node10.html#SECTION00422030000000000000">Mobile audio workstations</A>
<LI><A NAME="tex2html214"
  HREF="node10.html#SECTION00422040000000000000">Applying effects on MIDI tracks</A>
</UL>
<BR>
<LI><A NAME="tex2html215"
  HREF="node10.html#SECTION00423000000000000000">Possible scenarios</A>
<UL>
<LI><A NAME="tex2html216"
  HREF="node10.html#SECTION00423010000000000000">Setting it up</A>
<LI><A NAME="tex2html217"
  HREF="node10.html#SECTION00423020000000000000">Pre-rendering stuff</A>
<LI><A NAME="tex2html218"
  HREF="node10.html#SECTION00423030000000000000">Making changes</A>
</UL>
<BR>
<LI><A NAME="tex2html219"
  HREF="node10.html#SECTION00424000000000000000">Extensions</A>
<UL>
<LI><A NAME="tex2html220"
  HREF="node10.html#SECTION00424010000000000000">Automatic discovery of physical audio connections</A>
<LI><A NAME="tex2html221"
  HREF="node10.html#SECTION00424020000000000000">Audio export</A>
<LI><A NAME="tex2html222"
  HREF="node10.html#SECTION00424030000000000000">Cheap/Faked changes</A>
<LI><A NAME="tex2html223"
  HREF="node10.html#SECTION00424040000000000000">Intelligent re-recording</A>
</UL></UL>
<!--End of Table of Child-Links-->
<HR>

<H1><A NAME="SECTION00420000000000000000">
Pre-Rendering tracks</A>
</H1>

<H2><A NAME="SECTION00421000000000000000">
The feature</A>
</H2>
All tracks shall be able to be "pre-renderable". Pre-rendering shall
be "layered". Pre-rendering shall act like a transparent audio cache:
Audio data is (redundantly) stored, wasting memory in order to save CPU.

<P>
That is: Each track owns one or more wave-recordings of the length of
the song. If the user calls "pre-render" on a track, then this track
is played quasi-solo (see below), and the raw audio data is recorded
and stored in the "layer 0" wave recording. If the user has any effects
set up to be applied, then each effect is applied on a different layer
(creating layer 1, layer 2 etc).

<P>
This means, that also MIDI and drum tracks can have effects (which
usually only operate on audio, but we HAVE audio data because of this
prerendering).

<P>
Furthermore, MusE by default does not send MIDI events to the synthesizers
but instead just plays back the last layer of the prerecording (for
MIDI tracks), or does not pipe the audio data through the whole plugin
chain (causing cpu usage), but instead just plays back the last layer.
The hearable result shall be the same.

<P>
Once the user changes any parameter (automation data or plugins for
wave tracks, MIDI events or effect plugin stuff for MIDI tracks),
then MusE shall generate the sound for this particular track in the
"old" way (send MIDI data to synthes, or pipe audio data through plugins).
(So that the user will not even notice that MusE actually pre-renderered
stuff.) Either MusE automatically records this while playback (if possible)
or prompts the user to accordingly set up his cabling and then record
it. Or (temporarily) disables prerecording for this track, falling back
to the plain old way of generating sound.

<P>
<SPAN  CLASS="textit">Quasi-solo</SPAN> means: For wave tracks, just solo the track. For MIDI
tracks, mute all tracks which are not on the same synth (channel?),
and mute all <SPAN  CLASS="textit">note</SPAN> events which are not on the quasi-soloed track.
This causes MusE to still play any controller events from different
tracks, because they might have effects on the quasi-soloed track. (You
can have notes on channel 1 on one track and controller stuff on channel
1 on another track; then you would need quasi-solo to get proper results.)

<P>

<H2><A NAME="SECTION00422000000000000000">
Use cases</A>
</H2>

<H4><A NAME="SECTION00422010000000000000">
Saving CPU</A>
</H4>
On slow systems, this is neccessary for songs with lots of, or demanding
(or both) soft synthes / plugins. Even if the synth or plugin is so
demanding that your system is not able to produce sound in real-time,
then with this feature you'll be able to use the synth (this will make
editing pretty laggish, because for a change you need to re-render at
least a part before you can listen to it, but better than being unable
to use the synth at all!)

<P>

<H4><A NAME="SECTION00422020000000000000">
Exporting as audio project</A>
</H4>
Using pre-rendering on all tracks, you easily can export your project
as multi-track audio file (for use with Ardour or similar DAWs).
Just take the last layer of each track, and write the raw audio data
into the file, and you're done. (Maybe we are even able to write down
the raw-raw layer0 audio data plus information about used plugins and
settings etc..?)

<P>

<H4><A NAME="SECTION00422030000000000000">
Mobile audio workstations</A>
</H4>
You might want to work a bit on your audio projects on your notebook
while you're not at home, not having access to your hardware synthesizers.
Using this feature, you could have pre-recorded the stuff in your studio
before, and now can at least fiddle around with the non-hw-synth-dependent
parts of your song, while still having your <SPAN  CLASS="textit">full</SPAN> song with you.

<P>

<H4><A NAME="SECTION00422040000000000000">
Applying effects on MIDI tracks</A>
</H4>
If you have many physical audio inputs, you might already be able to
apply effect chains on MIDI tracks, by wiring the synthes' audio
outputs to your soundcard's inputs, and applying the effects on
dedicated input tracks you have to create. This requires you to have
expensive hardware, and is pretty complicated, because you need one
additional track per MIDI synth.

<P>
This feature allows you to apply effects on single MIDI tracks, and not
only on full MIDI synthes, and doesn't require you to be have that
many physical audio inputs (you need to manually replug your synthes,
however).

<P>

<H2><A NAME="SECTION00423000000000000000">
Possible scenarios</A>
</H2>

<H4><A NAME="SECTION00423010000000000000">
Setting it up</A>
</H4>
Create a wave track, MusE will allow you to set or unset prerendering
for every plugin in the plugin rack (recording the actual track is
useless because it would be a plain copy).
Create a MIDI track, MusE will ask you on which physical audio input
your synth is connected. Setting up multiple synthes on one physical
audio in is allowed, see below.

<P>

<H4><A NAME="SECTION00423020000000000000">
Pre-rendering stuff</A>
</H4>
When the user presses the "pre-render" button, all tracks which have
been changed since their last pre-rendering will be re-rendered.
If you have multiple hardware synthes set up as they were connected
to one physical audio input port, MusE will prompt you to first plug
the proper cable in.

<P>

<H4><A NAME="SECTION00423030000000000000">
Making changes</A>
</H4>
Change a note in a MIDI part, move or delete a part or change automation
parameters. MusE will temporarily disable the pre-rendered information
and instead generate the sound via sending out MIDI events, piping stuff
through effect chains or similar. If you play back the whole song, or
if you manually trigger a re-rendering of a track via the context menu,
MusE will play back the stuff, record it again and re-enable the
pre-rendered information.

<P>

<H2><A NAME="SECTION00424000000000000000">
Extensions</A>
</H2>

<H4><A NAME="SECTION00424010000000000000">
Automatic discovery of physical audio connections</A>
</H4>
The user plugs all (or only some) synthes' audio outs into the available
audio inputs, then runs automatic discovery. This will send MIDI events
to each synthesizer, and look on which audio in there's activity. Then
it will assume that the synthesizer is connected to that particular
audio in. Audio ins which show activity before any MIDI events were
sent are not considered, as they're probably connected to microphones
or other noise-generating non-synthes.

<P>

<H4><A NAME="SECTION00424020000000000000">
Audio export</A>
</H4>
As described in the Use cases, MusE can allow you to export your song
in some multitrack audio format.

<P>

<H4><A NAME="SECTION00424030000000000000">
Cheap/Faked changes</A>
</H4>
For expensive or unavailable synthes, changing the Volume midi controller,
the Pan controller or similar "easy" controllers will not trigger a
complete re-rendering, but instead "fake" the change, by changing
the volume data directly on the recorded wave. This might require some
learning and might even get pretty complicated.

<P>

<H4><A NAME="SECTION00424040000000000000">
Intelligent re-recording</A>
</H4>
For tiny changes, MusE shall only re-render the relevant part. If you
change some MIDI notes, then begin re-recording shortly before the
changes, and end re-recording as soon as the recorded stuff doesn't
differ to much from the stuff coming from the synth. Then properly
blend the old recording with the updated part.

<P>

<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html207"
  HREF="node11.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
 SRC="/usr/share/latex2html/icons/next.png"></A> 
<A NAME="tex2html203"
  HREF="node8.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
 SRC="/usr/share/latex2html/icons/up.png"></A> 
<A NAME="tex2html197"
  HREF="node9.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
 SRC="/usr/share/latex2html/icons/prev.png"></A> 
<A NAME="tex2html205"
  HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
 SRC="/usr/share/latex2html/icons/contents.png"></A>  
<BR>
<B> Next:</B> <A NAME="tex2html208"
  HREF="node11.html">Slotted editors</A>
<B> Up:</B> <A NAME="tex2html204"
  HREF="node8.html">Feature requests</A>
<B> Previous:</B> <A NAME="tex2html198"
  HREF="node9.html">Per-Part automation and more</A>
 &nbsp; <B>  <A NAME="tex2html206"
  HREF="node1.html">Contents</A></B> </DIV>
<!--End of Navigation Panel-->

</BODY>
</HTML>