182 lines
6.8 KiB
HTML
182 lines
6.8 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<!--Converted with LaTeX2HTML 2002-2-1 (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>
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
|
|
<TITLE>Converting from audio signals to numeric control streams</TITLE>
|
|
<META NAME="description" CONTENT="Converting from audio signals to numeric control streams">
|
|
<META NAME="keywords" CONTENT="book">
|
|
<META NAME="resource-type" CONTENT="document">
|
|
<META NAME="distribution" CONTENT="global">
|
|
|
|
<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
|
|
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
|
|
|
|
<LINK REL="STYLESHEET" HREF="book.css">
|
|
|
|
<LINK REL="next" HREF="node45.html">
|
|
<LINK REL="previous" HREF="node43.html">
|
|
<LINK REL="up" HREF="node40.html">
|
|
<LINK REL="next" HREF="node45.html">
|
|
</HEAD>
|
|
|
|
<BODY >
|
|
<!--Navigation Panel-->
|
|
<A NAME="tex2html1203"
|
|
HREF="node45.html">
|
|
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
|
|
SRC="next.png"></A>
|
|
<A NAME="tex2html1197"
|
|
HREF="node40.html">
|
|
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
|
|
SRC="up.png"></A>
|
|
<A NAME="tex2html1191"
|
|
HREF="node43.html">
|
|
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
|
|
SRC="prev.png"></A>
|
|
<A NAME="tex2html1199"
|
|
HREF="node4.html">
|
|
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
|
|
SRC="contents.png"></A>
|
|
<A NAME="tex2html1201"
|
|
HREF="node201.html">
|
|
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index"
|
|
SRC="index.png"></A>
|
|
<BR>
|
|
<B> Next:</B> <A NAME="tex2html1204"
|
|
HREF="node45.html">Control streams in block</A>
|
|
<B> Up:</B> <A NAME="tex2html1198"
|
|
HREF="node40.html">Audio and control computations</A>
|
|
<B> Previous:</B> <A NAME="tex2html1192"
|
|
HREF="node43.html">Control streams</A>
|
|
<B> <A NAME="tex2html1200"
|
|
HREF="node4.html">Contents</A></B>
|
|
<B> <A NAME="tex2html1202"
|
|
HREF="node201.html">Index</A></B>
|
|
<BR>
|
|
<BR>
|
|
<!--End of Navigation Panel-->
|
|
|
|
<H1><A NAME="SECTION00740000000000000000">
|
|
Converting from audio signals to numeric control streams</A>
|
|
</H1>
|
|
|
|
<P>
|
|
We sometimes need to convert in the other direction, from an audio signal to a
|
|
sporadic one. To go in this direction, we somehow provide a series of logical
|
|
times (a time sequence), as well as an audio signal. For output we want
|
|
a control stream combining the time sequence with values taken from the
|
|
audio signal. We do this when we want to incorporate the signal's value as
|
|
part of a control computation.
|
|
|
|
<P>
|
|
For example, we might be controlling the amplitude of a signal using a
|
|
<TT>line~</TT> object as in Example A03.line.pd (Page
|
|
<A HREF="node21.html#sect1.ex.3"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
|
SRC="crossref.png"></A>). Suppose we wish to turn off the sound at a fixed rate
|
|
of speed instead of in a fixed amount of time. For instance, we might want to
|
|
re-use the network for another sound and wish to mute it as quickly as possible
|
|
without audible artifacts; we probably can ramp it off in less time if the
|
|
current amplitude is low than if it is high. To do this we must confect a
|
|
message to the <TT>line~</TT> object to send it to zero in an amount of
|
|
time we'll calculate on the basis of its current output value. This will
|
|
require, first of all, that we "sample" the <TT>line~</TT> object's
|
|
output (an audio signal) into a control stream.
|
|
|
|
<P>
|
|
The same issues of time delay and accuracy appear as for sporadic to audio
|
|
conversion. Again there will be a tradeoff between immediacy and accuracy.
|
|
Suppose as before that we are calculating audio in blocks of 4 samples, and
|
|
suppose that at logical time 6 we want to look at the value of an audio signal,
|
|
and use it to change the value of another one. As shown in Figure
|
|
<A HREF="node42.html#fig03.02">3.2</A> (part b), the most recently calculated value of the signal will
|
|
be for index 3 and the earliest index at which our calculation can affect a
|
|
signal is 4. We can therefore carry out the whole affair with a delay of only
|
|
one sample. However, we can't choose exactly <I>which</I> sample--the update
|
|
can occur only at a block boundary.
|
|
|
|
<P>
|
|
As before, we can trade immediacy for increased time accuracy. If it matters
|
|
exactly at which sample we carry out the audio-to-control-to-audio computation,
|
|
we read the sample of index 2 and update the one at index 6. Then if we want
|
|
to do the same thing again at logical time 7, we read from index 3 and update
|
|
at index 7, and so on. In general, if the block size is <IMG
|
|
WIDTH="16" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
|
SRC="img311.png"
|
|
ALT="$B$">, and for any
|
|
index <IMG
|
|
WIDTH="13" HEIGHT="13" ALIGN="BOTTOM" BORDER="0"
|
|
SRC="img75.png"
|
|
ALT="$n$">, we can always read the sample at index <IMG
|
|
WIDTH="45" HEIGHT="30" ALIGN="MIDDLE" BORDER="0"
|
|
SRC="img329.png"
|
|
ALT="$n-B$"> and affect the
|
|
one at index <IMG
|
|
WIDTH="13" HEIGHT="13" ALIGN="BOTTOM" BORDER="0"
|
|
SRC="img75.png"
|
|
ALT="$n$">. There is thus a round-trip delay of <IMG
|
|
WIDTH="16" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
|
SRC="img311.png"
|
|
ALT="$B$"> samples in going
|
|
from audio to control to audio computation, which is the price incurred for
|
|
being able to name the index <IMG
|
|
WIDTH="13" HEIGHT="13" ALIGN="BOTTOM" BORDER="0"
|
|
SRC="img75.png"
|
|
ALT="$n$"> exactly.
|
|
|
|
<P>
|
|
If we wish to go further, to being able to specify a fraction of a sample, then
|
|
(as before) we can use interpolation--at a slight further increase in delay.
|
|
In general, as in the case of sporadic-to-audio conversion, in most cases the
|
|
simplest solution is the best, but occasionally we have to do extra work.
|
|
|
|
<P>
|
|
<HR>
|
|
<!--Navigation Panel-->
|
|
<A NAME="tex2html1203"
|
|
HREF="node45.html">
|
|
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
|
|
SRC="next.png"></A>
|
|
<A NAME="tex2html1197"
|
|
HREF="node40.html">
|
|
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
|
|
SRC="up.png"></A>
|
|
<A NAME="tex2html1191"
|
|
HREF="node43.html">
|
|
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
|
|
SRC="prev.png"></A>
|
|
<A NAME="tex2html1199"
|
|
HREF="node4.html">
|
|
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
|
|
SRC="contents.png"></A>
|
|
<A NAME="tex2html1201"
|
|
HREF="node201.html">
|
|
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index"
|
|
SRC="index.png"></A>
|
|
<BR>
|
|
<B> Next:</B> <A NAME="tex2html1204"
|
|
HREF="node45.html">Control streams in block</A>
|
|
<B> Up:</B> <A NAME="tex2html1198"
|
|
HREF="node40.html">Audio and control computations</A>
|
|
<B> Previous:</B> <A NAME="tex2html1192"
|
|
HREF="node43.html">Control streams</A>
|
|
<B> <A NAME="tex2html1200"
|
|
HREF="node4.html">Contents</A></B>
|
|
<B> <A NAME="tex2html1202"
|
|
HREF="node201.html">Index</A></B>
|
|
<!--End of Navigation Panel-->
|
|
<ADDRESS>
|
|
Miller Puckette
|
|
2006-12-30
|
|
</ADDRESS>
|
|
</BODY>
|
|
</HTML>
|