220 26289 <CAFdMc-0Dj4BGW0v8ORrcgGM54D5_ZunT2At0OWFEDFr-3CYWBw@mail.gmail.com> article
Path: news.gmane.org!not-for-mail
From: "dgutson ." <danielgutson@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: Any interest to adding audio support to the std library?
Date: Sun, 12 Jun 2016 00:00:01 -0300
Lines: 833
Approved: news@gmane.org
Message-ID: <CAFdMc-0Dj4BGW0v8ORrcgGM54D5_ZunT2At0OWFEDFr-3CYWBw@mail.gmail.com>
References: <f490fd21-cf07-4d7b-8936-c71c97a1ab9d@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: plane.gmane.org
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary=94eb2c08e626d0615d05350bf791
X-Trace: ger.gmane.org 1465700406 4231 80.91.229.3 (12 Jun 2016 03:00:06 GMT)
X-Complaints-To: usenet@ger.gmane.org
NNTP-Posting-Date: Sun, 12 Jun 2016 03:00:06 +0000 (UTC)
To: std-proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBDE3NBMV6UFBBM5A6O5AKGQE2NI5P5Y@isocpp.org Sun Jun 12 05:00:05 2016
Return-path: <std-proposals+bncBDE3NBMV6UFBBM5A6O5AKGQE2NI5P5Y@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-qg0-f69.google.com ([209.85.192.69])
	by plane.gmane.org with esmtp (Exim 4.69)
	(envelope-from <std-proposals+bncBDE3NBMV6UFBBM5A6O5AKGQE2NI5P5Y@isocpp.org>)
	id 1bBvd7-0007zh-Gn
	for gclcip-std-proposals@m.gmane.org; Sun, 12 Jun 2016 05:00:05 +0200
Original-Received: by mail-qg0-f69.google.com with SMTP id p34sf194275779qgp.3
        for <gclcip-std-proposals@m.gmane.org>; Sat, 11 Jun 2016 20:00:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=mime-version:in-reply-to:references:date:message-id:subject:from:to
         :x-original-sender:x-original-authentication-results:reply-to
         :precedence:mailing-list:list-id:x-spam-checked-in-group:list-post
         :list-help:list-archive:list-subscribe:list-unsubscribe;
        bh=aHRfScMO/MSG8m9Ip7S25iai7/LLpXsy5x8rjk2uvCw=;
        b=WoPZH3V5tlEy7VbQTspt4Rtn73tGTHSe98aNP0ooN/PGXAfYtynMi0rrWOl5FRtozd
         50zfCx2F1z7pyitKvUl8ADqh9qNJkLFjYIlFw1jubyfyDA7NbZ+zHsITziXrVRV6B/Cu
         s0OvOFWdgTjhy7IBv3KJp0rGpzm11crA0yMEw07iV/YfwB4ce8h+PJlg7aMpCICW71jj
         omFaR8A2k9XAwSyDnPgjYSmaZIZvjzeOcVhd4uISFqdJr6v/p0yR+p3kUGNIz2qNjk8a
         hoG9MeN2bcTrOTETUPiunoVhP1oZQktkeNJFgXZERN/FFMIRq1Dj8sGaXsx2XfuipIQp
         zDxA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20130820;
        h=x-gm-message-state:mime-version:in-reply-to:references:date
         :message-id:subject:from:to:x-original-sender
         :x-original-authentication-results:reply-to:precedence:mailing-list
         :list-id:x-spam-checked-in-group:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=aHRfScMO/MSG8m9Ip7S25iai7/LLpXsy5x8rjk2uvCw=;
        b=EsMQgbojK6veFtsVFf53xTEIwsxekqXGQ68W9OrNE0VfnR2zdwPLdRmGmkiJElQD2h
         b8rYXm7vCZdFHi+SpbvCcNF09aJgYSTRA5TbLLSEz3CVnlApNcu9glZCLobNmZzb6IEL
         RC8ZfS+5W7b4+9od5htct0mvFszSm8FLPZb5mgydl/VidA/5WPP8qcV6ujNNhxndoOkZ
         QiG5KhTPFQbkhCUw9Jhn1rHeTsuKBNjw4NKInkZ6l7lTEpQecvjtOYoWZEPKL38RVicB
         931a7RUSe0MN7hz5Q/oq6HixtJXEq60EYlOLnJKRJfpOYpZ5wcPWj9gMgWiyaEpi2flr
         e+8w==
X-Gm-Message-State: ALyK8tJAtoAZprkLZvFXekYSvxBpZ7A1i2yYufYjXpEib21NhgAmSxs3cI+yjDzK99reWw==
X-Received: by 10.129.160.73 with SMTP id x70mr7092165ywg.22.1465700404466;
        Sat, 11 Jun 2016 20:00:04 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.107.158.201 with SMTP id h192ls1352225ioe.59.gmail; Sat, 11
 Jun 2016 20:00:03 -0700 (PDT)
X-Received: by 10.36.20.206 with SMTP id 197mr8361914itg.24.1465700403225;
        Sat, 11 Jun 2016 20:00:03 -0700 (PDT)
Original-Received: from mail-it0-x236.google.com (mail-it0-x236.google.com. [2607:f8b0:4001:c0b::236])
        by mx.google.com with ESMTPS id z185si5886750itg.13.2016.06.11.20.00.03
        for <std-proposals@isocpp.org>
        (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Sat, 11 Jun 2016 20:00:03 -0700 (PDT)
Received-SPF: pass (google.com: domain of danielgutson@gmail.com designates 2607:f8b0:4001:c0b::236 as permitted sender) client-ip=2607:f8b0:4001:c0b::236;
Original-Received: by mail-it0-x236.google.com with SMTP id z189so24653496itg.0
        for <std-proposals@isocpp.org>; Sat, 11 Jun 2016 20:00:03 -0700 (PDT)
X-Received: by 10.36.138.197 with SMTP id v188mr8863473itd.82.1465700402092;
 Sat, 11 Jun 2016 20:00:02 -0700 (PDT)
Original-Received: by 10.36.61.144 with HTTP; Sat, 11 Jun 2016 20:00:01 -0700 (PDT)
Original-Received: by 10.36.61.144 with HTTP; Sat, 11 Jun 2016 20:00:01 -0700 (PDT)
In-Reply-To: <f490fd21-cf07-4d7b-8936-c71c97a1ab9d@isocpp.org>
X-Original-Sender: danielgutson@gmail.com
X-Original-Authentication-Results: mx.google.com;       dkim=pass
 header.i=@gmail.com;       spf=pass (google.com: domain of
 danielgutson@gmail.com designates 2607:f8b0:4001:c0b::236 as permitted
 sender) smtp.mailfrom=danielgutson@gmail.com;       dmarc=pass (p=NONE
 dis=NONE) header.from=gmail.com
Precedence: list
Mailing-list: list std-proposals@isocpp.org; contact std-proposals+owners@isocpp.org
List-ID: <std-proposals.isocpp.org>
X-Spam-Checked-In-Group: std-proposals@isocpp.org
X-Google-Group-Id: 399137483710
List-Post: <https://groups.google.com/a/isocpp.org/group/std-proposals/post>, <mailto:std-proposals@isocpp.org>
List-Help: <https://support.google.com/a/isocpp.org/bin/topic.py?topic=25838>, <mailto:std-proposals+help@isocpp.org>
List-Archive: <https://groups.google.com/a/isocpp.org/group/std-proposals/>
List-Subscribe: <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>,
 <mailto:std-proposals+subscribe@isocpp.org>
List-Unsubscribe: <mailto:googlegroups-manage+399137483710+unsubscribe@googlegroups.com>,
 <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>
Xref: news.gmane.org gmane.comp.lang.c++.isocpp.proposals:26289
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/26289>

--94eb2c08e626d0615d05350bf791
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Sorry top posting or if this has been already pointed.
Is there any reason this hasn't been submitted to Boost and let it mature
there for few years?
El 3/6/2016 6:37, <alexander.zywicki@gmail.com> escribi=C3=B3:

> I have drafted some ideas on how I think the c++ std library could suppor=
t
> audio functionality.
>
> I know that audio functionality is a very operating specific problem, but
> with the recent trend towards implementing a file-system library and
> possibly a graphics library I believe that audio would not be too much of=
 a
> reach anymore.
>
> Here are some of the ideas I have so far. I have both some code examples
> of the intended usage as well as a list of the types needed to implement
> the given examples.
>
> Please keep in mind my drafts are still very rough.
>
>
> CODE EXAMPLES
>
> //std::audio example 1 "single process"
> void example_1(){
>     double sample_rate =3D 44100;
>     std::size_t frame_size =3D2;
>     std::size_t buffer_size=3D128;
>
>     std::audio_context<float> ctx{sample_rate,buffer_size,frame_size};//c=
ontruct
> from values
>
>     std::astream_process<float> proc(ctx,[](std::iastream const& input,
> std::oastream& output){
>         std::frame_buffer<float>& buff =3D ctx.borrow_buffer();//borrow a
> buffer from the context for usage
>         //prevents the need for dynamic allocation of a temporary buffer
>         input>>buff;//stream data into buffer for manipulation
>         for(auto&& frame: buff){
>             frame=3D0.0;//do something with audio
>         }
>         output<<buff;//stream to output
>     });//dsp object
>     //uses implied routing equivilent to
>     //std::aout<<proc<<std::ain;
>     //
>
>     proc.start();
>     //do other stuff
>     proc.stop();
> }
>
> //std::audio example 2 "process group"
> void example_2(){
>
>     std::audio_context<float> ctx;//default context created with
> std::default_* values
>
>     //version 1: capture context via lambda
>     std::astream_process<float> proc1(ctx,[&ctx](std::iastream const&
> input, std::oastream& output){
>         std::frame_buffer<float>& buff =3D ctx.borrow_buffer();
>         input>>buff;
>         for(auto&& frame: buff){
>             frame*=3D0.5;
>         }
>         output<<buff;
>     });//dsp object
>
>     //version 2: have context passed as argument
>     std::astream_process<float> proc2(ctx,[](std::iastream const& input,
> std::oastream& output,std::audio_context<float> const& context){
>         std::frame_buffer<float>& buff =3D ctx.borrow_buffer();
>         input>>buff;
>         for(auto&& frame: buff){
>             frame*=3D2.0;
>         }
>         output<<buff;
>     });
>
>     std::process_group<float> pgroup;//a group of processes that will
> happen consecutivley
>     pgroup.push(proc1);//add to group
>     pgroup.push(proc2);//add to group
>
>     //configure stream relationships in terms of std::ain / std:aout
> manually
>     //std::ain/std::aout are std::astream globals that refer to the
> default audio inputs and outputs supplied by the context in use
>     //std::ain/std::aout will route the audio to the enpoint specified by
> the context reference held by the process that is streaming the data
>     std::aout<<proc1<<proc2<<std::ain;//method 1
>     //std::ain>>proc2>>proc1>>std::aout;//method 2
>
>     pgroup.start();
>     //do other stuff
>     pgroup.stop();
>
> }
>
>
> //std::audio example 3 "audio files"
> void example_3(){
>
>     std::audio_context<float> ctx;
>
>     std::astream_process<float> proc(ctx,[](std::iafstream const& input,
> std::oafstream& output){
>         std::frame_buffer<float>& buff =3D ctx.borrow_buffer();
>         input>>buff;
>         for(auto&& frame: buff){
>             frame=3D0.0;
>         }
>         output<<buff;
>     });//dsp object
>
>     std::iafstream audio_file1(ctx,"filename1.extension");//an audio file
> handle
>     std::oafstream audio_file2(ctx,"filename2.extension");//an audio file
> handle
>
>     //routing
>     audio_file2<<proc<<audio_file1;//take input from file nad write to
> file
>     //audio_file1>>proc>>audio_file2;//equivilent syntax
>     proc.start();
>     //do other stuff
>     proc.stop();
> }
>
>
> //std::audio example 4 "combination routing"
> void example_3(){
>
>     std::audio_context<float> ctx;
>     //manually select hardware endpoints
>     std::size_t device_id =3D ctx.default_device_id();
>     std::iastream input_device =3D ctx.get_device<std::input_device>(
> device_id);
>     std::oastream output_device =3D ctx.get_device<std::output_device>(
> device_id);
>
>     std::astream_process<float> proc(ctx,[](std::iastream const& input,
>                                             std::oastream& output,
>                                             std::iafstream const&
> input_file,
>                                              std::oafstream& output_file)=
{
>         std::frame_buffer<float>& buff =3D ctx.borrow_buffer();
>         (input + input_file)>>buff;//add streams to perform sum before
> writing to buffer
>         //or you could use seperate buffers
>         //like this
>         /*
>             std::frame_buffer<float> buff1;
>             std::frame_buffer<float> buff2;
>
>             input>>buff1;
>             input_file>>buff2;
>             buff1+=3Dbuff2;//buffer arithmatic
>         */
>         output<<buff;//send the contents of buff to the hardware out and
> the file out
>         output_file<<buff;
>     });
>
>     std::iafstream audio_file1(ctx,"filename1.extension");//the actual
> files to be used above
>     std::oafstream audio_file2(ctx,"filename2.extension");
>
>     //connect the files to the process
>     //connect the hardware device to the process
>     audio_file2<<proc<<audio_file1;//take input from file
>     output_device<<proc<<input_device;//also take from hardware
>     proc.start();
>     //do other stuff
>     proc.stop();
> }
>
>
>
> REQUIRED LIBRARY MEMBERS
>
>
> namespace std{
>     inline namespace audio{
>         //working context for audio flow
>         template<typename>
>         class audio_context;
>         /*
>         *The context in which all audio data is centered.
>         *Contains: sampling rate, buffer size, frame size, etc...
>         *The values of ain,aout,afin,afout refer to the endpoints defined
> by the context, when applied to routing on a porocess tied to the context
>         *think of a context as the program level driver object
>         */
>
>         //audio streams (think like std::fstream and its friends)
>         class astream;//audio stream
>         class oastream;//output audio stream
>         class iastream;//input audio stream
>         class oafstream;//output audio file stream
>         class iafstream;//input audio file stream
>
>
>         //stream endpoints
>         class ain;//audio input endpoint
>         class aout;//audio output endpoint
>         class afin;//audio file input endpoint
>         class afout//audio file output endpoint
>
>         //stream processing
>         template<typename>
>         class astream_process;//a dsp process applied to a stream
>
>         template<typename>
>         class process_group;//a group of processes that will act as one
>
>         //containers
>         template<typename>
>         class frame_buffer;//a sequence container that is resizeable at
> runtime, but only with explicit resize calls. contains frames(see below)
>         /*Implementation note on frame_buffer
>          *frame_buffer is intended to hold N number of frames which
> themselves can hold M number of samples
>          *meaning that the total size in samples if frame_buffer =3D N * =
M
>          *ideally frame_buffers representation of its sample data will be
> continuous in memory
>         */
>
>         template<typename>
>         class frame;//a container that holds samples, thin array wrapper
>
>
>         //hardware representation
>         class device;//an audio device as recognized by the OS
>         class input_device;//an input device
>         class output_device;//an output device
>
>         // audio file formats
>         enum class afformat{
>             raw,//raw headerless audio bytes, interpreted only by the
> settings of the context.
>             //best used for temporary storage within the life of a contex=
t
>             wav,
>             flac//etc...
>         }
>     }
> }
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/f490fd21-cf0=
7-4d7b-8936-c71c97a1ab9d%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/f490fd21-cf=
07-4d7b-8936-c71c97a1ab9d%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAFdMc-0Dj4BGW0v8ORrcgGM54D5_ZunT2At0OWFEDFr-3CY=
WBw%40mail.gmail.com.

--94eb2c08e626d0615d05350bf791
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<p dir=3D"ltr">Sorry top posting or if this has been already pointed.<br>
Is there any reason this hasn&#39;t been submitted to Boost and let it matu=
re there for few years?</p>
<div class=3D"gmail_quote">El 3/6/2016 6:37,  &lt;<a href=3D"mailto:alexand=
er.zywicki@gmail.com">alexander.zywicki@gmail.com</a>&gt; escribi=C3=B3:<br=
 type=3D"attribution"><blockquote class=3D"gmail_quote" style=3D"margin:0 0=
 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I hav=
e drafted some ideas on how I think the c++ std library could support audio=
 functionality. <br><br>I know that audio functionality is a very operating=
 specific problem, but with the recent trend towards implementing a file-sy=
stem library and possibly a graphics library I believe that audio would not=
 be too much of a reach anymore.<br><br>Here are some of the ideas I have s=
o far. I have both some code examples of the intended usage as well as a li=
st of the types needed to implement the given examples.<br><br>Please keep =
in mind my drafts are still very rough.<br><br><br>CODE EXAMPLES<br><br><di=
v style=3D"background-color:rgb(250,250,250);border-color:rgb(187,187,187);=
border-style:solid;border-width:1px;word-wrap:break-word"><code><div><span =
style=3D"color:#800">//std::audio example 1 &quot;single process&quot;</spa=
n><span style=3D"color:#000"><br></span><span style=3D"color:#008">void</sp=
an><span style=3D"color:#000"> example_1</span><span style=3D"color:#660">(=
)</span><span style=3D"color:#660">{</span><span style=3D"color:#000"><br>=
=C2=A0 =C2=A0 </span><span style=3D"color:#008">double</span><span style=3D=
"color:#000"> sample_rate </span><span style=3D"color:#660">=3D</span><span=
 style=3D"color:#000"> </span><span style=3D"color:#066">44100</span><span =
style=3D"color:#660">;</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 s=
td</span><span style=3D"color:#660">::</span><span style=3D"color:#000">siz=
e_t frame_size </span><span style=3D"color:#660">=3D</span><span style=3D"c=
olor:#066">2</span><span style=3D"color:#660">;</span><span style=3D"color:=
#000"><br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::</span><span=
 style=3D"color:#000">size_t buffer_size</span><span style=3D"color:#660">=
=3D</span><span style=3D"color:#066">128</span><span style=3D"color:#660">;=
</span><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 std</span><span sty=
le=3D"color:#660">::</span><span style=3D"color:#000">audio_context</span><=
span style=3D"color:#080">&lt;float&gt;</span><span style=3D"color:#000"> c=
tx</span><span style=3D"color:#660">{</span><span style=3D"color:#000">samp=
le_rate</span><span style=3D"color:#660">,</span><span style=3D"color:#000"=
>buffer_size</span><span style=3D"color:#660">,</span><span style=3D"color:=
#000">frame_size</span><span style=3D"color:#660">};</span><span style=3D"c=
olor:#800">//contruct from values</span><span style=3D"color:#000"><br><br>=
=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::</span><span style=3D"=
color:#000">astream_process</span><span style=3D"color:#080">&lt;float&gt;<=
/span><span style=3D"color:#000"> proc</span><span style=3D"color:#660">(</=
span><span style=3D"color:#000">ctx</span><span style=3D"color:#660">,[](</=
span><span style=3D"color:#000">std</span><span style=3D"color:#660">::</sp=
an><span style=3D"color:#000">iastream </span><span style=3D"color:#008">co=
nst</span><span style=3D"color:#660">&amp;</span><span style=3D"color:#000"=
> input</span><span style=3D"color:#660">,</span><span style=3D"color:#000"=
> std</span><span style=3D"color:#660">::</span><span style=3D"color:#000">=
oastream</span><span style=3D"color:#660">&amp;</span><span style=3D"color:=
#000"> output</span><span style=3D"color:#660">){</span><span style=3D"colo=
r:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 std</span><span style=3D"color:#660=
">::</span><span style=3D"color:#000">frame_buffer</span><span style=3D"col=
or:#080">&lt;float&gt;</span><span style=3D"color:#660">&amp;</span><span s=
tyle=3D"color:#000"> buff </span><span style=3D"color:#660">=3D</span><span=
 style=3D"color:#000"> ctx</span><span style=3D"color:#660">.</span><span s=
tyle=3D"color:#000">borrow_buffer</span><span style=3D"color:#660">();</spa=
n><span style=3D"color:#800">//borrow a buffer from the context for usage</=
span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><spa=
n style=3D"color:#800">//prevents the need for dynamic allocation of a temp=
orary buffer</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 input</span><span style=3D"color:#660">&gt;&gt;</span><span style=3D"co=
lor:#000">buff</span><span style=3D"color:#660">;</span><span style=3D"colo=
r:#800">//stream data into buffer for manipulation</span><span style=3D"col=
or:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#008">=
for</span><span style=3D"color:#660">(</span><span style=3D"color:#008">aut=
o</span><span style=3D"color:#660">&amp;&amp;</span><span style=3D"color:#0=
00"> frame</span><span style=3D"color:#660">:</span><span style=3D"color:#0=
00"> buff</span><span style=3D"color:#660">){</span><span style=3D"color:#0=
00"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 frame</span><span style=
=3D"color:#660">=3D</span><span style=3D"color:#066">0.0</span><span style=
=3D"color:#660">;</span><span style=3D"color:#800">//do something with audi=
o</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><=
span style=3D"color:#660">}</span><span style=3D"color:#000"><br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 output</span><span style=3D"color:#660">&lt;&lt;</span><s=
pan style=3D"color:#000">buff</span><span style=3D"color:#660">;</span><spa=
n style=3D"color:#800">//stream to output</span><span style=3D"color:#000">=
<br>=C2=A0 =C2=A0 </span><span style=3D"color:#660">});</span><span style=
=3D"color:#800">//dsp object</span><span style=3D"color:#000"><br>=C2=A0 =
=C2=A0 </span><span style=3D"color:#800">//uses implied routing equivilent =
to</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D=
"color:#800">//std::aout&lt;&lt;proc&lt;&lt;std::ain;</span><span style=3D"=
color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#800">//</span><s=
pan style=3D"color:#000"><br><br>=C2=A0 =C2=A0 proc</span><span style=3D"co=
lor:#660">.</span><span style=3D"color:#000">start</span><span style=3D"col=
or:#660">();</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><spa=
n style=3D"color:#800">//do other stuff</span><span style=3D"color:#000"><b=
r>=C2=A0 =C2=A0 proc</span><span style=3D"color:#660">.</span><span style=
=3D"color:#000">stop</span><span style=3D"color:#660">();</span><span style=
=3D"color:#000"><br></span><span style=3D"color:#660">}</span><span style=
=3D"color:#000"><br><br></span><span style=3D"color:#800">//std::audio exam=
ple 2 &quot;process group&quot;</span><span style=3D"color:#000"><br></span=
><span style=3D"color:#008">void</span><span style=3D"color:#000"> example_=
2</span><code><span style=3D"color:#660">()</span><span style=3D"color:#660=
"></span></code><span style=3D"color:#660">{</span><span style=3D"color:#00=
0"><br><br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::</span><spa=
n style=3D"color:#000">audio_context</span><span style=3D"color:#080">&lt;f=
loat&gt;</span><span style=3D"color:#000"> ctx</span><span style=3D"color:#=
660">;</span><span style=3D"color:#800">//default context created with std:=
:default_* values</span><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 </=
span><span style=3D"color:#800">//version 1: capture context via lambda</sp=
an><span style=3D"color:#000"><br>=C2=A0 =C2=A0 std</span><span style=3D"co=
lor:#660">::</span><span style=3D"color:#000">astream_process</span><span s=
tyle=3D"color:#080">&lt;float&gt;</span><span style=3D"color:#000"> proc1</=
span><span style=3D"color:#660">(</span><span style=3D"color:#000">ctx</spa=
n><span style=3D"color:#660">,[&amp;</span><span style=3D"color:#000">ctx</=
span><span style=3D"color:#660">](</span><span style=3D"color:#000">std</sp=
an><span style=3D"color:#660">::</span><span style=3D"color:#000">iastream =
</span><span style=3D"color:#008">const</span><span style=3D"color:#660">&a=
mp;</span><span style=3D"color:#000"> input</span><span style=3D"color:#660=
">,</span><span style=3D"color:#000"> std</span><span style=3D"color:#660">=
::</span><span style=3D"color:#000">oastream</span><span style=3D"color:#66=
0">&amp;</span><span style=3D"color:#000"> output</span><span style=3D"colo=
r:#660">){</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 std</span><span style=3D"color:#660">::</span><span style=3D"color:#000">f=
rame_buffer</span><span style=3D"color:#080">&lt;float&gt;</span><span styl=
e=3D"color:#660">&amp;</span><span style=3D"color:#000"> buff </span><span =
style=3D"color:#660">=3D</span><span style=3D"color:#000"> ctx</span><span =
style=3D"color:#660">.</span><span style=3D"color:#000">borrow_buffer</span=
><span style=3D"color:#660">();</span><span style=3D"color:#000"><br>=C2=A0=
 =C2=A0 =C2=A0 =C2=A0 input</span><span style=3D"color:#660">&gt;&gt;</span=
><span style=3D"color:#000">buff</span><span style=3D"color:#660">;</span><=
span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span styl=
e=3D"color:#008">for</span><span style=3D"color:#660">(</span><span style=
=3D"color:#008">auto</span><span style=3D"color:#660">&amp;&amp;</span><spa=
n style=3D"color:#000"> frame</span><span style=3D"color:#660">:</span><spa=
n style=3D"color:#000"> buff</span><span style=3D"color:#660">){</span><spa=
n style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 frame<=
/span><span style=3D"color:#660">*=3D</span><span style=3D"color:#066">0.5<=
/span><span style=3D"color:#660">;</span><span style=3D"color:#000"><br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#660">}</span><span st=
yle=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 output</span><span style=
=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000">buff</span><span =
style=3D"color:#660">;</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 <=
/span><span style=3D"color:#660">});</span><span style=3D"color:#800">//dsp=
 object</span><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 </span><span=
 style=3D"color:#800">//version 2: have context passed as argument</span><s=
pan style=3D"color:#000"><br>=C2=A0 =C2=A0 std</span><span style=3D"color:#=
660">::</span><span style=3D"color:#000">astream_process</span><span style=
=3D"color:#080">&lt;float&gt;</span><span style=3D"color:#000"> proc2</span=
><span style=3D"color:#660">(</span><span style=3D"color:#000">ctx</span><s=
pan style=3D"color:#660">,[](</span><span style=3D"color:#000">std</span><s=
pan style=3D"color:#660">::</span><span style=3D"color:#000">iastream </spa=
n><span style=3D"color:#008">const</span><span style=3D"color:#660">&amp;</=
span><span style=3D"color:#000"> input</span><span style=3D"color:#660">,</=
span><span style=3D"color:#000"> std</span><span style=3D"color:#660">::</s=
pan><span style=3D"color:#000">oastream</span><span style=3D"color:#660">&a=
mp;</span><span style=3D"color:#000"> output</span><span style=3D"color:#66=
0">,</span><span style=3D"color:#000">std</span><span style=3D"color:#660">=
::</span><span style=3D"color:#000">audio_context</span><span style=3D"colo=
r:#080">&lt;float&gt;</span><span style=3D"color:#000"> </span><span style=
=3D"color:#008">const</span><span style=3D"color:#660">&amp;</span><span st=
yle=3D"color:#000"> context</span><span style=3D"color:#660">){</span><span=
 style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 std</span><span style=
=3D"color:#660">::</span><span style=3D"color:#000">frame_buffer</span><spa=
n style=3D"color:#080">&lt;float&gt;</span><span style=3D"color:#660">&amp;=
</span><span style=3D"color:#000"> buff </span><span style=3D"color:#660">=
=3D</span><span style=3D"color:#000"> ctx</span><span style=3D"color:#660">=
..</span><span style=3D"color:#000">borrow_buffer</span><span style=3D"color=
:#660">();</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 input</span><span style=3D"color:#660">&gt;&gt;</span><span style=3D"color=
:#000">buff</span><span style=3D"color:#660">;</span><span style=3D"color:#=
000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#008">for<=
/span><span style=3D"color:#660">(</span><span style=3D"color:#008">auto</s=
pan><span style=3D"color:#660">&amp;&amp;</span><span style=3D"color:#000">=
 frame</span><span style=3D"color:#660">:</span><span style=3D"color:#000">=
 buff</span><span style=3D"color:#660">){</span><span style=3D"color:#000">=
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 frame</span><span style=3D"co=
lor:#660">*=3D</span><span style=3D"color:#066">2.0</span><span style=3D"co=
lor:#660">;</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 </span><span style=3D"color:#660">}</span><span style=3D"color:#000"><b=
r>=C2=A0 =C2=A0 =C2=A0 =C2=A0 output</span><span style=3D"color:#660">&lt;&=
lt;</span><span style=3D"color:#000">buff</span><span style=3D"color:#660">=
;</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"=
color:#660">});</span><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 std<=
/span><span style=3D"color:#660">::</span><span style=3D"color:#000">proces=
s_group</span><span style=3D"color:#080">&lt;float&gt;</span><span style=3D=
"color:#000"> pgroup</span><span style=3D"color:#660">;</span><span style=
=3D"color:#800">//a group of processes that will happen consecutivley</span=
><span style=3D"color:#000"><br>=C2=A0 =C2=A0 pgroup</span><span style=3D"c=
olor:#660">.</span><span style=3D"color:#000">push</span><span style=3D"col=
or:#660">(</span><span style=3D"color:#000">proc1</span><span style=3D"colo=
r:#660">);</span><span style=3D"color:#800">//add to group</span><span styl=
e=3D"color:#000"><br>=C2=A0 =C2=A0 pgroup</span><span style=3D"color:#660">=
..</span><span style=3D"color:#000">push</span><span style=3D"color:#660">(<=
/span><span style=3D"color:#000">proc2</span><span style=3D"color:#660">);<=
/span><span style=3D"color:#800">//add to group</span><span style=3D"color:=
#000"><br><br>=C2=A0 =C2=A0 </span><span style=3D"color:#800">//configure s=
tream relationships in terms of std::ain / std:aout manually</span><span st=
yle=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#800">//st=
d::ain/std::aout are std::astream globals that refer to the default audio i=
nputs and outputs supplied by the context in use</span><span style=3D"color=
:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#800">//std::ain/std::=
aout will route the audio to the enpoint specified by the context reference=
 held by the process that is streaming the data</span><span style=3D"color:=
#000"><br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::</span><span=
 style=3D"color:#000">aout</span><span style=3D"color:#660">&lt;&lt;</span>=
<span style=3D"color:#000">proc1</span><span style=3D"color:#660">&lt;&lt;<=
/span><span style=3D"color:#000">proc2</span><span style=3D"color:#660">&lt=
;&lt;</span><span style=3D"color:#000">std</span><span style=3D"color:#660"=
>::</span><span style=3D"color:#000">ain</span><span style=3D"color:#660">;=
</span><span style=3D"color:#800">//method 1</span><span style=3D"color:#00=
0"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#800">//std::ain&gt;&gt;pr=
oc2&gt;&gt;proc1&gt;&gt;std::aout;//method 2</span><span style=3D"color:#00=
0"><br><br>=C2=A0 =C2=A0 pgroup</span><span style=3D"color:#660">.</span><s=
pan style=3D"color:#000">start</span><span style=3D"color:#660">();</span><=
span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#80=
0">//do other stuff</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 pgro=
up</span><span style=3D"color:#660">.</span><span style=3D"color:#000">stop=
</span><span style=3D"color:#660">();</span><span style=3D"color:#000"><br>=
<br></span><span style=3D"color:#660">}</span><span style=3D"color:#000"><b=
r><br><br></span><span style=3D"color:#800">//std::audio example 3 &quot;au=
dio files&quot;</span><span style=3D"color:#000"><br></span><span style=3D"=
color:#008">void</span><span style=3D"color:#000"> example_3</span><code><s=
pan style=3D"color:#660">()</span><span style=3D"color:#660"></span></code>=
<span style=3D"color:#660">{</span><span style=3D"color:#000"><br><br>=C2=
=A0 =C2=A0 std</span><span style=3D"color:#660">::</span><span style=3D"col=
or:#000">audio_context</span><span style=3D"color:#080">&lt;float&gt;</span=
><span style=3D"color:#000"> ctx</span><span style=3D"color:#660">;</span><=
span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 std</span><span style=3D"co=
lor:#660">::</span><span style=3D"color:#000">astream_process</span><span s=
tyle=3D"color:#080">&lt;float&gt;</span><span style=3D"color:#000"> proc</s=
pan><span style=3D"color:#660">(</span><span style=3D"color:#000">ctx</span=
><span style=3D"color:#660">,[](</span><span style=3D"color:#000">std</span=
><span style=3D"color:#660">::</span><span style=3D"color:#000">iafstream <=
/span><span style=3D"color:#008">const</span><span style=3D"color:#660">&am=
p;</span><span style=3D"color:#000"> input</span><span style=3D"color:#660"=
>,</span><span style=3D"color:#000"> std</span><span style=3D"color:#660">:=
:</span><span style=3D"color:#000">oafstream</span><span style=3D"color:#66=
0">&amp;</span><span style=3D"color:#000"> output</span><span style=3D"colo=
r:#660">){</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 std</span><span style=3D"color:#660">::</span><span style=3D"color:#000">f=
rame_buffer</span><span style=3D"color:#080">&lt;float&gt;</span><span styl=
e=3D"color:#660">&amp;</span><span style=3D"color:#000"> buff </span><span =
style=3D"color:#660">=3D</span><span style=3D"color:#000"> ctx</span><span =
style=3D"color:#660">.</span><span style=3D"color:#000">borrow_buffer</span=
><span style=3D"color:#660">();</span><span style=3D"color:#000"><br>=C2=A0=
 =C2=A0 =C2=A0 =C2=A0 input</span><span style=3D"color:#660">&gt;&gt;</span=
><span style=3D"color:#000">buff</span><span style=3D"color:#660">;</span><=
span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span styl=
e=3D"color:#008">for</span><span style=3D"color:#660">(</span><span style=
=3D"color:#008">auto</span><span style=3D"color:#660">&amp;&amp;</span><spa=
n style=3D"color:#000"> frame</span><span style=3D"color:#660">:</span><spa=
n style=3D"color:#000"> buff</span><span style=3D"color:#660">){</span><spa=
n style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 frame<=
/span><span style=3D"color:#660">=3D</span><span style=3D"color:#066">0.0</=
span><span style=3D"color:#660">;</span><span style=3D"color:#000"><br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#660">}</span><span st=
yle=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 output</span><span style=
=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000">buff</span><span =
style=3D"color:#660">;</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 <=
/span><span style=3D"color:#660">});</span><span style=3D"color:#800">//dsp=
 object</span><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 std</span><s=
pan style=3D"color:#660">::</span><span style=3D"color:#000">iafstream audi=
o_file1</span><span style=3D"color:#660">(</span><span style=3D"color:#000"=
>ctx</span><span style=3D"color:#660">,</span><span style=3D"color:#080">&q=
uot;filename1.extension&quot;</span><span style=3D"color:#660">);</span><sp=
an style=3D"color:#800">//an audio file handle</span><span style=3D"color:#=
000"><br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::</span><span =
style=3D"color:#000">oafstream audio_file2</span><span style=3D"color:#660"=
>(</span><span style=3D"color:#000">ctx</span><span style=3D"color:#660">,<=
/span><span style=3D"color:#080">&quot;filename2.extension&quot;</span><spa=
n style=3D"color:#660">);</span><span style=3D"color:#800">//an audio file =
handle</span><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 </span><span =
style=3D"color:#800">//routing</span><span style=3D"color:#000"><br>=C2=A0 =
=C2=A0 audio_file2</span><span style=3D"color:#660">&lt;&lt;</span><span st=
yle=3D"color:#000">proc</span><span style=3D"color:#660">&lt;&lt;</span><sp=
an style=3D"color:#000">audio_file1</span><span style=3D"color:#660">;</spa=
n><span style=3D"color:#800">//take input from file nad write to file</span=
><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#=
800">//audio_file1&gt;&gt;proc&gt;&gt;audio_file2;//equivilent syntax</span=
><span style=3D"color:#000"><br>=C2=A0 =C2=A0 proc</span><span style=3D"col=
or:#660">.</span><span style=3D"color:#000">start</span><span style=3D"colo=
r:#660">();</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span=
 style=3D"color:#800">//do other stuff</span><span style=3D"color:#000"><br=
>=C2=A0 =C2=A0 proc</span><span style=3D"color:#660">.</span><span style=3D=
"color:#000">stop</span><span style=3D"color:#660">();</span><span style=3D=
"color:#000"><br></span><span style=3D"color:#660">}</span><span style=3D"c=
olor:#000"><br><br><br></span><span style=3D"color:#800">//std::audio examp=
le 4 &quot;combination routing&quot;</span><span style=3D"color:#000"><br><=
/span><span style=3D"color:#008">void</span><span style=3D"color:#000"> exa=
mple_3</span><span style=3D"color:#660"><code><span style=3D"color:#660">()=
</span><span style=3D"color:#660"></span></code>{</span><span style=3D"colo=
r:#000"><br><br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::</span=
><span style=3D"color:#000">audio_context</span><span style=3D"color:#080">=
&lt;float&gt;</span><span style=3D"color:#000"> ctx</span><span style=3D"co=
lor:#660">;</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span=
 style=3D"color:#800">//manually select hardware endpoints</span><span styl=
e=3D"color:#000"><br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::<=
/span><span style=3D"color:#000">size_t device_id </span><span style=3D"col=
or:#660">=3D</span><span style=3D"color:#000"> ctx</span><span style=3D"col=
or:#660">.</span><span style=3D"color:#000">default_device_id</span><span s=
tyle=3D"color:#660">();</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =
std</span><span style=3D"color:#660">::</span><span style=3D"color:#000">ia=
stream input_device </span><span style=3D"color:#660">=3D</span><span style=
=3D"color:#000"> ctx</span><span style=3D"color:#660">.</span><span style=
=3D"color:#000">get_device</span><span style=3D"color:#660">&lt;</span><spa=
n style=3D"color:#000">std</span><span style=3D"color:#660">::</span><span =
style=3D"color:#000">input_device</span><span style=3D"color:#660">&gt;(</s=
pan><span style=3D"color:#000">device_id</span><span style=3D"color:#660">)=
;</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 std</span><span style=
=3D"color:#660">::</span><span style=3D"color:#000">oastream output_device =
</span><span style=3D"color:#660">=3D</span><span style=3D"color:#000"> ctx=
</span><span style=3D"color:#660">.</span><span style=3D"color:#000">get_de=
vice</span><span style=3D"color:#660">&lt;</span><span style=3D"color:#000"=
>std</span><span style=3D"color:#660">::</span><span style=3D"color:#000">o=
utput_device</span><span style=3D"color:#660">&gt;(</span><span style=3D"co=
lor:#000">device_id</span><span style=3D"color:#660">);</span><span style=
=3D"color:#000"><br><br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">=
::</span><span style=3D"color:#000">astream_process</span><span style=3D"co=
lor:#080">&lt;float&gt;</span><span style=3D"color:#000"> proc</span><span =
style=3D"color:#660">(</span><span style=3D"color:#000">ctx</span><span sty=
le=3D"color:#660">,[](</span><span style=3D"color:#000">std</span><span sty=
le=3D"color:#660">::</span><span style=3D"color:#000">iastream </span><span=
 style=3D"color:#008">const</span><span style=3D"color:#660">&amp;</span><s=
pan style=3D"color:#000"> input</span><span style=3D"color:#660">,</span><s=
pan style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 std</span><span style=3D"color:#660">::<=
/span><span style=3D"color:#000">oastream</span><span style=3D"color:#660">=
&amp;</span><span style=3D"color:#000"> output</span><span style=3D"color:#=
660">,</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 std</span><span style=3D"c=
olor:#660">::</span><span style=3D"color:#000">iafstream </span><span style=
=3D"color:#008">const</span><span style=3D"color:#660">&amp;</span><span st=
yle=3D"color:#000"> input_file</span><span style=3D"color:#660">,</span><sp=
an style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0std</span><span style=3D"color:#66=
0">::</span><span style=3D"color:#000">oafstream</span><span style=3D"color=
:#660">&amp;</span><span style=3D"color:#000"> output_file</span><span styl=
e=3D"color:#660">){</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 std</span><span style=3D"color:#660">::</span><span style=3D"col=
or:#000">frame_buffer</span><span style=3D"color:#080">&lt;float&gt;</span>=
<span style=3D"color:#660">&amp;</span><span style=3D"color:#000"> buff </s=
pan><span style=3D"color:#660">=3D</span><span style=3D"color:#000"> ctx</s=
pan><span style=3D"color:#660">.</span><span style=3D"color:#000">borrow_bu=
ffer</span><span style=3D"color:#660">();</span><span style=3D"color:#000">=
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#660">(</span><=
span style=3D"color:#000">input </span><span style=3D"color:#660">+</span><=
span style=3D"color:#000"> input_file</span><span style=3D"color:#660">)&gt=
;&gt;</span><span style=3D"color:#000">buff</span><span style=3D"color:#660=
">;</span><span style=3D"color:#800">//add streams to perform sum before wr=
iting to buffer</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 </span><span style=3D"color:#800">//or you could use seperate buffer=
s</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><=
span style=3D"color:#800">//like this</span><span style=3D"color:#000"><br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#800">/*<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 std::frame_buffer&lt;float&gt; buff1;<br=
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 std::frame_buffer&lt;float&gt; b=
uff2;<br><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 input&gt;&gt;buff1;<=
br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 input_file&gt;&gt;buff2;<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 buff1+=3Dbuff2;//buffer arithmati=
c<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 */</span><span style=3D"color:#000"><br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 output</span><span style=3D"color:#660">&lt;&lt=
;</span><span style=3D"color:#000">buff</span><span style=3D"color:#660">;<=
/span><span style=3D"color:#800">//send the contents of buff to the hardwar=
e out and the file out</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 output_file</span><span style=3D"color:#660">&lt;&lt;</span><=
span style=3D"color:#000">buff</span><span style=3D"color:#660">;</span><sp=
an style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#660"=
>});</span><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 std</span><span=
 style=3D"color:#660">::</span><span style=3D"color:#000">iafstream audio_f=
ile1</span><span style=3D"color:#660">(</span><span style=3D"color:#000">ct=
x</span><span style=3D"color:#660">,</span><span style=3D"color:#080">&quot=
;filename1.extension&quot;</span><span style=3D"color:#660">);</span><span =
style=3D"color:#800">//the actual files to be used above</span><span style=
=3D"color:#000"><br>=C2=A0 =C2=A0 std</span><span style=3D"color:#660">::</=
span><span style=3D"color:#000">oafstream audio_file2</span><span style=3D"=
color:#660">(</span><span style=3D"color:#000">ctx</span><span style=3D"col=
or:#660">,</span><span style=3D"color:#080">&quot;filename2.extension&quot;=
</span><span style=3D"color:#660">);</span><span style=3D"color:#000"><br><=
br>=C2=A0 =C2=A0 </span><span style=3D"color:#800">//connect the files to t=
he process</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span =
style=3D"color:#800">//connect the hardware device to the process</span><sp=
an style=3D"color:#000"><br>=C2=A0 =C2=A0 audio_file2</span><span style=3D"=
color:#660">&lt;&lt;</span><span style=3D"color:#000">proc</span><span styl=
e=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000">audio_file1</spa=
n><span style=3D"color:#660">;</span><span style=3D"color:#800">//take inpu=
t from file</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 output_devic=
e</span><span style=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000=
">proc</span><span style=3D"color:#660">&lt;&lt;</span><span style=3D"color=
:#000">input_device</span><span style=3D"color:#660">;</span><span style=3D=
"color:#800">//also take from hardware</span><span style=3D"color:#000"><br=
>=C2=A0 =C2=A0 proc</span><span style=3D"color:#660">.</span><span style=3D=
"color:#000">start</span><span style=3D"color:#660">();</span><span style=
=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#800">//do ot=
her stuff</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 proc</span><sp=
an style=3D"color:#660">.</span><span style=3D"color:#000">stop</span><span=
 style=3D"color:#660">();</span><span style=3D"color:#000"><br></span><span=
 style=3D"color:#660">}</span></div></code></div><br><br><br>REQUIRED LIBRA=
RY MEMBERS<br><br><br><div style=3D"background-color:rgb(250,250,250);borde=
r-color:rgb(187,187,187);border-style:solid;border-width:1px;word-wrap:brea=
k-word"><code><div><span style=3D"color:#008">namespace</span><span style=
=3D"color:#000"> std</span><span style=3D"color:#660">{</span><span style=
=3D"color:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#008">inline<=
/span><span style=3D"color:#000"> </span><span style=3D"color:#008">namespa=
ce</span><span style=3D"color:#000"> audio</span><span style=3D"color:#660"=
>{</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span>=
<span style=3D"color:#800">//working context for audio flow</span><span sty=
le=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"col=
or:#008">template</span><span style=3D"color:#080">&lt;typename&gt;</span><=
span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span styl=
e=3D"color:#008">class</span><span style=3D"color:#000"> audio_context</spa=
n><span style=3D"color:#660">;</span><span style=3D"color:#000"><br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#800">/*<br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 *The context in which all audio data is centered.<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 *Contains: sampling rate, buffer size, frame size, etc=
....<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 *The values of ain,aout,afin,afout refer=
 to the endpoints defined by the context, when applied to routing on a poro=
cess tied to the context<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 *think of a context=
 as the program level driver object<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 */</span=
><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><spa=
n style=3D"color:#800">//audio streams (think like std::fstream and its fri=
ends)</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </sp=
an><span style=3D"color:#008">class</span><span style=3D"color:#000"> astre=
am</span><span style=3D"color:#660">;</span><span style=3D"color:#800">//au=
dio stream</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 </span><span style=3D"color:#008">class</span><span style=3D"color:#000"> =
oastream</span><span style=3D"color:#660">;</span><span style=3D"color:#800=
">//output audio stream</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 </span><span style=3D"color:#008">class</span><span style=3D"=
color:#000"> iastream</span><span style=3D"color:#660">;</span><span style=
=3D"color:#800">//input audio stream</span><span style=3D"color:#000"><br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#008">class</span><=
span style=3D"color:#000"> oafstream</span><span style=3D"color:#660">;</sp=
an><span style=3D"color:#800">//output audio file stream</span><span style=
=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color=
:#008">class</span><span style=3D"color:#000"> iafstream</span><span style=
=3D"color:#660">;</span><span style=3D"color:#800">//input audio file strea=
m</span><span style=3D"color:#000"><br><br><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =
</span><span style=3D"color:#800">//stream endpoints</span><span style=3D"c=
olor:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#008=
">class</span><span style=3D"color:#000"> ain</span><span style=3D"color:#6=
60">;</span><span style=3D"color:#800">//audio input endpoint</span><span s=
tyle=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"c=
olor:#008">class</span><span style=3D"color:#000"> aout</span><span style=
=3D"color:#660">;</span><span style=3D"color:#800">//audio output endpoint<=
/span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><sp=
an style=3D"color:#008">class</span><span style=3D"color:#000"> afin</span>=
<span style=3D"color:#660">;</span><span style=3D"color:#800">//audio file =
input endpoint</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 </span><span style=3D"color:#008">class</span><span style=3D"color:#=
000"> afout</span><span style=3D"color:#800">//audio file output endpoint</=
span><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span>=
<span style=3D"color:#800">//stream processing</span><span style=3D"color:#=
000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#008">temp=
late</span><span style=3D"color:#080">&lt;typename&gt;</span><span style=3D=
"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#0=
08">class</span><span style=3D"color:#000"> astream_process</span><span sty=
le=3D"color:#660">;</span><span style=3D"color:#800">//a dsp process applie=
d to a stream</span><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 =C2=A0=
 =C2=A0 </span><span style=3D"color:#008">template</span><span style=3D"col=
or:#080">&lt;typename&gt;</span><span style=3D"color:#000"><br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#008">class</span><span style=
=3D"color:#000"> process_group</span><span style=3D"color:#660">;</span><sp=
an style=3D"color:#800">//a group of processes that will act as one</span><=
span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span =
style=3D"color:#800">//containers</span><span style=3D"color:#000"><br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#008">template</span><=
span style=3D"color:#080">&lt;typename&gt;</span><span style=3D"color:#000"=
><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#008">class</s=
pan><span style=3D"color:#000"> frame_buffer</span><span style=3D"color:#66=
0">;</span><span style=3D"color:#800">//a sequence container that is resize=
able at runtime, but only with explicit resize calls. contains frames(see b=
elow)</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </sp=
an><span style=3D"color:#800">/*Implementation note on frame_buffer<br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*frame_buffer is intended to hold N number o=
f frames which themselves can hold M number of samples<br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0*meaning that the total size in samples if frame_buffer =
=3D N * M<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*ideally frame_buffers repre=
sentation of its sample data will be continuous in memory<br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 */</span><span style=3D"color:#000"><br><br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 </span><span style=3D"color:#008">template</span><span style=3D"=
color:#080">&lt;typename&gt;</span><span style=3D"color:#000"><br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#008">class</span><span st=
yle=3D"color:#000"> frame</span><span style=3D"color:#660">;</span><span st=
yle=3D"color:#800">//a container that holds samples, thin array wrapper</sp=
an><span style=3D"color:#000"><br><br><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </spa=
n><span style=3D"color:#800">//hardware representation</span><span style=3D=
"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#0=
08">class</span><span style=3D"color:#000"> device</span><span style=3D"col=
or:#660">;</span><span style=3D"color:#800">//an audio device as recognized=
 by the OS</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 </span><span style=3D"color:#008">class</span><span style=3D"color:#000"> =
input_device</span><span style=3D"color:#660">;</span><span style=3D"color:=
#800">//an input device</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 </span><span style=3D"color:#008">class</span><span style=3D"=
color:#000"> output_device</span><span style=3D"color:#660">;</span><span s=
tyle=3D"color:#800">//an output device</span><span style=3D"color:#000"><br=
><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D"color:#800">// audio=
 file formats</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 </span><span style=3D"color:#008">enum</span><span style=3D"color:#000"=
> </span><span style=3D"color:#008">class</span><span style=3D"color:#000">=
 afformat</span><span style=3D"color:#660">{</span><span style=3D"color:#00=
0"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 raw</span><span style=3D"c=
olor:#660">,</span><span style=3D"color:#800">//raw headerless audio bytes,=
 interpreted only by the settings of the context.</span><span style=3D"colo=
r:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 </span><span style=3D=
"color:#800">//best used for temporary storage within the life of a context=
</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 wav</span><span style=3D"color:#660">,</span><span style=3D"color:#0=
00"><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 flac</span><span style=3D=
"color:#800">//etc...</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 </span><span style=3D"color:#660">}</span><span style=3D"colo=
r:#000"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#660">}</span><span s=
tyle=3D"color:#000"><br></span><span style=3D"color:#660">}</span></div></c=
ode></div><br><br><br></div>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/f490fd21-cf07-4d7b-8936-c71c97a1ab9d%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/f490fd21-cf07-=
4d7b-8936-c71c97a1ab9d%40isocpp.org</a>.<br>
</blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAFdMc-0Dj4BGW0v8ORrcgGM54D5_ZunT2At0=
OWFEDFr-3CYWBw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAFdMc-0Dj4BGW0v8=
ORrcgGM54D5_ZunT2At0OWFEDFr-3CYWBw%40mail.gmail.com</a>.<br />

--94eb2c08e626d0615d05350bf791--

.
