From 89d27e1b0f11ce5179f40a7a6a5499ccaf43e00e Mon Sep 17 00:00:00 2001 From: X_huihui <64721484+xiaohuihui1022@users.noreply.github.com> Date: Tue, 4 Oct 2022 18:41:15 +0800 Subject: [PATCH] 1.3small update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新了四面+八方移动,同时出现了新的bug,预计N天后修复 还落下了一个没写完的sound sys --- TestEngine/Form2.cs | 21 +- TestEngine/Main.cs | 16 +- TestEngine/bin/Debug/TestEngine.exe | Bin 10752 -> 10752 bytes TestEngine/bin/Debug/lib/NAudio.dll | Bin 0 -> 513536 bytes TestEngine/bin/Debug/lib/NAudio.xml | 24720 ++++++++++++++++ TestEngine/bin/Debug/lib/TheWorstEngine.dll | Bin 11776 -> 16384 bytes .../TestEngine.csproj.FileListAbsolute.txt | 2 + .../TestEngine.csprojAssemblyReference.cache | Bin 47528 -> 52730 bytes TestEngine/obj/Debug/TestEngine.exe | Bin 10752 -> 10752 bytes TestEngine/obj/Debug/TestEngine.pdb | Bin 30208 -> 30208 bytes .../Developer/KeyManager(unused).cs | 167 + TheWorstEngine/Developer/Mp3Player(unused).cs | 156 + TheWorstEngine/TheWorstEngine.csproj | 7 +- TheWorstEngine/bin/Debug/NAudio.dll | Bin 0 -> 513536 bytes TheWorstEngine/bin/Debug/NAudio.xml | 24720 ++++++++++++++++ TheWorstEngine/bin/Debug/TheWorstEngine.dll | Bin 11776 -> 16384 bytes TheWorstEngine/bin/Debug/TheWorstEngine.pdb | Bin 32256 -> 42496 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 7175 -> 7360 bytes .../Debug/TheWorstEngine.csproj.CopyComplete | 0 ...WorstEngine.csproj.CoreCompileInputs.cache | 2 +- ...TheWorstEngine.csproj.FileListAbsolute.txt | 3 + ...eWorstEngine.csprojAssemblyReference.cache | Bin 15873 -> 82270 bytes TheWorstEngine/obj/Debug/TheWorstEngine.dll | Bin 11776 -> 16384 bytes TheWorstEngine/obj/Debug/TheWorstEngine.pdb | Bin 32256 -> 42496 bytes TheWorstEngine/packages.config | 4 + TheWorstEngine/twe.cs | 204 +- packages/NAudio.1.10.0/NAudio.1.10.0.nupkg | Bin 0 -> 1229187 bytes packages/NAudio.1.10.0/lib/net35/NAudio.dll | Bin 0 -> 513536 bytes packages/NAudio.1.10.0/lib/net35/NAudio.xml | 24720 ++++++++++++++++ .../lib/netcoreapp3.0/NAudio.dll | Bin 0 -> 510464 bytes .../lib/netcoreapp3.0/NAudio.xml | 24652 +++++++++++++++ .../lib/netstandard2.0/NAudio.dll | Bin 0 -> 496640 bytes .../lib/netstandard2.0/NAudio.xml | 23957 +++++++++++++++ packages/NAudio.1.10.0/lib/uap10.0/NAudio.dll | Bin 0 -> 406016 bytes packages/NAudio.1.10.0/lib/uap10.0/NAudio.pri | Bin 0 -> 648 bytes packages/NAudio.1.10.0/lib/uap10.0/NAudio.xml | 19517 ++++++++++++ 36 files changed, 142826 insertions(+), 42 deletions(-) create mode 100644 TestEngine/bin/Debug/lib/NAudio.dll create mode 100644 TestEngine/bin/Debug/lib/NAudio.xml create mode 100644 TheWorstEngine/Developer/KeyManager(unused).cs create mode 100644 TheWorstEngine/Developer/Mp3Player(unused).cs create mode 100644 TheWorstEngine/bin/Debug/NAudio.dll create mode 100644 TheWorstEngine/bin/Debug/NAudio.xml create mode 100644 TheWorstEngine/obj/Debug/TheWorstEngine.csproj.CopyComplete create mode 100644 TheWorstEngine/packages.config create mode 100644 packages/NAudio.1.10.0/NAudio.1.10.0.nupkg create mode 100644 packages/NAudio.1.10.0/lib/net35/NAudio.dll create mode 100644 packages/NAudio.1.10.0/lib/net35/NAudio.xml create mode 100644 packages/NAudio.1.10.0/lib/netcoreapp3.0/NAudio.dll create mode 100644 packages/NAudio.1.10.0/lib/netcoreapp3.0/NAudio.xml create mode 100644 packages/NAudio.1.10.0/lib/netstandard2.0/NAudio.dll create mode 100644 packages/NAudio.1.10.0/lib/netstandard2.0/NAudio.xml create mode 100644 packages/NAudio.1.10.0/lib/uap10.0/NAudio.dll create mode 100644 packages/NAudio.1.10.0/lib/uap10.0/NAudio.pri create mode 100644 packages/NAudio.1.10.0/lib/uap10.0/NAudio.xml diff --git a/TestEngine/Form2.cs b/TestEngine/Form2.cs index addc52f..2c8428e 100644 --- a/TestEngine/Form2.cs +++ b/TestEngine/Form2.cs @@ -1,28 +1,29 @@ using System; -using TheWorstEngine; +using TheWorstEngine.AnimFunction; using System.Windows.Forms; namespace TestEngine { public partial class Form2 : Form { - Twe sans1 = new Twe(); - Twe Heart = new Twe(); + TweAnim sans1 = new TweAnim(); + TweAnim Heart = new TweAnim(); + TweSound mega = new TweSound(); public Form2() { InitializeComponent(); - sans1.form = this; - sans1.picturebox = sans; + sans1.Load(this, sans); + mega.Load(this, @".\sound\mega.ogg"); string[] FS = { ".\\img\\sans1.png", ".\\img\\sans2.png", ".\\img\\sans3.png", ".\\img\\sans4.png", ".\\img\\sans3.png", ".\\img\\sans2.png", ".\\img\\sans1.png"}; - sans1.NewAnim(FS, 5, label1); - Heart.form = this; - Heart.picturebox = heart; - Heart.NewImage(@".\img\red.png"); + sans1.SetAnim(FS, 5, label1); + Heart.Load(this, heart); + Heart.SetImage(@".\img\red.png"); // Heart.KeySet(Keys.Up, Keys.Down, Keys.Left, Keys.Right); Heart.CanMove(true); - + mega.PlaySound(); + // sans1.AnimSound(@".\sound\mega.ogg"); // sans1.KeySet(Keys.Up, Keys.Down, Keys.Left, Keys.Right); // sans1.CanMove(true); } diff --git a/TestEngine/Main.cs b/TestEngine/Main.cs index 3c35d2f..dd2fa00 100644 --- a/TestEngine/Main.cs +++ b/TestEngine/Main.cs @@ -1,7 +1,7 @@ using System; using System.Drawing; using System.Windows.Forms; -using TheWorstEngine; +using TheWorstEngine.AnimFunction; using LogSystem; using LangSystem; @@ -9,8 +9,8 @@ namespace TestEngine { public partial class Main : Form { - Twe sans1 = new Twe(); - Twe sans2 = new Twe(); + TweAnim sans1 = new TweAnim(); + TweAnim sans2 = new TweAnim(); Log log = new Log(); Lang lang = new Lang(); public Main() @@ -19,10 +19,8 @@ public Main() CheckForIllegalCrossThreadCalls = false; //Thread RunTask = new Thread(Run); //RunTask.Start(); - sans2.form = this; - sans2.picturebox = pictureBox2; - sans1.form = this; - sans1.picturebox = pictureBox1; + sans2.Load(this, pictureBox2); + sans1.Load(this, pictureBox1); log.LogWriteInit(); log.TimeShowSet(true); log.Info(sans1.SetResolution(new Size(544, 351))); @@ -32,8 +30,8 @@ public Main() ".\\img\\sans3.png", ".\\img\\sans4.png", ".\\img\\sans3.png", ".\\img\\sans2.png", ".\\img\\sans1.png"}; // pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize; - sans1.NewAnim(FS, 5, FPS); - sans2.NewAnim(FS, 5, FPS2); + sans1.SetAnim(FS, 5, FPS); + sans2.SetAnim(FS, 5, FPS2); } public void LangInit() diff --git a/TestEngine/bin/Debug/TestEngine.exe b/TestEngine/bin/Debug/TestEngine.exe index 5262c1cd9d6db78fb78d1951441a7109ab87e8f6..282b9d4c1f5b4c814e3f5889acf36afc75c5e48f 100644 GIT binary patch delta 4741 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 WPKgm;)qh;d$p=ULiBH9FgZsZxjH1f` delta 4692 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

?`24U~?|j&u-j5UzX+Ahj9OVSw6(B5Bp== z@KLe`I}RKTuFJmls}PCdqh(`uxl(v*8n_MGsh=@&9>ux*W8`9v>-za$_!w!zam}fp zp5bGqB6IzWlR;=0kK*91cj4pY!(>ixoUDze{b!;%P8QJm{CvrHd70Oz_8u?)W>b5Q zm-pD`Og)}WkXAm`&kgWIa0vU-VR-AIIZ;+&{|%l9uF0nU@~W)IrvCD(Y>Ia3BU^T* zIF~7oZXs7&BWR-XI`uQUN2)s=X;&ssUJaBr; zT$zr}71>Yf@nou;L2=O$mWMm0@*9rFg5L?BDsQqULI0IOQ)LG@j_UFA@!hokcy{H_ z;jL+~{8@I%c#l{aK245-{Z@~M`get~0n_C~_DFDum@YqJ7Z>Z_W6Y36=p3~VJQn;V z$D92Rt``KpF1K<#8XVzyUG7FZ+dorYr{%GJMfgnFb}{AOxR);f8!{H1qr$->%r|5z z+FAci*$M3&|KF57Ij-A(Q}~-wkK4}vur2&88ARsx&yykONg}7cuFpLABsy17d*#U% zWN!aF8P4&|FkWYR^JF{rE^wePPo}fI)pdNf?96@;9O#=ZUm$aObL1d&3I3k;`|vq( z8CxG8kA%;aUz54K`EtvB>*vdzehv}&^0=Sx8uMlG`+EDKJ@3Nx`S1d{hfV#pKptgN ze=U%uY})<;d5ul&Q6R-qs!w`eqd- z|33H~`7{}ymwLc@M@HP2-#c<1$7%d}N50Fx3gg+I;qS-~*>wJ}P_ASr!1=^K;S1$D zGS~mRaxHMQ ~=WRy01nFR#(^+&=G1{WT+~Z%+Sx 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 z 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ℜn-jnR>hx9?MY_^M1_KuEdrJMZ*cKz6C&>qZ==afd9X)#)b ze50T6&w9|jRc3qiGFonP8#rqHLTg#Cjf4&BN!w|O%@47K&+mQ$BV`|4Q!g^XP z($Je=Lm!Qgcv8dC$UH{TzwGV`KekYCDUsSKNq_}x0s!M;wHN_Ohs8inB- z_Met+(DORQcPIxvj}~p#KP;MIFl=UhpcT%T&&CKxe_-XYP3RS)3la^LSQ`4y{Bfk= zAhdPZeu2H)v`;$@k7(D3Ht`mt?bja@o|F31Zk=WyD@31-*WJQF?_ilsZ#FAraZp9u zXaf>}l_4Me?o{i{8k-iFWZE2>d7FiTy(1>XF&grOMj>;^Ly8FrM&7Om6H}2=L&bYgH--q)W z!=i(6b66?tA95DNPJfZkKCAJNru9*8#=35|#+=)Ud}4MVvMZ=WTfR&Uk0^kcXId zpEvt{U~*cn`&w{uCgqsgcUdfBXE!Sg+teKDu*`Nq9bsnsotOI&NxC~dx=sqmGl$f; z^e~U5BQlmgtf~=}(3CCyX&}MF(E##sbcF*{BS}0*1p@wKo_rV+QW=6tO<8A0F}WxM z;WQf7PRo@t_%Yw%fx(uaq1b3)SmQt~Vr*BW^os)=Q?#7xlbqHTUX<7^!Pt?cZb(us zj$@aoOL<)kUOEJE%U+e+qCZ>_u3WK~?XxY8?%N^GP(Mdtg36UE21;Z~YKJX&hJ$v^ z4a(c4e|GdCyl~!;JcqJT-H>WIsXE-oRJqct3gE_wFfs8ZS60>RU`2AQp>CIsdTzl4 z3L~!-%PmmcW=Rq1G^C-1<8{RC@U16~<6<1=-=#b#9&z*lN3u}vJzm-9T?`Fz0Us}0 z8NQwpK1{6P>nY*mNQdFuQ=*R}M4rBmYg1n1y1OM@`d|{mu_YD+te5ZgGUVE3GK$DA z66We2boS46ph5I)zuIQ6aht|)bgC<3LNJ!mkt^j+4Nm2Y{wW@lUwVpzJZVkgxKeuT zCK^af*);}SLxK?rS_l?WIF!cm&*}7sK>^JPmmi#vq#G69$$$FVYB{c2&_?8r;gf^C z9K>T7vDc8oHB6?bp*FM*y3-onJ!y?L05Qb!dTgiz_sx#H_!kECx_>a_A%FQ*9T;Zn zGmS8pm=>EnxDRu{jRk@f4+GYggeK$So@sP)&@X6O_JEeP#J~PkHzKL=8oMg1u_G!M zhS&(&|VpE#!c;0c}{xp?Ch`~Zcb-{wVx`XN`?<##1?xrvQ z_mw2B{8-y`cMn-TnH;dhQQ&|enuzr<9^LI+-%JuX$94F=vO|sbx}debk~46RIBR#7 zhEztP9rXLP;tJd>ACEHF#P1PJlve8iW+mR;l6+El<&^%Nnc7hP@-+lJKaX^z@?It# zD;SApx`+k63YTBex*#p?zRQ)sD(MR=9@4V3Oppy%YuD7cx^P{MTQgn8;14}jY1xoX zbc(SY$9RYSxmqmSDji`@^~4->VxN(hf-~&L>yJYB^rNKcB+|<`5o|iz!-NTGw|1b% z2gQTn+Hzz#*gPz+o0q1#fe$P7luD$_g1jzrLiE@K&c+qA_P9JTUN^<^^UCXxsOB(q zs0aVc77jy=jG?&mkw&u0k(@k8G9v+cjt>px981RACCo8g4%Mgh;!Ty8WHBl9SvVG| zW9=O&Wmvw0!U$(=j84ZhJJ{>)+N@Cy-ds!GZNfx97>zc%!yj5<$zl?=&1&#@Md0wK#L-3qUjtakZ07GQYVAUj}~wkRiy za9|>iWu;F2bzKD$rDlm~^mm!h^?7FDR`E6qZ+LByh%ny_BEY*;&-y2ZwxFEhh7P(n z3}gp{&)jz2S-?dpcMigIAsb8ikUR4ZLcvTxT8q1{%NvC>CaYj3B)n-tN4Bd&&Do@L zH6fUGU)JO5CKP3>&yPz++xG~vs*pO6t}{%1tZhut;7#h_9Vv0grbN@|9=#Y)oYpMD z7_`fim0g@jy@Gz}Yk5;ygkj?#J#dZ1K2Sz{I9?qt=ER1iUS2Xk8=Se>GwGXYaj@ey zV(pP|?2-q@rH{;?ZEj^R2%|~7L}8w=>)j`cu{WVc#=`82`DWSZBy7*HG>NXmcH?t1 z#{w_ih?O%NjXkq&)!c3AY2~2{!HjQpQi97XCq{|%cu_XTPA_Dd-`&zF%Mh^Ohi7SE z)YJH~I9n2-U@X!+unZ&d@W9=Y&25y}6?OD=vUGCn>Uj{U)0%gNrJD}-fMU8eOGiD- z!%yup^QqlFen54=2TSv_oHF{!mDuDu7PEFsd|h2<$rIlrIeA39bKP(b^)kB~cw}P* zm*uL;wR>6lPbYNVHthA?hJ_f_cX zg%7+o#~dy6i}m-lP&0j$tGv9{rlySv@57jL+UZ62gqVw?ZBswQgZCa0YpORliZR;M7o{YYCfU2D zutjGE)@28u-O6D(Q)W}c3|-Uri0UG(vK=^Rn4q)zJ?WW-`kG^#wvE#TW+TKkkv*A?VM_>wctd8faM( zy;oRq2S4QY$v{4=5MBoNTD#7@rQX^s^S4#hXN@2nFCS#e`$@ys=-2jCkenqh)w1bb z5XQ+ZYAl`1$dIm^m~dcwSONH0Np1r}%4@0Ak;hevvBXxP!+Ztpfw8Qv*vf)iGjr{X z+*w;ehp-ud4vK9(TQr`rX%+sl<=Ex@SKD^();MHa(ObPgyjss&r1k4nYNfoVHOkF) zYgB;=FL-V+v7tFPm~5kaR;}ws$xQt)6>OK<%;<3mYNt}Lx%f?C6`0<}nlT=S-0rei z!W{7WuyA0Y>so2K*(AVL2h#ah7!}+{x-%^@X`6W^A)Qm3%O9pH=JwAtj=Hl*br?fz zTn+p*FLb)G#7D3ls`R>5w7^yaY-Vky(zg6CvSu3KDW%aY*ULIj>NQ_Zm(6D|U3}cv zjKR}46@`_HO3*t@crfntFslh#cSyV~TgitO^OVUwQ*Gs|GS+%~%{l7MZp==fTEXq| zmA|{Ci78DhWb&6g_Z)k77`qc{Hj{TM4qkCF`@mm4JUl zwR4%2tvF=;73TiTA7p)&a><4HR+r1MN3|hIe7YdDV;LNNpXIWtBf+;}XiGh58=T-3 zgI=H~`+BfRlzDySL-1;qNq0%Wfz!b2!p0HT`}5VwIAHZ4uXsC#hbeH_4>W!;t@mr$ zS~q4kCJuI$d*sG_27OkO!VDpu^UXLvc&Ho)yqS4^a1}fcPsf99&pbQ03a3ZjGo4($Q?qTDx*S7oX=B2Wc&M9~Lk#olRZE2Qgc}g?fC1I{<@w-%m z>9}hvPodRjTm0;{qMW6o^{#una&m20pEL~TY)HCGie3G{k_Y{dWBaUfh1nH)gXSep z(}r1>Ok^hAuk27w6yuh45yT;+H^v6~cqB~PR9t}0;v?sxY6ys6Bk#uz- z%m1tutIT2ETv?9W%DH`+l>vP_*L<#QO_l2hbGbHjEv<^hmwDCS+;J z`q%FEE9YVdo2j|G>&p397sH=H&fP=TvQHMqbUb*%)B`tC+u(Yx2TxW{-Of}3!n`7A zS-C`%uhP*2Gx^(YXI2W#n&2s<_UcOg9aajNgRk5cux7=`?C$CjN3$zo zDQ7FUdfc=R=VZAzE%#Mqf&R2LKFN))kxbXQp@0RU&<80+Zs|<<%A`scEe0(P=&eUuNu4e^wxj3&FnFskL-}7mJ?u@#Srn>xTEU!IqUqo9Ck&$SP~3cE-m1 z8Cy5#P(1p{MSr#fQ2t?!yY*QPE2k@-cZTu)TJVM1?n&zHQXSb724HsKKmREL^p}~0 z?V#Hz#Vh~|7HGJ-Pp$dhqi`=Pxq+6-meU?i>e!h9lT+q6oIu5@66OPT(a(u7?3`Qy z*m+Ci16Iz)7PI=<@qo1e=w;pj&(c*K(;M0JvonnjHVWAp zHZ%`A%zW6ccEXdRFYF>F(@n73?2`4wG&hnKW}%@S$z1WC%lUjk7qg?7`p|#$3d*kj z=|O14E~wNhdj8r_4Y7-EvO1kOzbztm6fFaU0S#zO8DlX;?Zl z+^u@4v)lK(%`!~VX5v0NlCGwhJ;kn7zPunmcrpEL7B$N|w<107vPC6>F3lK6ZDV&&X{J*-2XZ>woz<$aMp?NEhR9v5 zu3*m)>M*k^)4rb6+sb+_;qx$N7s8rNn7_^Fe_eJ>0UZwW`E1=4JoYE=S&u3|Q^6R@ zXlFB|pyAGcI&~%+ID>CK`q@f@LBT`%hfZJytb(jCWCugE+XiPk5VLG#Vvy~dO6Cv@ zNgz^J6I*~FghfQGNEWNRJvgaQhY%oC8`3vj)T}DU=Y`GwXp8XiXnqfP%xtiWzpB-lBI0JmJX#s z)vpPM7G0(<2BfZAx!~Buk5o)asTFsV#zH2>!Ig%)=vp|#N8dYr{nwV-Sytp55zv>m zp{yr98n|}39ND&AY4RS-U{?OFwur(2h;+D(JM}x$LR5Cy!P;CdW8MMPH%Dn_xt`#P z;P~mI@%qb7N|4JdoyypqSc&NAE90n~@S;J)&GhQbOx(F!6ErxQp6}$ltkYY<9rV14 zvs2C)mTOjR8MzvkzlGL3I#X-*s)ZbepH(Z4T(0!r0`)UW)%HX-%&O0-4NqSg$KOIr z9x7j=98nLX$JEL#(M$_DB`xh_V-0V-l13~_>YQZ{hq0I*Mi|``uw{-|Rxy{Um=5pd76=5S_yKfw#mL(4HXO_#k39WwI zJe_<75W0_MhxF{Qh}ma=#-($MtURj+4CA=Ia)xf4j+OI5{u7x?r>EJx+qzSw*HzM6 zt~{LK#{ajLXZL^&bCy;N?jfyOBy}frWph-fW$P~O(6>#enQPS(9wb<^4s@yH3~Aw% zze_lgrDl(KlukihU#IW=EavPafFT$c!~_)cg3zXK3M0JP)bN1^PTiok-my;FmaQYx zwhn7~HWkso%w%K5^xRjOo+LcT;xBI#ABEhhm9V{f;+R0LRPRg>ZP+CFQciaGGWlrWw<24s;-atOjQXNa@ebR@QoPhV)ykd=_`*3aV=h zb!6MhuyIgzIKwC*6!}t`-KnqbNucIau?QF!|*_P>rd90d7sSI)dN1( zq3B&!0NHD>l@#7z?$lrUE=w4+jL*||*~$kwTczN`-bjx-3m3ENlr!!5mSbR;OxN|V z-F^9p)|5Hh&SIj@w%?VlX{UM;O3V$ICex$mu7yk(8vKaA6_S^Rt}$`ko^%V9rWB6@bdMYbTwr9!g%QF;EUL4`I%~xPqH9jO+`EX{)H{? zbF3m=>L)bQJyjglCC%=s+N{GG+*8GUM7)$}H#l=w6L%MLi=Mrb$k7-MLvuqVhnc~^ zt$xfFxzmZmAlwpFiHVmR=LVA<8ksFkc8|E-?ab{~98BS`N@yMJB*tFiq;)fY8-P2t z!dC|HR%efiI_w{93b%+6W89so?`FPZEa0&l%&tueX2!%lZnTPnJlrTYdwJsCG!6xE zi0Aq+WhK+@IG+o7vYQa+1{0bwH<;k~++gB1!MVYNw#*Ht>#-`xk;xRl92*N#e|c@0 z+0yZ%_G;NH?u4_uOu0$Y?n32$JtUu_XxK+y?Z&=wTOl_nF4r$FbaNw~-6m{wnVip_ zCSDDe$a8oA4M=+k(>(0j=h?S-Y5?pFK_7Jjz%HXL-GB_L%UB<^~hvZ@_kaG}%aQqq)gW z;M~tE1z8Q|UfbDgFjkJ%@pt{Ln;T4cuG|C5y|DK6B)&+&y|7pn?lEQz;SB?pr8DeHn6Bxq9B!qunOeO_f zf3(GOefBh&w#*GCv;Wsm6Eed{a{ZXl+PT4Gd@^iyEAwonz;5y8wE!r)9?9g&n{IIl zOm>$$cR?>tMsse^MgzHnCfrKBMH*-$KleymS>~MB5=MN|$b+_`4fc8go*Xs{?cM6J zGXv)3<8J+OYxa7DkjZdgGc#ek2YvRExgqgGRtR^eZ^;_{ZdR+XD%|VM7-*gf?d0nO zSQ2K{l%*6>?d~JK#?I~-n<^~p@%`gn>YIloGb}=~ zq~{mlmXybzRS8}))n-Vk#7ehca=8 z&d2DfbdCsj=LQq>&lXdc_|&cTGP5=R8EwO^+o*zUBdv@yn-$uuoLrTGbZi!nR;o1P zX{3wo*uax5Qz&`ubID9+ad^q5{9@Lba)FyRy&PKQA4-d(xxsDM!+SxU`D>1lz9Bs{WmoJ0V6XBP~~K!JmHNRS&GlVos0P zrx+_=$94O{Mj>Yc(k&iNwHf!02{W5jq_T~}snZ>*`HaR9HsOyb9A4ickH7d=uTA&r zDjDPWbUNsZQ=V#eC(O@bjiy^QFmu9+;O(H(_C;Q7F00PL+u(^cb~eg*@su$l#RRU) zW5RL-Ou++Ms}fya_Q8aG#j4143W$pUnTkZ(^*5o1F?XD`6DpT2e+8w1CkVIb=S< zKMQfSDA>^eMsvm%Mi={P5UY|ln>S40SuJ|-obU^{)Rgkrgw>*$Q3~C(^*bov>hVG) zo&a1mOw5ApTSl}FKXAF%O;&X6TW{-Cn(}xuTa}k9qE;vm9DycXU+-JjCA{WsqVJ4@ zHe1AF!vDZmfioss%s|-(WL}1E0SEC8xrE9}LL;ri8>YRqZnJU`;(JLZrEqhN;^AAj zaGGsl6&j9%bB*G`08OlMhrXk&Hb=Cvex=e`(S{?8LuJxR=wL&;f|1#gkXXU$N=1tf-tJwrvY;qIUfRH457j8otIPJ^O z$P+ydRy;{~YEnSWVWw{1ilqnP1bqz`@h;(Dq>GJ^SiEwug?^?_XdSEO%sY_um8u!v z5x!Ca--w=NhL6=|*MRh7~T%>qya! z$7^xnxu}oit zvxcQN6WS$4R#AAHhgYMw>mSX?l4mcwahQlhpXqqDN0ix-Dtt;xq=$Z{6w13?E zas}g_G>jX@8}n&PgWSz$W|!#_t{=wC20!~X6N2d_7M16dtC%K?3JVq(Rt7hg{4ghc zpb+dVsM+VyFwqPL7+#zgVwtRAz%j^#G5R*pVZhDAVK%_d=k_RPAK}AXVni`c3|b6$ zQID0PP6l!tlo(cwCWcOH9mbJ345gLFYFBEQAxar1nFfBDL4~oKM14jx~A(b}^t-oiw8PBFB zIA*8y$DOV2vTve?sVr|FQV#b^=jeLu94dESGMzzsQ6L;J-m|A}rmalYaQ1lrlelpA zgH0p-g`xX5EA@m133A&cF-*qNdp%Klv}2~%W3p4%avc6XwtaS3d`L!zlcbzGG^_TQ z49a=DVmeIaER+;c^Sbtr{!HOd~$knI#&0Q9^udGBCj;iH%uP6pAUZV z-gGc_45{Wsk^_0Qr%)RbWif8y=)?Q&c;Ur|Kl@f)3u9=qo0p%B6plu_}fu&bTZfO77)`)%r}UsYj-|zfvawJ#nEq3Oj-N+ zRfhgX|10oW<-SC*7enBu3cOYW4P(_w4Py%v#A6E~s}ax&Xi)t49Z_-YwGenS1l|dO z_maSP$UF|2lp0^Az^LjQA58)i?IGq}QF?wdS`gK$n&#rzqPq5+>RD9Z(o)l271h`0 zYxUDsowvt)3*^-2+vBLYF!o|T;QL$>nDnesRgfwf1jG^xd^;+f`;5g{ zKr|FCQrHJ>4FM?kF{?x1{t(y_0^37iZwNf80Cio+5m4NieDv!t+DVmHa6yKYx4QV#(DEpRb#%cPIT0Z zXet-+aeaMZ^wWAqB=Yf1uG&TU;`5@erT9EVw(2)utF-)0qQ71mgerVizp7+`%k%Ui zvF))qDxOM`6oAn`w#;LHrC;lczoJBY+*%y_saPz*D~x`r%DE`XiL7vRYk2W zvBFWy4YkPAccbFrd||4&rLa&xw-yi6CL(>&TPamvEz}F#yxN@dDUY&>yONNa+N!)B z;+htpdAWznJX~E}D*~p(!zKw-wKC@G#r$d-TTN4%5FmwQXFgf$a>!dNHH^NZ?tZyV zDRfF>ZEd}{Ul{#@VlOqQHwjiNT#rIGwKl09<);E96tTieeOKyWR?2Gz4Kjn}1N9<8 z>1c^3^9y3c*pJE5SQ{$=^LQyKAjPwiKC-#Cx@16oj$3PMilbl2FDi`wMXAbAHSGN? z#j&eoSl}AVGKy0Pa-XffHdkM-#^`^sDPONXEROGJT2iaX@73kS2n8+)DUEoiIQq8l z^3hLMo`F^aUGiyIkTcsp#|0{pzxmdz(|2H&8RX4fjn;ie@>tR+hX2emew?>80 zZ^|M_iQn`;Q+xAymqQ3zybS?VS7VW&SwGc{3XHxlMBk07AWZ?HDZPly*fI}q^>Dq1Egni%mAc7_t-qnRuB|Y3rZ~2~ICg7cOtLw4Yl~Sd zPhE@X$k$6OExulbWr2L*(TlPQQDJ-_&ew_!9mTN~b&61^Fm_vgI~H<PZ@lnxS1qt{4VWE$;Z!@Sz6;@C#}AMqL6sLG0ColU0q$9y|GJY3;hdsa{t=4B7Y zWh`%NR?SVt@w3n|{=7<(K0cPKDUNB>RA1;@mqhCr4&^d6A zbz7xsXinxTpP%PP+ZC#%p&@BugZ?wpyV21`Z{bu0_P9|+)P-Z64GkEB2J68F@-;Nf zm*TfogQ}*cp&?%*OHxCpV^F-(%X_c_vZ}u8{H5r61X(Q1rVBH7L_Jq9m1vZ-O`vdLGS|d_!kTFRZe5B25JpRlD>uc*u_qxIf;xY`jIC=!NU0O z)BWR5Aaij`i~7L3i!JKB!os>*oTYvGAI;e(5f?HCuGTo(R+F#sQLmC?{MEv^7ozc3y%4?b;maPr;^7;T5)78|i4|?t zB`Z8WDt3AAIQ*83?f7UZ*F?LeroW|J6Ybu598=>9<7Z^tstRLI7bo5*_Nwz0Y^iIG zG|Xbgp=9C>$eudMnBLlgl_-vXsnsju#2a}fBi8(SV*ANFI*Iid|3|grYjOM!S~1qW zGUjc{MNZ3HoI2w>^Br|&9v2;{9&D6}Nd&zx{*7AXkbbPqsqghGmrfqSr{~u;DAxZs zpL7ZDeAp$r8%jJFe>dS!>9@p#@psWsZ)PUnUr<{eG8V_*&Cidzo2&CCT*9n=ogaA? ze4G}JJuma6d4{-$KnGQFX!3;mDOaQMK|0f<8HiMA{99&1zm1HwsvT9usaNXi7S`6b z7N*l&hEaHLA3PDxqSr%+Z*i*2zeX9aaMm=QT3< zsh^LbArpSYp89HYXbw{#ayEK`!c&t^4o~@c^=gOZ%Uj9tsG=&Fd6LhPk}Hi?hT_=$ z5;N6ue{rk@y{)dV_fD!D0C@@W4GJQC;)^JGFa3h_p&+kn#8WEzB=v49j=xTC&nrx{ z&TFczsn@eg$-ld(IcimLVwo3b$u7Ur^?I+4Q(n>w3tN%sd@~NO9++Wy-x)o9tJv#Z zn5l2do0c$4yd{--OEyVvh-8vyPtR*O?;OdZT)MVw0a8%DBl?HAhl* zO@B1fYRL5yY&7`X>mI&Q^a>*Xcx<8mmwe+rNd!m_u zFibQvlmxA5hHTjqBu>3P(R_o%xD9RePv*+1Y~s{TG&k4Q&aakw>i_u-^JN3PCo^$J zapDfKzDB-qsD>&N;Z|q?CQV7E2VSi6-nc>6*pI2&e2x4EYUc}6iCWNv|C;5os3NON z4od?{r&=4Bwv-aeC~9DYfi~Zy!qgi|)kxN)P)$u^os3JH<~1@DZB=!(HLb{kH*&E| z;D1!Ni#N5^OrhnBdi$u!fYWeee)Om7{euKbhT}#3AJ^pLn$qw-#rz)WjN9bl)Xt-+ zpN}PR`XBd5|Dn7@VQ^S(P`55n;0Bmr#3+--bfyUMiZu{bDT@qW)k1k86E9!_lU}-1 zoY0DqpL|R(k&{eFKvYW3gM7eEMRe=1s*;uzF1%hZ_UormTPOVM3u9a6=@-`<;T_v3 z+14=MXhS^%=C|o$TPl89$;%d(e-j}^5T->{0c*(xR$d9h^ed(NNMvW!Kp!T z8f*l6R~`3m1EuLE`JobkWV$o)Idz%_+Vr7bE}7SN%-k>{RrXtLEf zl>U}DG%0^vU660kP}tBQG1W97G(&M0 zvyw3y3)Q5Bw9o3-%2hB4zAk0+>b|h0mf494`5KcllxvcrNOppMp^h$0-Y-@)H0W2- ztA;2*|4%HGb|W{;554?|Io=c1Zr?tGOpfOLYzLfe4Td_&m)H;`SOkj#$P{a4 zjZ*At%dK8CQYT+Z>{xN~rG)y)m+EV)TeM8mqBs?6l5d(TOnzBLzoj{}e)1(HCS}B? z$(MY)UQf6-`I>+HYIwW^^IB|L-h$6E{%VUkqfg=IjO}Za6YK=Ug#n75YtRs;#kjaI z`JVn475Ns8U`=gJjcQj*Sme{nq85f|8|$@>XgTW|>*RjR!U^+FwIJs`O|2KY;zT5a zFW%(m7tXbJHw!?GYV&5IaIRU*YGnmaBwozL=w4It`Bt@mehvTf%~JcCHU;z}-p{Xz z=hu+hFh4H~C&iuL(B|#E9^?613eAy_Bq=|2>(SytND;+*>6qUT&u<{YYM>6o9Wn|x z^Ag23i4Hw^^DaXa&&OyGlOSSUv8mY0a63^gtHHFK|K`=!SwK*VD@c+LX{Bi&3@uqA2oE; z-sKHysHNpjloDtuKW(l|tJ}pT&WkWqei2Ql~EP&$v_a zqorO|a^RK1Que%g`FU|oEahO4urSeBucbEq*#C->Un$|JDxUv}{f`Yl{}q*vrErA{ zt6N&y8j9!N#kT873RkZ=g60kl3_eof3r`gM){?}4_L-sKZ(_Fbdk(@NOdF&iMb+Mlc zi&HEu7pHO}Q%l#A7PlUA#|&*@zC}QMZ^dpFr=F5&wK)m4QR@Tbi$S= zWJPnD;*PcW+3CgR#cGy3@gVah;Ro%-g&tBx;e1ZkFP8O_>cs5rD5}{*3*X_xt3A|W zPh3}5=fm4Qe8R(i-uBi7Xh~e?f~2g_#ogez%oDw zKpWdGcMm|9UAx>0z)FB#{cyR}fHi=%fOUZNfDM3q0rvrPv5m`Z1UvwE5U>f*3D^wi z0&D?v19|`-0&EB9MH!cS1fbVhTy7WOQNV7%9)R8}ak+hf#{iE5o&bCp@Jj&Q&Es-U z0(6^<%l$H7Kj0}qFW>;656}-702~D9E6pyaw^Lkh5b!a;5r8fRayi|+?sCTgI>za8 zLx86Nx)0Rlbb80-wB_$|rvT3YP6Kr2+U3pyo(KF2;1hsRz!+d0FaekZoCBN(TmVb~ zE&_fP@OJ<&06q!$HNdX}J_YzR;5Puj3HS`)vw+_M{5IfofENM31NdFQOMuS z0WSl7AMp18e;@D);EMqLxm-1%22cyg1L^?vfO&uhKqH_DFdxtiC;*Cp1prnUa}gj0 zQ~{_Z7Xh>x=kj;%T>qb!?O(bn{|i%7`&-X`?Lo9?6iS)_?SSQgO@Lj1rvO6$(75>m zkrRjkRRCW}HKCsYB2dN6(o_Lu0Yq9(1H^zTfb37Z8ZV&Kr2@I-0x_TpQ0*T#fn}45 z2`FKg9tC267Fc%)i+~Uefqsb4(}bQT^HYFc0c+r=2)zur1b8*)#KT+!hyhgq_?oK* z)BtJ$c|aYYUO?EjjT%)&xu`m-iL^N#)kW>m(&(P((P(e{!{{%g_oAOfe;vIa{Y~_z&gNszy`p*fcpUV12zI406YlT1n2~O3h-&bZvcK1 z@FT#F0sjr~mw=xD-Und!b58(14EQC$M*vR(F0E~RHTRDI|0Cdk0(=?pj{*NP;GY2g z0Pw#6{wd(AfUg0*4)|w)R{{SV@J+zK0K5kH7T{k2{x#qYz#jqr4dCAbz61C!;Ew@+ z0(f(6qj*o~PXT`hcnk37fPWA8KLBq7{!hUF1$YPWeZc<>_z!@00sj&3{{a3I;0J*J z4EQgA{}=E>z+V9VE8zbF{0Q)4z<&e$CEz{4(9;4xA@tXP_W?hJ=D#8IGk{ws5CLL9 z6(9%r+`WyP0I%j=1pE%*cL6T}J`eakz~2SD4ETM(=mP@dfJwkPzuU<@!0m;g)y&H>H?E&!$g7XiNt_&b0X0G|Z> z8sOIfp8|Xu@Ed^N1bhatYpcMcfZc#SfW3fyfX4uj1D*hU7_k0B0`~&$1KbbT2zUVS zAYc=q6R`P1>isT4TLA5k2rLEs0^k2M_2;eB- z7~nYI1Yig-3>X2N1e`jiik=~K8gK@%4gKf=dlTV}Rp; z6M&}y!+;SopCoh&@C@KI;0)j_;90h8uSuSO(_~$f4ku41)+$ak8poq?ZZyu1=G-Q7v;#%~DiJpblhfRm zBV3xZXqQksU-eGTKwQuokc$_(c#(^5aPeX-47qrTi`!ki)WyHx;#*vNtBY@Q@h`gg zb{F3v$Hm1fT)fi7t6aR=#cN!=*2U{wyxzqdTzs#K?{o3}F5c+kO)lST4 z{ECZzCML+8(Jo397o+%=D84Oq)x@q@t2z{@YL0Wwu`9%GVeA&g?uIzJA&zf|^EbqGH^lWf#Pe>5n{S9+d%W{d zyz5Z>=%M(;p?K&}{PdytZ+;d_H2!S-Q$e>*STjxlwu9 z0#yJx*Q2>=K#f3t^tYHGNXVLR_rD12#VPsr0`-7j1YAUFpVK@h_YH||?hgU~9PmxR zzX1G8!0Ukj74RD1TY#?v{u$s^z*hlZ1N>8fbFXa{*am3t6!@2a2;lLx&fK?Of8jxe zUM67_FhuIm=3M=s+;YD{Kk1T^+}EwpHig{F-w+t3#HLMz0G}dmh_XK+-wlADY!TQ7 zs?i5>??T28-xLF1LTSJK`s*8WyT9`F2Xo(hcJG6^KmM`ee&@v(AINQf>ihTQ-q6e^ z_r!+Ps(jN+TLIvE8FHW1qiZI#$x}+bul`}~L~-I?Qn%zzfBh4X<^=wW1{oYZ2@f8UDlAh!AoNYZ>w27g6Yw^V zBD*m84&Yt#!I7yS0p0_=FL2SRk?iHEh@K0RB%kw<=h_L;*h2 za9-pVFKh!Sp?F?27tf2x;`w(-{S*MI&c6(JiF~^NPmtw{0Ej&Qs!}gFLSF@Z8Sn*! z>ii`IFFeKbYlQj%hXF^4`wrlnJl+8q1xx}w9d8l3Rp9&^0v9QJ{!QXUR`J4Tpy-Ey z9|7JY?sEW7Ws5@R-{uJq} zcL=^KaPi{+(NVZa#*3=BaFKEsg|#53OyC88npC(r2@t*7SCOeuI|@?^0j&VhQkbIh zsZG?OT^0p>p2LLT)A(C}w*fyOj@qWEV~RSaAY%&jSlTKCW`Ql4}mjSN;z5w_l;1b}=fUf|)3V0RpO~7k_ z*8y(;z5{p@K(j8=tc&je-Ua+XFL~IfU3~Gs6yxSfQ5i|z%sykz!tzRz>@%q zT_E#?gTll}0NYj=f(nyC3BkNk3qL5s+WsMSekz44<{wK@N)P;pQjsmiAm zox#=dro2vy`(K@E@Ih_UDO$T~I{4;X#D-XtriI$M_uF+GG|^7JUep=AsI_nr&+B^_4 z9pCAn?>KWJgMYY1@r94qyJ`j1Dmim1dj`f8&dhVwg@w)9^A%3T=(L91L(Xi-)1yoh zZV+dEP?4n!&6zMHX-i^ZOI?e|uF~N!MTlBeD8#C7bgC{;d01qN?(ebH$a^>H>t>xv z{64SIaj^D_I*g_QUnHA;YL%|s$UO|P_kPhF zN%Z?Jd5Z`-{tE~LLH*~s^|m$lZ81o?ZJn)iNj2i3j>MAJZ{z#ke_y=~=Oqlv*d(#g zJ9x4p+Qde}^sBR&9>rKob4*BQYxB+OA4~KvXp*b3K8eu-@0#dGZ!a~AY=mvBxv4py zM9Y?>(c<$w%R#2()w{8TgnaTFNNTLJI+Qg@X-a4l&Ll?XlysWk)0}TsMmx)$w#L%^ zYje$#Hgv98W&i*7&IUNHt4h$XWw|Zck}NAuB7zMMFu@Fdp4b1c8PAOR7kkz}A~wM@ zcs73B{W=oJl2&RZHYH|ScFR^MGv#Hovnkd!TqTAm;b z>Es+6oarPBk2O+MC#eFi4h(G7Pj*V02=T-Q$*8%~y%HuJ21((pXnb3^zREel`3Qh;Go& zDzO1{wBdO~s9dfZm3pmL4L4DdqE$W75$vLvIME`fyCCz?c0;;0+F5O2=H;(c42=bM z4o(Nfvrg~va8yA08*yvaC>S=c%C-vGxM9$0WTNZ&dFhdI1bKtBDt_c2$^q$VS0K__ z66yeo6hF8Lb0?W@Cq>T2Ni(xX?wY9bFNpkN9EL^R#Nq)MIRj4vS`eEe&a9fKh4kBr z&2m3Dy$p*g`(bsQqXlDwdQe+NUQo1{3X$ptDy%fZguIgcK7Zk`pmU0cCud z5KV=;rcW}~wyF`C<$B91e{j@U7{2>fF2pd;n(Au|nFmWP^WLci?|ueQS*O#XR1ZHS zyNRhW^iA`x5;@$pS|&LHCI21L1maN>#f2n-s&yo(t&NG_+Mudg^_g~qrH7mVlhKyG z4riy;l$U2WHIyxair>?;yL2!>g+~(}6LHR(aa)6KZA?}URu}w-OjX7a+1`Q?M)Dp$ zuA&s1<-k`P!wRfWXV)~Z57AX&xeGM&Rp>!e9h%X7lY@rSqFgy_h%$lcK^gC4KdE}M z+f9`G+U~VXJ250t%WgrY?rb*{0wz@{ernqSt(cb#HW9N1P^aVJxoB^BfSdLOr({1Q z_3cn>n0S{|MYi(+C=_)ayrRXJWHe<5dv}!db{#U7@v?(yjzUrWSR2Y%4R%VHqSy3!iQ9Hhoq_s*FB2&`E`b15V6Pjc;Cg+2Qq1+b5(uqFJ84iy~>ul-}vUnmi zo$cn*<-V6`6MX4%1sI!Hi`0^5lj0nWr2LX7RhKq6d}*0<%C1A}<=N&xWrw+h#R#Q~ z|F2Brk^dII#bkjdE!Tzj+ua z1&=zOO-E~kI-jwfEvoQ?PYT6rx(-$q^N<6-1|4@89DT07M@FR1^d~1`{U8BLuZ9ChmI~t&!I;IvIDE1 z$~c7zRlRhgM|!CoHtCTV4xT6o8ly*096Y7TS8E$`Uu=l^)J4^Lux;w1?(tb_pn*55 zoIOI)!Odzlad5XR2&st-vI+=;AM^;@r=FDM6lszy5^-pTBSNNXQC28{rp`76iul4~ z$t1oRrCet4h$we2X8BALvl&4{gXw=Mpj*UD+EE%1UVyf<(YvJiR;#2#t984q<~^(K zw+k$+acWhhZZ%Rzmt~FH=sl|!0j*P(jyOPIRxz(Z)4GMA$h<%1WrR_!>Wk>ozk0NB*sf%TF)DGBQ6Tb{c%8w=9k5P0Hnpt&lFB*!X@yoPR)`Ojtak(Kx2d71b6~fxH zK^7DwqazTN7RBaSv1ee;MTx=tCZ!uEMHn&U%G_KcIlwPQffm6@|HZINQ(^~hX%dMC z6H!;Cb;;8~#q|QIRj(u%v%9K~i{|dCepKlgf?622hK zA*55Spq9Y9CK+TO;uzR8Lr052*^DtQ%@~H-xdrv7R3=4!Iv@qoyP-MAS7qdqT62s+ z)?{*;fi~=#bnu|kv`0^2)y``TO(qeIhh#b-=bu+iZbDPaQ3X?(yVfd^?riUDmz7=H zax7rWDXxuE5_r{Mh+h`QY*CllnCv(2Tnk@Y#r~xadYG*;bn@S>Vmi#0Mp%!iC^Xt; zeiWPRn_sp}%E;4gEK}^pel7&c>SpppXV>JZWpIV#F%P#eAyQ8ix`O0*4s4%1tr?E? zVK`Rv0Uq=YX-!$NspTk(y~$H(0t5jSL_5&R_|=M304Jwmh4LV9(qvN73h{{tGkqiZ zVO4p_DS0KGKP`@|nT0tG$fHa~P@$8jS4~cF&Q?jlqf)C!lrUqh8m+7ug$z!l3e8d{3Pht!K8D_!-#agH!X>nu8qLH{B{_aD3C&B?lX{4BOO$#d ze+oppw#tnMG+mQVqN10w*z}2q5#ZLuBaEC7SLHv!M1c1jm^_!x*MhzJO4Lxl(rj$g z7r~Qdyo6*$!0QP=v|fdxekiI!oBWUrXuPHHLt81eMUIrVbaE$QtDmr2g?9O&k_zon z)E(Ij%V~T{Jw{(&4)gqwPTndDeWoYOA^C6(9Z^2M#Qfw@bw97}Q)FrahU9iwsC}sJ z^BP4j%f%JKKt$zbNId!;k44yEW8h{ZNg;`x9Yj*WuIf90S+m z9Br9bFh};P+~;)el5V`i$8@kyrJa@g5yi?Q6`fEOiRsW1!=c6|@rl^B^7#Y2tg*Bh z;U@zJQzRdc{VMxIC5@$~&@+7o{W=wO7>PtEj`V4OV`^U7h7ibNo0Fk!8X?DG9@g;B zl3C8t$XynxU5C-!NbZqGco1ln(5fTnRMJs(KdJ5))mF6%a4NBOjzk;Z`zZJCv)qFZVzVx}@~kU-brqxvz0(W^xn%zP2; zGWkT*f<)?OiQr?RnWetG_3Q3jgO!$^aE^p0e9YGxH93wB z@CA(I6OGUjlhAPi>JSgaGSD5qCbJbSfx;uAM97pPKhmjt;E_%_5GIwAjw4U`>_Cv2 z7)Qv1?2*UZB4RV~v1NwTk=K>X4VH3S8Wdj(BR>*1qn4@EXlAV}KUlIV|5ConLK6kn zBA-}{j`&s=dCCaDn@big9ePqDZ-YeV(1@ad@XdFus(fm(tEAtu(9uerCa3%#_g^0f z=zN4&-X#K>u|&>e;KK@yEP7q8OM>*NYUi46>0<1>;9m#>@07?0pAC_q$fHz3YyGK* zHSh_^X>v-URrMa!I`2JYHPYJ3TTtItEpr=IWqf;t2(?;nH+kv$xU8Fn0!op}s>ehh z4@|8HVPO6+8*^`B8ZSxJOkAIGBUXX41eG#7TGi@IR#d(MXU!nW0ie4}Q0Cf=D5Q@b$=sV(m`_#HeaYabo+nk+iD`^qCwu}x+mi;B3Rnh{cJZ!M zsPz0(!ixIp;|%dYFd6mZKmo1(T(ma)lA#W0_27N64ymcfVSOLhQR>lkIIBZFDsPVjc(ttK zsw%Fk16x&Ks|MJk<94gK-8xRyY1QG9iYtk1uR-bQ?k7HBGHGfclSXU^DP5w=V>T;M zU7kRpSX4kaB+CPa0a>sRNs@$RO6tp+cy;?piVi(aS_4eQ=>)nt4H_6qtAgjNU0kwsbeTgNo&7CLiMC z7U0H~#`S#KY`xL3bUjwY_uy;7Enm`Nv`BK>^7X!Pfj8wXzPBVP`^g~hs2k~hWNXK@ zs`yjt{;0a2T(Mr}?dtV#3o*R1Rrk|C2NlFqDm(*POich_vlQeL;^&Ki_$Sr^+$LcR zEfT&!co|N?^UgqWwFNb`rvH4d#-AnIQ0k*rNbV5XUe;NuVyaZ=z|zjJ5d zE_X%4q|}#Hvx+$_{>kIYe_q`$NX$cu{D;;l{|0rBs{1B&&#L=Ybyo~}Xb*l_WyoFO zIXne}R;ci_z_D(Sv@`1dnADY}feOGnc_}5SXXVbUU*Ib$MyO$;E-}ow<$hJgKdbIX z)%~Qpt7bktD}E-|0!j1A)U`!D_=1XrWHKy?M>-)7If0A|Qnt)xC3=J0If)KenOqRS zyerfW zFv~+D=Em(gjy$(RY-nRh?cC-EWCBJ|hqPZKFpReajC<2wrQ(g4!`=wF_ql^b&+IRo z2ZqMXu~E;g^m*pc1K!BMkXs_)R?Ld~4sTQyJu>1R5F$$Eh}VD}b@!2BkP6%pFjl<< z3~y!sIVcC&kM5Ru?+`G$=c9MJ`-TU=HlMmHVC<08dw|{U?XPHn{D@%nfz0)lzWz}Y znq+snSsEh$;84XJ9UC4V8sSN8ydiUVWQZya9C*E9a7Z&+gjWU692*?*2KwE?06X1< zl(AbE3zX!3L=S*bWfdR#aMu{UHyWj`=2k$pW0W5my0~K$S zmL$F6l^SH~)>fGx?5DAZhx!MF&+}D9O!S3kNh*~wjMjkBoXYOnX&9>m#>(u_K;eLy z%0$eay;*)c#1OdbJ==VbfOQ9q+qUF#IkQajRG`RGrD%w4y%CLaTW{`7x;fsuEoCOn zdx!dI#xy>u}yQYF* zFMhx%g!_X(B;BxT3?47GeIE zGuD91QTgQoV`(a@DqseTmuu*3|NZ?Hcfjl&7#mexVsm!e7TqPb?NkJZG%Z`Gub*2G zy>;8p-mqr=t`T=|RQiLNA8_x77U_-)kr}t*-9I$K34P&HX22aqhD+XHg<}pJIZ!=+ z%i!=>rBRht0i$ilSY=U+H1>AH+A!7xj5~Wrys|ekg82AQd3BaSA-zKYT?gJb&& zB%mdVeeU3(H-IFF0@JDJI;Fi9=Ur5Ef5k_uz_hsM21WOno86JpgYJlD&WjX?h0*A~ z5wql0TrCzUR8ON6x}7)dag%C@IOhBJ!~Ibjw*jNMo9!R*ij|#xLl2r-ip)2S^;0bw zITl)Ez`Nfqsu6=TGbqiGv7#LA(fr&pifHW{9--@s8WeSuYOt#z7t$KiWry7ZdT>yz ze_g0oU5b{tEL<;1r;&zSB!m(r-Nuh9m#LJN{B4{= z>WB0D8@aOHzMG?T3*CTQM=1es;P#_@+)_YTFjG=&Gp!%`4U0SsdvfR^0a7eYzEQR{Ck={(T~fw1SG4iNoey+qTX} zNZxe+p!Admj6|v4O&3O034Jo6s6j<^%NCA*sVF_nygp#8OXPF8WGQm9SEwNQR8rR63stM-#b-hIC8O zVyIx-Rht-STbTci6nG}3ywwJEX2m0OgtKk#B86=Y(AEBl98~L57|(cizKad zIu*7u5!)duluf04I;lg>&ZitJmx_d}Xvj`lPBxsgqM1}KnoK4#u~K!akzy(7xK_AOhE6v|8x_L|D;AC>3vN7GaBaUvv7}cnJB6f`j8KoL z8%CDG5R;4*3r@6HDmoFLOC`sJM={5WMUzqCJV1$J%<_tfq~pbsg<{#Sdps6OCsSG5 zvhx{aDU||yEaF&Mq%=Zn+KDIwx5!ew6fYJEakv-`N03j~wVWuT=Z4F6JQ1@CUfi!y zE|E(nooL?5+sQnfccWI)j^wR4ZEWZAxmY~yw|f~;FT|6c6>=QtbQ2z2ip8u*G+s_b zOL4DMXz;V(d9D);S+*Oe^l~h0xe2#mxyeF=c&`+3(BDF*Sk#J#%W>K$T(sO!tZ0=Yg?KRbJe1_a87GYV3Z1cN zoZbOv?MyyFJ2>HRGNmEov4mqsAu$_IWog4CJuXGvX^ccHoXSV@PEtc=>~J^~&y${s zQ+hg}o(Nrd%v8WdOj5-l3l}P8UR5qJQB{Jc-o%8FSkETQD z`*w7$mViBmry^95t)n?kESD5B#{YGH`GHS%D_Pfk0nw* zByE^Xgz~8PYz%(dY3d%qhX~t|WICVD<@~xQ5-6Bt%C1tM<<66O$UmsY(A38ha>Tno%Bb;a0q7N7+7y~0QBm`N>=A3Lg9*Kt%xwys&Ivc_qEAEJ%=lr)t zXGNS-;Zz(^ils7s-(+M8<#HLCFDLVmtP_*cZ7ZIkjWW4R+|KyAE|m*sQPWY2$pdue zVQMNx>9K4ml6UgibR^}=e4L@)i8>i8mP;c`F=?Y*DrTYlQ_N;kp?p5A>2#cU$?-h; zZjtdS8U>wGVo)lU3T~*x=vhwsIGsc$$Dk!O5($asKo_PpDT@hE-f<#Xzuld1h)zyD zvgwrSM+s&*h+Zz`Z?d1O_SJL@}+bQ#!DHaUk4d7}Y}o<1GjLFAn%tfQ_>B7~QyIq@VSQ zT9$4wZw2vN_{@MNQYOEAwZSlk0>;~wO{Y9ISd{g!`Jl|OG5(Br`!HpRg~oKv@|Y}l zOl=7>-BB~ObIXofSd*}h$x>PDU=Iupj4A7u3YEMEu%ie|9>e|1=brnxQ1G8|1AayC z@w9pxzWm~c zGmoGA$eZ8r#wXUke`oW{-~8c@hu6OE&dcwbjQjwW{}BRxk*8e$j6;PP593C0_u#P4 z86Tu=Hmp;><|x0QxzWh-dyHj%mr?(socZHvlvec9Q%~u*iodZvfaze)&<%F`oAWkb$mOFD_y$R1`^+U;BI~&jLQr_#ewK zX#OnNJ4h-SkCV81apHFJ$q%9bBMIi>gq@V_@^h8DD5OE^CvOJYMde)MfUy}2{Ses) z$Ib$D_hL*9AgRxYs>v3}mLDDcETBDVZ7-jM5b*MvN`lwte^YkBTPWF*tBwMG-q0 zmOSaNEftKj;#r2>P@ZjA@;ot*s?;K%qY-OoaNm7{7=D-UyH5;#Vy9WP?>=5ei0y9& zR<;ogvFJRxpspqGbI4mLcdgHi8|mNW6Z6_zrfyf3O>G|(>RxwCsH{)_0^F_3;x&h= zT1$YhI~jpiX^K|S+O0B?;E2Ie9>(Y7)+}kiv`Q*3$~O|;n%R_uZ!n z#I(I7E3X8Fu7LcY8lDY-<*K?uVzV&eS8Ik>0okdo&TkqS8XK0OXS9oNIE`SmKd=zB z3Y&A0nbkr}+wjn6f2IEcZzs0ywn41BjldlmAGT1ej05wPU%j}P21o9=v8YCLcO&{{ zBpr=}od@<6h6cJYMfPWWYIRiWpgX92cQhzO-uegmD3u@Gp!LS+JN+8oT;lCF)Vx7p zyC17jb`aXeq|ejAwn4=U^;&3jQMbG82FB>*+Zz?~%hj=WHe!2yCilAX(sXb>e!I_a zKmK-&`KH)Ad?If`(ulqZdbJOI10kzQ@@|V49ix^0%9zYxRz&^ee6#&I8(`^xI48 zhL_e2GF{jx@Adul$}gTU|7sJ~m(~q0ts7WLy|ivCsZfLt#y>7V0(&6`Y-SGQLH)}TIslR^Z^G0A>uPi0S_Wi`yml;odg6Wli$r@7D ztgpi@pIK%s7ZdQJOV+!KuX}c8cUE5U!v4yauBQLz7q^`LtGl0z369Jg_sAQLJ*@Kk z#tM7%>#4?LsPOhZ{s!?qgI*;P^Ak1>mkP$t&8cuKZum$)`PV*DA$;U}kz=vrmv-dV z^ndNoA+B+air;L6ZhU%+;0)uw%+N@7U|^fuKWL~ggnQn`(g0g}^;Lf@XgbwIvx(nC z;+kgOd4=csfL)&obgMYl#QeZ1pUd~J=9@16_vwD_BlsI$*f;*aUR4^niY-t%-`|5k z)ehDU*WO+Go7#J8e_MNB?eA*uuYI8Q!PO&0c%-+NEpjo-aNB z=<}DJU-v@kg-2hw^uoFqOD{h9;-weY&6Z{#o_%cg$=R#3tFK3|@48;O{_yq3u0MJG z>h;xg(Yal7mARvH$LCJXotZm7_tf08bF*`8^)>Yk^-cAy^*!~0`gnb+eysjT{Y3p_ z{dE0_`gHwV{X+d>eWrf7ex-hmg~|B4#t)2-jsK_dedGP(-ncvdm*amv{+97Kk8c~_ zGM*bxjsMB`rtvq9JLB>3=y-VC9^W{=Vf+uq*N@*lzHa>0oLRnU`I**Dt!G*` zwVYYDXW5!%PX&($_XO7jpIUl+>7J!)mOj;dym?Ran&zjL9A7f9Wb2X*OWKw^+jPF^ zRMXL>fu^lZ8=Bgho(-H2oC+KbR01V_2rCBg*eTEEp7 zl*S+9HsSsV_eLCB9-zxG*uZ441;Ajdh7rX@aG+A}{%oFqh}(#>a2s%M!2JP^V;0m& z>%Y5sz81F*2MNZjaj(LeIJwT!=1=3KT&iwtr!U+^Kll*zJ&kP%udhnNE!^91@5X%;_g&l?z9hQ?cL?`U+;h0s!MDA* z_u>9Gt_%8lamR39!rj(p8293iK#<#EA?D+^RPi#>_^;=n-PM_7k_*b^kr` z_rZF7`f=RHN&9rY?tGq~5xG#WZ+?;|KZ`N^)q1`9e~`~_AfL!{@3-ppW0#TZ@8X`t z|NVM>_Z47&h+O}uUSChaCw@||ccLKrkp0syApgkrdVU?}@?QA=7U=miT*@$}5TtVm z>$N{*T!z+buOl7dtG)`Ehq>J__B0F~hMB!EvKJ-}!$4_^YcOsvjJQbK?uBVrVAvxF zS}%gui9B9J$WFtLDeB$J&+|yVg$E+nn{k7a9a->H7T z`dszd>i4QoSHD@EseYsSt?IX{m#WY7{CN7uJy)l%_WX4Er#(NJ{z=adrhm|LW%^3b zkEVar^TX*M8Xq)1WW3+_fbma|{bA!H#=DKbF%BAsjrSRUXS|o{eA)On<4eZB8ecQM zZhXb~s_|*#GsY*3PZ?h@zG!^b`25MaC+4Q+9+|s5cWv(6+{L-|bIx4LT=!hx-2S=E zbGzqGqUER1_?OY{=g{=)>rTC;-d*p5dznC2AdBJ>P?+YhhoO#iFaqo*KuFYIC zukF2d;`y29&FA+%-+O)ddgpcf`i1LPt{=O8`g-r|FlyYMy)b)a_So#{+3M}p)zv$z zcT`tZJFB-_MUd*UZ!yW(fA7^Z={Xw#-AAv@Vfo4*cnh}XTYHGc9h!dQFIoK{3<4NuSH2F z>9Bu{G7O<0W4i;J1N#Ggfo@*+If3U~-AKlMG=4Wd&_OF+ zG|m~g4x>dYeu!Ikx1=k_$`hC7nx#m-H@?S(Hqn8q=qnCrrO=n)I7af-ch!#GQMT zzWLAf`o(kf@Bc;ISLnYp^}78G{q;Nb`pNI12Yx`>)p~vJPwC6_;bZ6*=WX<{EaL@( z%`uDqc{lwK-EslN*Nd{-jeY}{siT;1hFR094 zlJ6MlCvc~6)3_O&lrI--Q2JiR1QYkmXlUR9^f$^Y`CqzzUpT;#EJ#I0sy9-scPH4l zh!?ocxZOy}z4Wohb?*|H{oQNqH16Y`Lt*YTwir85m-q49j_TZ@KtI;}+?)vMa$isz z&p-7MHS=W1yWz?b;^48`<&98U)KI@!O3Qd&p$F+7NSF zlTruOy%A@s4P*tim1~5}T&ALUgy%-`=Ac-pzH1)$u)=VFG`)39Xy1l^#CQjJ;mZ(aW|6o`{Kv6R2V&({w}r2IzRB_x~hZfvW?bZk_->LtHyJRE~hl||Iwm`~^q z-va(-PA%q> + + + NAudio + + + +

+ a-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts an a-law encoded byte to a 16 bit linear sample + + a-law encoded byte + Linear sample + + + + A-law encoder + + + + + Encodes a single 16 bit sample to a-law + + 16 bit PCM sample + a-law encoded byte + + + + SpanDSP - a series of DSP components for telephony + + g722_decode.c - The ITU G.722 codec, decode part. + + Written by Steve Underwood <steveu@coppice.org> + + Copyright (C) 2005 Steve Underwood + Ported to C# by Mark Heath 2011 + + Despite my general liking of the GPL, I place my own contributions + to this code in the public domain for the benefit of all mankind - + even the slimy ones who might try to proprietize my work and use it + to my detriment. + + Based in part on a single channel G.722 codec which is: + Copyright (c) CMU 1993 + Computer Science, Speech Group + Chengxiang Lu and Alex Hauptmann + + + + + hard limits to 16 bit samples + + + + + Decodes a buffer of G722 + + Codec state + Output buffer (to contain decompressed PCM samples) + + Number of bytes in input G722 data to decode + Number of samples written into output buffer + + + + Encodes a buffer of G722 + + Codec state + Output buffer (to contain encoded G722) + PCM 16 bit samples to encode + Number of samples in the input buffer to encode + Number of encoded bytes written into output buffer + + + + Stores state to be used between calls to Encode or Decode + + + + + ITU Test Mode + TRUE if the operating in the special ITU test mode, with the band split filters disabled. + + + + + TRUE if the G.722 data is packed + + + + + 8kHz Sampling + TRUE if encode from 8k samples/second + + + + + Bits Per Sample + 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. + + + + + Signal history for the QMF (x) + + + + + Band + + + + + In bit buffer + + + + + Number of bits in InBuffer + + + + + Out bit buffer + + + + + Number of bits in OutBuffer + + + + + Creates a new instance of G722 Codec State for a + new encode or decode session + + Bitrate (typically 64000) + Special options + + + + Band data for G722 Codec + + + + s + + + sp + + + sz + + + r + + + a + + + ap + + + p + + + d + + + b + + + bp + + + sg + + + nb + + + det + + + + G722 Flags + + + + + None + + + + + Using a G722 sample rate of 8000 + + + + + Packed + + + + + mu-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts a mu-law encoded byte to a 16 bit linear sample + + mu-law encoded byte + Linear sample + + + + mu-law encoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + Encodes a single 16 bit sample to mu-law + + 16 bit PCM sample + mu-law encoded byte + + + + Audio Capture Client + + + + + Gets a pointer to the buffer + + Pointer to the buffer + + + + Gets a pointer to the buffer + + Number of frames to read + Buffer flags + Pointer to the buffer + + + + Gets the size of the next packet + + + + + Release buffer + + Number of frames written + + + + Release the COM object + + + + + Windows CoreAudio AudioClient + + + + + Retrieves the stream format that the audio engine uses for its internal processing of shared-mode streams. + Can be called before initialize + + + + + Initializes the Audio Client + + Share Mode + Stream Flags + Buffer Duration + Periodicity + Wave Format + Audio Session GUID (can be null) + + + + Retrieves the size (maximum capacity) of the audio buffer associated with the endpoint. (must initialize first) + + + + + Retrieves the maximum latency for the current stream and can be called any time after the stream has been initialized. + + + + + Retrieves the number of frames of padding in the endpoint buffer (must initialize first) + + + + + Retrieves the length of the periodic interval separating successive processing passes by the audio engine on the data in the endpoint buffer. + (can be called before initialize) + + + + + Gets the minimum device period + (can be called before initialize) + + + + + Returns the AudioStreamVolume service for this AudioClient. + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Gets the AudioClockClient service + + + + + Gets the AudioRenderClient service + + + + + Gets the AudioCaptureClient service + + + + + Determines whether if the specified output format is supported + + The share mode. + The desired format. + True if the format is supported + + + + Determines if the specified output format is supported in shared mode + + Share Mode + Desired Format + Output The closest match format. + True if the format is supported + + + + Starts the audio stream + + + + + Stops the audio stream. + + + + + Set the Event Handle for buffer synchro. + + The Wait Handle to setup + + + + Resets the audio stream + Reset is a control method that the client calls to reset a stopped audio stream. + Resetting the stream flushes all pending data and resets the audio clock stream + position to 0. This method fails if it is called on a stream that is not stopped + + + + + Dispose + + + + + Audio Client Buffer Flags + + + + + None + + + + + AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY + + + + + AUDCLNT_BUFFERFLAGS_SILENT + + + + + AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR + + + + + The AudioClientProperties structure is used to set the parameters that describe the properties of the client's audio stream. + + http://msdn.microsoft.com/en-us/library/windows/desktop/hh968105(v=vs.85).aspx + + + + The size of the buffer for the audio stream. + + + + + Boolean value to indicate whether or not the audio stream is hardware-offloaded + + + + + An enumeration that is used to specify the category of the audio stream. + + + + + A bit-field describing the characteristics of the stream. Supported in Windows 8.1 and later. + + + + + AUDCLNT_SHAREMODE + + + + + AUDCLNT_SHAREMODE_SHARED, + + + + + AUDCLNT_SHAREMODE_EXCLUSIVE + + + + + AUDCLNT_STREAMFLAGS + + + + + None + + + + + AUDCLNT_STREAMFLAGS_CROSSPROCESS + + + + + AUDCLNT_STREAMFLAGS_LOOPBACK + + + + + AUDCLNT_STREAMFLAGS_EVENTCALLBACK + + + + + AUDCLNT_STREAMFLAGS_NOPERSIST + + + + + Defines values that describe the characteristics of an audio stream. + + + + + No stream options. + + + + + The audio stream is a 'raw' stream that bypasses all signal processing except for endpoint specific, always-on processing in the APO, driver, and hardware. + + + + + Audio Clock Client + + + + + Characteristics + + + + + Frequency + + + + + Get Position + + + + + Adjusted Position + + + + + Can Adjust Position + + + + + Dispose + + + + + Audio Endpoint Volume + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + On Volume Notification + + + + + Volume Range + + + + + Hardware Support + + + + + Step Information + + + + + Channels + + + + + Master Volume Level + + + + + Master Volume Level Scalar + + + + + Mute + + + + + Volume Step Up + + + + + Volume Step Down + + + + + Creates a new Audio endpoint volume + + IAudioEndpointVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Audio Endpoint Volume Channel + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + Volume Level + + + + + Volume Level Scalar + + + + + Audio Endpoint Volume Channels + + + + + Channel Count + + + + + Indexer - get a specific channel + + + + + Audio Endpoint Volume Notifiaction Delegate + + Audio Volume Notification Data + + + + Audio Endpoint Volume Step Information + + + + + Step + + + + + StepCount + + + + + Audio Endpoint Volume Volume Range + + + + + Minimum Decibels + + + + + Maximum Decibels + + + + + Increment Decibels + + + + + Audio Meter Information + + + + + Peak Values + + + + + Hardware Support + + + + + Master Peak Value + + + + + Audio Meter Information Channels + + + + + Metering Channel Count + + + + + Get Peak value + + Channel index + Peak value + + + + Audio Render Client + + + + + Gets a pointer to the buffer + + Number of frames requested + Pointer to the buffer + + + + Release buffer + + Number of frames written + Buffer flags + + + + Release the COM object + + + + + AudioSessionControl object for information + regarding an audio session + + + + + Constructor. + + + + + + Dispose + + + + + Finalizer + + + + + Audio meter information of the audio session. + + + + + Simple audio volume of the audio session (for volume and mute status). + + + + + The current state of the audio session. + + + + + The name of the audio session. + + + + + the path to the icon shown in the mixer. + + + + + The session identifier of the audio session. + + + + + The session instance identifier of the audio session. + + + + + The process identifier of the audio session. + + + + + Is the session a system sounds session. + + + + + the grouping param for an audio session grouping + + + + + + For chanigng the grouping param and supplying the context of said change + + + + + + + Registers an even client for callbacks + + + + + + Unregisters an event client from receiving callbacks + + + + + + AudioSessionEvents callback implementation + + + + + Constructor. + + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + AudioSessionManager + + Designed to manage audio sessions and in particuar the + SimpleAudioVolume interface to adjust a session volume + + + + + Session created delegate + + + + + Occurs when audio session has been added (for example run another program that use audio playback). + + + + + SimpleAudioVolume object + for adjusting the volume for the user session + + + + + AudioSessionControl object + for registring for callbacks and other session information + + + + + Refresh session of current device. + + + + + Returns list of sessions of current device. + + + + + Dispose. + + + + + Finalizer. + + + + + Specifies the category of an audio stream. + + + + + Other audio stream. + + + + + Media that will only stream when the app is in the foreground. + + + + + Media that can be streamed when the app is in the background. + + + + + Real-time communications, such as VOIP or chat. + + + + + Alert sounds. + + + + + Sound effects. + + + + + Game sound effects. + + + + + Background audio for games. + + + + + Manages the AudioStreamVolume for the . + + + + + Verify that the channel index is valid. + + + + + + + Return the current stream volumes for all channels + + An array of volume levels between 0.0 and 1.0 for each channel in the audio stream. + + + + Returns the current number of channels in this audio stream. + + + + + Return the current volume for the requested channel. + + The 0 based index into the channels. + The volume level for the channel between 0.0 and 1.0. + + + + Set the volume level for each channel of the audio stream. + + An array of volume levels (between 0.0 and 1.0) one for each channel. + + A volume level MUST be supplied for reach channel in the audio stream. + + + Thrown when does not contain elements. + + + + + Sets the volume level for one channel in the audio stream. + + The 0-based index into the channels to adjust the volume of. + The volume level between 0.0 and 1.0 for this channel of the audio stream. + + + + Dispose + + + + + Release/cleanup objects during Dispose/finalization. + + True if disposing and false if being finalized. + + + + Audio Volume Notification Data + + + + + Event Context + + + + + Muted + + + + + Guid that raised the event + + + + + Master Volume + + + + + Channels + + + + + Channel Volume + + + + + Audio Volume Notification Data + + + + + + + + + + Connector + + + + + Connects this connector to a connector in another device-topology object + + + + + Retreives the type of this connector + + + + + Retreives the data flow of this connector + + + + + Disconnects this connector from it's connected connector (if connected) + + + + + Indicates whether this connector is connected to another connector + + + + + Retreives the connector this connector is connected to (if connected) + + + + + Retreives the global ID of the connector this connector is connected to (if connected) + + + + + Retreives the device ID of the audio device this connector is connected to (if connected) + + + + + Connector Type + + + + + The connector is part of a connection of unknown type. + + + + + The connector is part of a physical connection to an auxiliary device that is installed inside the system chassis + + + + + The connector is part of a physical connection to an external device. + + + + + The connector is part of a software-configured I/O connection (typically a DMA channel) between system memory and an audio hardware device on an audio adapter. + + + + + The connector is part of a permanent connection that is fixed and cannot be configured under software control. + + + + + The connector is part of a connection to a network. + + + + + The EDataFlow enumeration defines constants that indicate the direction + in which audio data flows between an audio endpoint device and an application + + + + + Audio rendering stream. + Audio data flows from the application to the audio endpoint device, which renders the stream. + + + + + Audio capture stream. Audio data flows from the audio endpoint device that captures the stream, + to the application + + + + + Audio rendering or capture stream. Audio data can flow either from the application to the audio + endpoint device, or from the audio endpoint device to the application. + + + + + Device State + + + + + DEVICE_STATE_ACTIVE + + + + + DEVICE_STATE_DISABLED + + + + + DEVICE_STATE_NOTPRESENT + + + + + DEVICE_STATE_UNPLUGGED + + + + + DEVICE_STATEMASK_ALL + + + + + Windows CoreAudio DeviceTopology + + + + + Retrieves the number of connections associated with this device-topology object + + + + + Retrieves the connector at the supplied index + + + + + Retrieves the device id of the device represented by this device-topology object + + + + + Endpoint Hardware Support + + + + + Volume + + + + + Mute + + + + + Meter + + + + + Representation of binary large object container. + + + + + Length of binary object. + + + + + Pointer to buffer storing data. + + + + + is defined in WTypes.h + + + + + Audio Client WASAPI Error Codes (HResult) + + + + + AUDCLNT_E_NOT_INITIALIZED + + + + + AUDCLNT_E_UNSUPPORTED_FORMAT + + + + + AUDCLNT_E_DEVICE_IN_USE + + + + + AUDCLNT_E_RESOURCES_INVALIDATED + + + + + Windows CoreAudio IAudioClient interface + Defined in AudioClient.h + + + + + The GetBufferSize method retrieves the size (maximum capacity) of the endpoint buffer. + + + + + The GetService method accesses additional services from the audio client object. + + The interface ID for the requested service. + Pointer to a pointer variable into which the method writes the address of an instance of the requested interface. + + + + Defined in AudioClient.h + + + + + Defined in AudioClient.h + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier for the audio session. + + Receives the session identifier. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier of the audio session instance. + + Receives the identifier of a particular instance. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the process identifier of the audio session. + + Receives the process identifier of the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Indicates whether the session is a system sounds session. + + An HRESULT code indicating whether the operation succeeded of failed. + + + + Enables or disables the default stream attenuation experience (auto-ducking) provided by the system. + + A variable that enables or disables system auto-ducking. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Defines constants that indicate the current state of an audio session. + + + MSDN Reference: http://msdn.microsoft.com/en-us/library/dd370792.aspx + + + + + The audio session is inactive. + + + + + The audio session is active. + + + + + The audio session has expired. + + + + + Defines constants that indicate a reason for an audio session being disconnected. + + + MSDN Reference: Unknown + + + + + The user removed the audio endpoint device. + + + + + The Windows audio service has stopped. + + + + + The stream format changed for the device that the audio session is connected to. + + + + + The user logged off the WTS session that the audio session was running in. + + + + + The WTS session that the audio session was running in was disconnected. + + + + + The (shared-mode) audio session was disconnected to make the audio endpoint device available for an exclusive-mode connection. + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + interface to receive session related events + + + + + notification of volume changes including muting of audio session + + the current volume + the current mute state, true muted, false otherwise + + + + notification of display name changed + + the current display name + + + + notification of icon path changed + + the current icon path + + + + notification of the client that the volume level of an audio channel in the session submix has changed + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + + + + notification of the client that the grouping parameter for the session has changed + + >The new grouping parameter for the session. + + + + notification of the client that the stream-activity state of the session has changed + + The new session state. + + + + notification of the client that the session has been disconnected + + The reason that the audio session was disconnected. + + + + Windows CoreAudio IAudioSessionManager interface + Defined in AudioPolicy.h + + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionNotification interface + Defined in AudioPolicy.h + + + + + + + session being added + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IConnector interface + Defined in devicetopology.h + + + + + Windows CoreAudio IDeviceTopology interface + Defined in devicetopology.h + + + + + defined in MMDeviceAPI.h + + + + + IMMNotificationClient + + + + + Device State Changed + + + + + Device Added + + + + + Device Removed + + + + + Default Device Changed + + + + + Property Value Changed + + + + + + + Windows CoreAudio IPart interface + Defined in devicetopology.h + + + + + Windows CoreAudio IPartsList interface + Defined in devicetopology.h + + + + + is defined in propsys.h + + + + + Windows CoreAudio ISimpleAudioVolume interface + Defined in AudioClient.h + + + + + Sets the master volume level for the audio session. + + The new volume level expressed as a normalized value between 0.0 and 1.0. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the client volume level for the audio session. + + Receives the volume level expressed as a normalized value between 0.0 and 1.0. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Sets the muting state for the audio session. + + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the current muting state for the audio session. + + Receives the muting state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + implements IMMDeviceEnumerator + + + + + MMDevice STGM enumeration + + + + + Read-only access mode. + + + + + Write-only access mode. + + + + + Read-write access mode. + + + + + from Propidl.h. + http://msdn.microsoft.com/en-us/library/aa380072(VS.85).aspx + contains a union so we have to do an explicit layout + + + + + Value type tag. + + + + + Reserved1. + + + + + Reserved2. + + + + + Reserved3. + + + + + cVal. + + + + + bVal. + + + + + iVal. + + + + + uiVal. + + + + + lVal. + + + + + ulVal. + + + + + intVal. + + + + + uintVal. + + + + + hVal. + + + + + uhVal. + + + + + fltVal. + + + + + dblVal. + + + + + boolVal. + + + + + scode. + + + + + Date time. + + + + + Binary large object. + + + + + Pointer value. + + + + + Creates a new PropVariant containing a long value + + + + + Helper method to gets blob data + + + + + Interprets a blob as an array of structs + + + + + Gets the type of data in this PropVariant + + + + + Property value + + + + + allows freeing up memory, might turn this into a Dispose method? + + + + + Clears with a known pointer + + + + + MM Device + + + + + Initializes the device's property store. + + The storage-access mode to open store for. + Administrative client is required for Write and ReadWrite modes. + + + + Audio Client + Makes a new one each call to allow caller to manage when to dispose + n.b. should probably not be a property anymore + + + + + Audio Meter Information + + + + + Audio Endpoint Volume + + + + + AudioSessionManager instance + + + + + DeviceTopology instance + + + + + Properties + + + + + Friendly name for the endpoint + + + + + Friendly name of device + + + + + Icon path of device + + + + + Device Instance Id of Device + + + + + Device ID + + + + + Data Flow + + + + + Device State + + + + + To string + + + + + Dispose + + + + + Finalizer + + + + + Multimedia Device Collection + + + + + Device count + + + + + Get device by index + + Device index + Device at the specified index + + + + Get Enumerator + + Device enumerator + + + + MM Device Enumerator + + + + + Creates a new MM Device Enumerator + + + + + Enumerate Audio Endpoints + + Desired DataFlow + State Mask + Device Collection + + + + Get Default Endpoint + + Data Flow + Role + Device + + + + Check to see if a default audio end point exists without needing an exception. + + Data Flow + Role + True if one exists, and false if one does not exist. + + + + Get device by ID + + Device ID + Device + + + + Registers a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + Unregisters a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + + + + Called to dispose/finalize contained objects. + + True if disposing, false if called from a finalizer. + + + + PROPERTYKEY is defined in wtypes.h + + + + + Format ID + + + + + Property ID + + + + + + + + + + + Property Keys + + + + + PKEY_DeviceInterface_FriendlyName + + + + + PKEY_AudioEndpoint_FormFactor + + + + + PKEY_AudioEndpoint_ControlPanelPageProvider + + + + + PKEY_AudioEndpoint_Association + + + + + PKEY_AudioEndpoint_PhysicalSpeakers + + + + + PKEY_AudioEndpoint_GUID + + + + + PKEY_AudioEndpoint_Disable_SysFx + + + + + PKEY_AudioEndpoint_FullRangeSpeakers + + + + + PKEY_AudioEndpoint_Supports_EventDriven_Mode + + + + + PKEY_AudioEndpoint_JackSubType + + + + + PKEY_AudioEngine_DeviceFormat + + + + + PKEY_AudioEngine_OEMFormat + + + + + PKEY _Devie_FriendlyName + + + + + PKEY _Device_IconPath + + + + + Device description property. + + + + + Id of controller device for endpoint device property. + + + + + Device interface key property. + + + + + System-supplied device instance identification string, assigned by PnP manager, persistent across system restarts. + + + + + Property Store class, only supports reading properties at the moment. + + + + + Property Count + + + + + Gets property by index + + Property index + The property + + + + Contains property guid + + Looks for a specific key + True if found + + + + Indexer by guid + + Property Key + Property or null if not found + + + + Gets property key at sepecified index + + Index + Property key + + + + Gets property value at specified index + + Index + Property value + + + + Sets property value at specified key. + + Key of property to set. + Value to write. + + + + Saves a property change. + + + + + Creates a new property store + + IPropertyStore COM interface + + + + Property Store Property + + + + + Property Key + + + + + Property Value + + + + + The ERole enumeration defines constants that indicate the role + that the system has assigned to an audio endpoint device + + + + + Games, system notification sounds, and voice commands. + + + + + Music, movies, narration, and live music recording + + + + + Voice communications (talking to another person). + + + + + Collection of sessions. + + + + + Returns session at index. + + + + + + + Number of current sessions. + + + + + Windows CoreAudio SimpleAudioVolume + + + + + Creates a new Audio endpoint volume + + ISimpleAudioVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Allows the user to adjust the volume from + 0.0 to 1.0 + + + + + Mute + + + + + Represents state of a capture device + + + + + Not recording + + + + + Beginning to record + + + + + Recording in progress + + + + + Requesting stop + + + + + Audio Capture using Wasapi + See http://msdn.microsoft.com/en-us/library/dd370800%28VS.85%29.aspx + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Initializes a new instance of the class. + + The capture device. + true if sync is done with event. false use sleep. + + + + Initializes a new instance of the class. + + The capture device. + true if sync is done with event. false use sleep. + Length of the audio buffer in milliseconds. A lower value means lower latency but increased CPU usage. + + + + Share Mode - set before calling StartRecording + + + + + Current Capturing State + + + + + Capturing wave format + + + + + Gets the default audio capture device + + The default audio capture device + + + + To allow overrides to specify different flags (e.g. loopback) + + + + + Start Capturing + + + + + Stop Capturing (requests a stop, wait for RecordingStopped event to know it has finished) + + + + + Dispose + + + + + Contains the name and CLSID of a DirectX Media Object + + + + + Name + + + + + CLSID + + + + + Initializes a new instance of DmoDescriptor + + + + + DirectX Media Object Enumerator + + + + + Get audio effect names + + Audio effect names + + + + Get audio encoder names + + Audio encoder names + + + + Get audio decoder names + + Audio decoder names + + + + DMO Guids for use with DMOEnum + dmoreg.h + + + + + MediaErr.h + + + + + DMO Inplace Process Flags + + + + + DMO_INPLACE_NORMAL + + + + + DMO_INPLACE_ZERO + + + + + Return value when Process is executed with IMediaObjectInPlace + + + + + Success. There is no remaining data to process. + + + + + Success. There is still data to process. + + + + + DMO Input Data Buffer Flags + + + + + None + + + + + DMO_INPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_INPUT_DATA_BUFFERF_TIME + + + + + DMO_INPUT_DATA_BUFFERF_TIMELENGTH + + + + + http://msdn.microsoft.com/en-us/library/aa929922.aspx + DMO_MEDIA_TYPE + + + + + Major type + + + + + Major type name + + + + + Subtype + + + + + Subtype name + + + + + Fixed size samples + + + + + Sample size + + + + + Format type + + + + + Format type name + + + + + Gets the structure as a Wave format (if it is one) + + + + + Sets this object up to point to a wave format + + Wave format structure + + + + DMO Output Data Buffer + + + + + Creates a new DMO Output Data Buffer structure + + Maximum buffer size + + + + Dispose + + + + + Media Buffer + + + + + Length of data in buffer + + + + + Status Flags + + + + + Timestamp + + + + + Duration + + + + + Retrives the data in this buffer + + Buffer to receive data + Offset into buffer + + + + Is more data available + If true, ProcessOuput should be called again + + + + + DMO Output Data Buffer Flags + + + + + None + + + + + DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_OUTPUT_DATA_BUFFERF_TIME + + + + + DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH + + + + + DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE + + + + + DMO_PARTIAL_MEDIATYPE + + + + + DMO Process Output Flags + + + + + None + + + + + DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER + + + + + Chorus Phase + + + + + DSFXCHORUS_PHASE_NEG_180 + + + + + DSFXCHORUS_PHASE_NEG_90 + + + + + DSFXCHORUS_PHASE_ZERO + + + + + DSFXCHORUS_PHASE_90 + + + + + DSFXCHORUS_PHASE_180 + + + + + Chorus Wave Form + + + + + DSFXCHORUS_WAVE_TRIANGLE + + + + + DSFXCHORUS_WAVE_SIN + + + + + DMO Chorus Effect + + + + + DMO Chorus Params + + + + + DSFXCHORUS_WETDRYMIX_MIN + + + + + DSFXCHORUS_WETDRYMIX_MAX + + + + + DSFXCHORUS_WETDRYMIX_DEFAULT + + + + + DSFXCHORUS_DEPTH_MIN + + + + + DSFXCHORUS_DEPTH_MAX + + + + + DSFXCHORUS_DEPTH_DEFAULT + + + + + DSFXCHORUS_FEEDBACK_MIN + + + + + DSFXCHORUS_FEEDBACK_MAX + + + + + DSFXCHORUS_FEEDBACK_DEFAULT + + + + + DSFXCHORUS_FREQUENCY_MIN + + + + + DSFXCHORUS_FREQUENCY_MAX + + + + + DSFXCHORUS_FREQUENCY_DEFAULT + + + + + DSFXCHORUS_WAVE_DEFAULT + + + + + DSFXCHORUS_DELAY_MIN + + + + + DSFXCHORUS_DELAY_MAX + + + + + DSFXCHORUS_DELAY_DEFAULT + + + + + DSFXCHORUS_PHASE_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage by which the delay time is modulated by the low-frequency oscillator, + in hundredths of a percentage point. + + + + + Percentage of output signal to feed back into the effect's input. + + + + + Frequency of the LFO. + + + + + Waveform shape of the LFO. + + + + + Number of milliseconds the input is delayed before it is played back. + + + + + Phase differential between left and right LFOs. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Chorus + + + + + Dispose code + + + + + DMO Compressor Effect + + + + + DMO Compressor Params + + + + + DSFXCOMPRESSOR_GAIN_MIN + + + + + DSFXCOMPRESSOR_GAIN_MAX + + + + + DSFXCOMPRESSOR_GAIN_DEFAULT + + + + + DSFXCOMPRESSOR_ATTACK_MIN + + + + + DSFXCOMPRESSOR_ATTACK_MAX + + + + + DSFXCOMPRESSOR_ATTACK_DEFAULT + + + + + DSFXCOMPRESSOR_RELEASE_MIN + + + + + DSFXCOMPRESSOR_RELEASE_MAX + + + + + DSFXCOMPRESSOR_RELEASE_DEFAULT + + + + + DSFXCOMPRESSOR_THRESHOLD_MIN + + + + + DSFXCOMPRESSOR_THRESHOLD_MAX + + + + + DSFXCOMPRESSOR_THRESHOLD_DEFAULT + + + + + DSFXCOMPRESSOR_RATIO_MIN + + + + + DSFXCOMPRESSOR_RATIO_MAX + + + + + DSFXCOMPRESSOR_RATIO_DEFAULT + + + + + DSFXCOMPRESSOR_PREDELAY_MIN + + + + + DSFXCOMPRESSOR_PREDELAY_MAX + + + + + DSFXCOMPRESSOR_PREDELAY_DEFAULT + + + + + Output gain of signal after compression. + + + + + Time before compression reaches its full value. + + + + + Speed at which compression is stopped after input drops below Threshold. + + + + + Point at which compression begins, in decibels. + + + + + Compression ratio + + + + + Time after Threshold is reached before attack phase is started, in milliseconds. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Compressor + + + + + Dispose code + + + + + DMO Distortion Effect + + + + + DMO Distortion Params + + + + + DSFXDISTORTION_GAIN_MIN + + + + + DSFXDISTORTION_GAIN_MAX + + + + + DSFXDISTORTION_GAIN_DEFAULT + + + + + DSFXDISTORTION_EDGE_MIN + + + + + DSFXDISTORTION_EDGE_MAX + + + + + DSFXDISTORTION_EDGE_DEFAULT + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_DEFAULT + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_MIN + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_MAX + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_DEFAULT + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_MIN + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_MAX + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_DEFAULT + + + + + Amount of signal change after distortion. + + + + + Percentage of distortion intensity. + + + + + Center frequency of harmonic content addition. + + + + + Width of frequency band that determines range of harmonic content addition. + + + + + Filter cutoff for high-frequency harmonics attenuation. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Distortion + + + + + Dispose code + + + + + Dmo Echo Effect + + + + + DMO Echo Params + + + + + DSFXECHO_WETDRYMIX_MIN + + + + + DSFXECHO_WETDRYMIX_MAX + + + + + DSFXECHO_WETDRYMIX_DEFAULT + + + + + DSFXECHO_FEEDBACK_MIN + + + + + DSFXECHO_FEEDBACK_MAX + + + + + DSFXECHO_FEEDBACK_DEFAULT + + + + + DSFXECHO_LEFTDELAY_MIN + + + + + DSFXECHO_LEFTDELAY_MAX + + + + + DSFXECHO_LEFTDELAY_DEFAULT + + + + + DSFXECHO_RIGHTDELAY_MIN + + + + + DSFXECHO_RIGHTDELAY_MAX + + + + + DSFXECHO_RIGHTDELAY_DEFAULT + + + + + DSFXECHO_PANDELAY_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage of output fed back into input. + + + + + Delay for left channel, in milliseconds. + + + + + Delay for right channel, in milliseconds. + + + + + Value that specifies whether to swap left and right delays with each successive echo. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Echo + + + + + Dispose code + + + + + DMO Flanger Effect + + + + + DMO Flanger Params + + + + + DSFXFLANGER_WETDRYMIX_MIN + + + + + DSFXFLANGER_WETDRYMIX_MAX + + + + + DSFXFLANGER_WETDRYMIX_DEFAULT + + + + + DSFXFLANGER_DEPTH_MIN + + + + + DSFXFLANGER_DEPTH_MAX + + + + + DSFXFLANGER_DEPTH_DEFAULT + + + + + DSFXFLANGER_FEEDBACK_MIN + + + + + DSFXFLANGER_FEEDBACK_MAX + + + + + DSFXFLANGER_FEEDBACK_DEFAULT + + + + + DSFXFLANGER_FREQUENCY_MIN + + + + + DSFXFLANGER_FREQUENCY_MAX + + + + + DSFXFLANGER_FREQUENCY_DEFAULT + + + + + DSFXFLANGER_WAVE_DEFAULT + + + + + DSFXFLANGER_DELAY_MIN + + + + + DSFXFLANGER_DELAY_MAX + + + + + DSFXFLANGER_DELAY_DEFAULT + + + + + DSFXFLANGER_PHASE_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage by which the delay time is modulated by the low-frequency oscillator, + in hundredths of a percentage point. + + + + + Percentage of output signal to feed back into the effect's input. + + + + + Frequency of the LFO. + + + + + Waveform shape of the LFO. + + + + + Number of milliseconds the input is delayed before it is played back. + + + + + Phase differential between left and right LFOs. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Flanger + + + + + Dispose code + + + + + DMO Gargle Effect + + + + + DMO Gargle Params + + + + + DSFXGARGLE_RATEHZ_MIN + + + + + DSFXGARGLE_RATEHZ_MAX + + + + + DSFXGARGLE_RATEHZ_DEFAULT + + + + + DSFXGARGLE_WAVE_DEFAULT + + + + + Rate of modulation in hz + + + + + Gargle Wave Shape + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Gargle + + + + + Dispose code + + + + + DMO I3DL2Reverb Effect + + + + + DMO I3DL2Reverb Params + + + + + DSFX_I3DL2REVERB_ROOM_MIN + + + + + DSFX_I3DL2REVERB_ROOM_MAX + + + + + DSFX_I3DL2REVERB_ROOM_DEFAULT + + + + + DSFX_I3DL2REVERB_ROOMHF_MIN + + + + + DSFX_I3DL2REVERB_ROOMHF_MAX + + + + + DSFX_I3DL2REVERB_ROOMHF_DEFAULT + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT + + + + + DSFX_I3DL2REVERB_DECAYTIME_MIN + + + + + DSFX_I3DL2REVERB_DECAYTIME_MAX + + + + + DSFX_I3DL2REVERB_DECAYTIME_DEFAULT + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_MIN + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_MAX + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT + + + + + DSFX_I3DL2REVERB_REFLECTIONS_MIN + + + + + DSFX_I3DL2REVERB_REFLECTIONS_MAX + + + + + DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT + + + + + DSFX_I3DL2REVERB_REVERB_MIN + + + + + DSFX_I3DL2REVERB_REVERB_MAX + + + + + DSFX_I3DL2REVERB_REVERB_DEFAULT + + + + + DSFX_I3DL2REVERB_REVERBDELAY_MIN + + + + + DSFX_I3DL2REVERB_REVERBDELAY_MAX + + + + + DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT + + + + + DSFX_I3DL2REVERB_DIFFUSION_MIN + + + + + DSFX_I3DL2REVERB_DIFFUSION_MAX + + + + + DSFX_I3DL2REVERB_DIFFUSION_DEFAULT + + + + + DSFX_I3DL2REVERB_DENSITY_MIN + + + + + DSFX_I3DL2REVERB_DENSITY_MAX + + + + + DSFX_I3DL2REVERB_DENSITY_DEFAULT + + + + + DSFX_I3DL2REVERB_HFREFERENCE_MIN + + + + + DSFX_I3DL2REVERB_HFREFERENCE_MAX + + + + + DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT + + + + + DSFX_I3DL2REVERB_QUALITY_MIN + + + + + DSFX_I3DL2REVERB_QUALITY_MAX + + + + + DSFX_I3DL2REVERB_QUALITY_DEFAULT + + + + + Attenuation of the room effect, in millibels (mB) + + + + + Attenuation of the room high-frequency effect, in mB. + + + + + Rolloff factor for the reflected signals. + + + + + Decay time, in seconds. + + + + + Ratio of the decay time at high frequencies to the decay time at low frequencies. + + + + + Attenuation of early reflections relative to lRoom, in mB. + + + + + Delay time of the first reflection relative to the direct path, in seconds. + + + + + Attenuation of late reverberation relative to lRoom, in mB. + + + + + Time limit between the early reflections and the late reverberation relative to the time of the first reflection. + + + + + Echo density in the late reverberation decay, in percent. + + + + + Modal density in the late reverberation decay, in percent. + + + + + Reference high frequency, in hertz. + + + + + the quality of the environmental reverberation effect. Higher values produce better quality at the expense of processing time. + + + + + Sets standard reverberation parameters of a buffer. + + I3DL2EnvironmentPreset + + + + retrieves an identifier for standard reverberation parameters of a buffer. + + I3DL2EnvironmentPreset + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO I3DL2Reverb + + + + + Dispose code + + + + + DMO Parametric Equalizer Effect + + + + + DMO ParamEq Params + + + + + DSFXPARAMEQ_CENTER_MIN + + + + + DSFXPARAMEQ_CENTER_MAX + + + + + DSFXPARAMEQ_CENTER_DEFAULT + + + + + DSFXPARAMEQ_BANDWIDTH_MIN + + + + + DSFXPARAMEQ_BANDWIDTH_MAX + + + + + DSFXPARAMEQ_BANDWIDTH_DEFAULT + + + + + DSFXPARAMEQ_GAIN_MIN + + + + + DSFXPARAMEQ_GAIN_MAX + + + + + DSFXPARAMEQ_GAIN_DEFAULT + + + + + Center frequency, in hertz + + + + + Bandwidth, in semitones. + + + + + Gain + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO ParamEq + + + + + Dispose code + + + + + DMO Reverb Effect + + + + + DMO Reverb Params + + + + + DSFX_WAVESREVERB_INGAIN_MIN + + + + + DSFX_WAVESREVERB_INGAIN_MAX + + + + + DSFX_WAVESREVERB_INGAIN_DEFAULT + + + + + DSFX_WAVESREVERB_REVERBMIX_MIN + + + + + DSFX_WAVESREVERB_REVERBMIX_MAX + + + + + DSFX_WAVESREVERB_REVERBMIX_DEFAULT + + + + + DSFX_WAVESREVERB_REVERBTIME_MIN + + + + + DSFX_WAVESREVERB_REVERBTIME_MAX + + + + + DSFX_WAVESREVERB_REVERBTIME_DEFAULT + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT + + + + + Input gain of signal, in decibels (dB). + + + + + Reverb mix, in dB. + + + + + Reverb time, in milliseconds. + + + + + High-frequency reverb time ratio. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO WavesReverb + + + + + Dispose code + + + + + DSFXECHO_PANDELAY + + + + + DSFXECHO_PANDELAY_MIN + + + + + DSFXECHO_PANDELAY_MAX + + + + + Flanger Phase + + + + + DSFXFLANGER_PHASE_NEG_180 + + + + + DSFXFLANGER_PHASE_NEG_90 + + + + + DSFXFLANGER_PHASE_ZERO + + + + + DSFXFLANGER_PHASE_90 + + + + + DSFXFLANGER_PHASE_180 + + + + + Flanger Wave Form + + + + + DSFXFLANGER_WAVE_TRIANGLE + + + + + DSFXFLANGER_WAVE_SIN + + + + + Gargle Wave Shape + + + + + DSFXGARGLE_WAVE_TRIANGLE + + + + + DSFXGARGLE_WAVE_SQUARE + + + + + I3DL2 Reverberation Presets + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CITY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE + + + + + Interface of DMO Effectors + + Parameters of the effect to be used + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + IMediaBuffer Interface + + + + + Set Length + + Length + HRESULT + + + + Get Max Length + + Max Length + HRESULT + + + + Get Buffer and Length + + Pointer to variable into which to write the Buffer Pointer + Pointer to variable into which to write the Valid Data Length + HRESULT + + + + defined in mediaobj.h + + + + + defined in mediaobj.h + + + + + defined in Medparam.h + + + + + Windows Media Resampler Props + wmcodecdsp.h + + + + + Range is 1 to 60 + + + + + Specifies the channel matrix. + + + + + Attempting to implement the COM IMediaBuffer interface as a .NET object + Not sure what will happen when I pass this to an unmanaged object + + + + + Creates a new Media Buffer + + Maximum length in bytes + + + + Dispose and free memory for buffer + + + + + Finalizer + + + + + Set length of valid data in the buffer + + length + HRESULT + + + + Gets the maximum length of the buffer + + Max length (output parameter) + HRESULT + + + + Gets buffer and / or length + + Pointer to variable into which buffer pointer should be written + Pointer to variable into which valid data length should be written + HRESULT + + + + Length of data in the media buffer + + + + + Loads data into this buffer + + Data to load + Number of bytes to load + + + + Retrieves the data in the output buffer + + buffer to retrieve into + offset within that buffer + + + + Media Object + + + + + Creates a new Media Object + + Media Object COM interface + + + + Number of input streams + + + + + Number of output streams + + + + + Gets the input media type for the specified input stream + + Input stream index + Input type index + DMO Media Type or null if there are no more input types + + + + Gets the DMO Media Output type + + The output stream + Output type index + DMO Media Type or null if no more available + + + + retrieves the media type that was set for an output stream, if any + + Output stream index + DMO Media Type or null if no more available + + + + Enumerates the supported input types + + Input stream index + Enumeration of input types + + + + Enumerates the output types + + Output stream index + Enumeration of supported output types + + + + Querys whether a specified input type is supported + + Input stream index + Media type to check + true if supports + + + + Sets the input type helper method + + Input stream index + Media type + Flags (can be used to test rather than set) + + + + Sets the input type + + Input stream index + Media Type + + + + Sets the input type to the specified Wave format + + Input stream index + Wave format + + + + Requests whether the specified Wave format is supported as an input + + Input stream index + Wave format + true if supported + + + + Helper function to make a DMO Media Type to represent a particular WaveFormat + + + + + Checks if a specified output type is supported + n.b. you may need to set the input type first + + Output stream index + Media type + True if supported + + + + Tests if the specified Wave Format is supported for output + n.b. may need to set the input type first + + Output stream index + Wave format + True if supported + + + + Helper method to call SetOutputType + + + + + Sets the output type + n.b. may need to set the input type first + + Output stream index + Media type to set + + + + Set output type to the specified wave format + n.b. may need to set input type first + + Output stream index + Wave format + + + + Get Input Size Info + + Input Stream Index + Input Size Info + + + + Get Output Size Info + + Output Stream Index + Output Size Info + + + + Process Input + + Input Stream index + Media Buffer + Flags + Timestamp + Duration + + + + Process Output + + Flags + Output buffer count + Output buffers + + + + Gives the DMO a chance to allocate any resources needed for streaming + + + + + Tells the DMO to free any resources needed for streaming + + + + + Gets maximum input latency + + input stream index + Maximum input latency as a ref-time + + + + Flushes all buffered data + + + + + Report a discontinuity on the specified input stream + + Input Stream index + + + + Is this input stream accepting data? + + Input Stream index + true if accepting data + + + + Experimental code, not currently being called + Not sure if it is necessary anyway + + + + + Media Object InPlace + + + + + Creates a new Media Object InPlace + + Media Object InPlace COM Interface + + + + Processes a block of data. + The application supplies a pointer to a block of input data. The DMO processes the data in place. + + Size of the data, in bytes. + offset into buffer + In/Out Data Buffer + Start time of the data. + DmoInplaceProcessFlags + Return value when Process is executed with IMediaObjectInPlace + + + + Creates a copy of the DMO in its current state. + + Copyed MediaObjectInPlace + + + + Retrieves the latency introduced by this DMO. + + The latency, in 100-nanosecond units + + + + Get Media Object + + Media Object + + + + Dispose code + + + + + Media Object Size Info + + + + + Minimum Buffer Size, in bytes + + + + + Max Lookahead + + + + + Alignment + + + + + Media Object Size Info + + + + + ToString + + + + + MP_PARAMINFO + + + + + MP_TYPE + + + + + MPT_INT + + + + + MPT_FLOAT + + + + + MPT_BOOL + + + + + MPT_ENUM + + + + + MPT_MAX + + + + + MP_CURVE_TYPE + + + + + uuids.h, ksuuids.h + + + + + From wmcodecsdp.h + Implements: + - IMediaObject + - IMFTransform (Media foundation - we will leave this for now as there is loads of MF stuff) + - IPropertyStore + - IWMResamplerProps + Can resample PCM or IEEE + + + + + DMO Resampler + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + implements IMediaObject (DirectX Media Object) + implements IMFTransform (Media Foundation Transform) + On Windows XP, it is always an MM (if present at all) + + + + + Windows Media MP3 Decoder (as a DMO) + WORK IN PROGRESS - DO NOT USE! + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + BiQuad filter + + + + + Passes a single sample through the filter + + Input sample + Output sample + + + + Set this up as a low pass filter + + Sample Rate + Cut-off Frequency + Bandwidth + + + + Set this up as a peaking EQ + + Sample Rate + Centre Frequency + Bandwidth (Q) + Gain in decibels + + + + Set this as a high pass filter + + + + + Create a low pass filter + + + + + Create a High pass filter + + + + + Create a bandpass filter with constant skirt gain + + + + + Create a bandpass filter with constant peak gain + + + + + Creates a notch filter + + + + + Creaes an all pass filter + + + + + Create a Peaking EQ + + + + + H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) + + + + a "shelf slope" parameter (for shelving EQ only). + When S = 1, the shelf slope is as steep as it can be and remain monotonically + increasing or decreasing gain with frequency. The shelf slope, in dB/octave, + remains proportional to S for all other values for a fixed f0/Fs and dBgain. + Gain in decibels + + + + H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) + + + + + + + + + + Type to represent complex number + + + + + Real Part + + + + + Imaginary Part + + + + + Envelope generator (ADSR) + + + + + Envelope State + + + + + Idle + + + + + Attack + + + + + Decay + + + + + Sustain + + + + + Release + + + + + Creates and Initializes an Envelope Generator + + + + + Attack Rate (seconds * SamplesPerSecond) + + + + + Decay Rate (seconds * SamplesPerSecond) + + + + + Release Rate (seconds * SamplesPerSecond) + + + + + Sustain Level (1 = 100%) + + + + + Sets the attack curve + + + + + Sets the decay release curve + + + + + Read the next volume multiplier from the envelope generator + + A volume multiplier + + + + Trigger the gate + + If true, enter attack phase, if false enter release phase (unless already idle) + + + + Current envelope state + + + + + Reset to idle state + + + + + Get the current output level + + + + + Summary description for FastFourierTransform. + + + + + This computes an in-place complex-to-complex FFT + x and y are the real and imaginary arrays of 2^m points. + + + + + Applies a Hamming Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hamming window + + + + Applies a Hann Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hann window + + + + Applies a Blackman-Harris Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Blackmann-Harris window + + + + Summary description for ImpulseResponseConvolution. + + + + + A very simple mono convolution algorithm + + + This will be very slow + + + + + This is actually a downwards normalize for data that will clip + + + + + SMB Pitch Shifter + + + + + Pitch Shift + + + + + Pitch Shift + + + + + Short Time Fourier Transform + + + + + Fully managed resampler, based on Cockos WDL Resampler + + + + + Creates a new Resampler + + + + + sets the mode + if sinc set, it overrides interp or filtercnt + + + + + Sets the filter parameters + used for filtercnt>0 but not sinc + + + + + Set feed mode + + if true, that means the first parameter to ResamplePrepare will specify however much input you have, not how much you want + + + + Reset + + + + + Prepare + note that it is safe to call ResamplePrepare without calling ResampleOut (the next call of ResamplePrepare will function as normal) + nb inbuffer was WDL_ResampleSample **, returning a place to put the in buffer, so we return a buffer and offset + + req_samples is output samples desired if !wantInputDriven, or if wantInputDriven is input samples that we have + + + + returns number of samples desired (put these into *inbuffer) + + + + Channel Mode + + + + + Stereo + + + + + Joint Stereo + + + + + Dual Channel + + + + + Mono + + + + + An ID3v2 Tag + + + + + Reads an ID3v2 tag from a stream + + + + + Creates a new ID3v2 tag from a collection of key-value pairs. + + A collection of key-value pairs containing the tags to include in the ID3v2 tag. + A new ID3v2 tag + + + + Convert the frame size to a byte array. + + The frame body size. + + + + + Creates an ID3v2 frame for the given key-value pair. + + + + + + + + Gets the Id3v2 Header size. The size is encoded so that only 7 bits per byte are actually used. + + + + + + + Creates the Id3v2 tag header and returns is as a byte array. + + The Id3v2 frames that will be included in the file. This is used to calculate the ID3v2 tag size. + + + + + Creates the Id3v2 tag for the given key-value pairs and returns it in the a stream. + + + + + + + Raw data from this tag + + + + + Interface for MP3 frame by frame decoder + + + + + Decompress a single MP3 frame + + Frame to decompress + Output buffer + Offset within output buffer + Bytes written to output buffer + + + + Tell the decoder that we have repositioned + + + + + PCM format that we are converting into + + + + + Represents an MP3 Frame + + + + + Reads an MP3 frame from a stream + + input stream + A valid MP3 frame, or null if none found + + + Reads an MP3Frame from a stream + http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm has some good info + also see http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx + + A valid MP3 frame, or null if none found + + + + Constructs an MP3 frame + + + + + checks if the four bytes represent a valid header, + if they are, will parse the values into Mp3Frame + + + + + Sample rate of this frame + + + + + Frame length in bytes + + + + + Bit Rate + + + + + Raw frame data (includes header bytes) + + + + + MPEG Version + + + + + MPEG Layer + + + + + Channel Mode + + + + + The number of samples in this frame + + + + + The channel extension bits + + + + + The bitrate index (directly from the header) + + + + + Whether the Copyright bit is set + + + + + Whether a CRC is present + + + + + Not part of the MP3 frame itself - indicates where in the stream we found this header + + + + + MP3 Frame Decompressor using ACM + + + + + Creates a new ACM frame decompressor + + The MP3 source format + + + + Output format (PCM) + + + + + Decompresses a frame + + The MP3 frame + destination buffer + Offset within destination buffer + Bytes written into destination buffer + + + + Resets the MP3 Frame Decompressor after a reposition operation + + + + + Disposes of this MP3 frame decompressor + + + + + Finalizer ensuring that resources get released properly + + + + + MPEG Layer flags + + + + + Reserved + + + + + Layer 3 + + + + + Layer 2 + + + + + Layer 1 + + + + + MPEG Version Flags + + + + + Version 2.5 + + + + + Reserved + + + + + Version 2 + + + + + Version 1 + + + + + Represents a Xing VBR header + + + + + Load Xing Header + + Frame + Xing Header + + + + Sees if a frame contains a Xing header + + + + + Number of frames + + + + + Number of bytes + + + + + VBR Scale property + + + + + The MP3 frame + + + + + ASIO 64 bit value + Unfortunately the ASIO API was implemented it before compiler supported consistently 64 bit + integer types. By using the structure the data layout on a little-endian system like the + Intel x86 architecture will result in a "non native" storage of the 64 bit data. The most + significant 32 bit are stored first in memory, the least significant bits are stored in the + higher memory space. However each 32 bit is stored in the native little-endian fashion + + + + + most significant bits (Bits 32..63) + + + + + least significant bits (Bits 0..31) + + + + + ASIO Callbacks + + + + + ASIO Buffer Switch Callback + + + + + ASIO Sample Rate Did Change Callback + + + + + ASIO Message Callback + + + + + ASIO Buffer Switch Time Info Callback + + + + + Buffer switch callback + void (*bufferSwitch) (long doubleBufferIndex, AsioBool directProcess); + + + + + Sample Rate Changed callback + void (*sampleRateDidChange) (AsioSampleRate sRate); + + + + + ASIO Message callback + long (*asioMessage) (long selector, long value, void* message, double* opt); + + + + + ASIO Buffer Switch Time Info Callback + AsioTime* (*bufferSwitchTimeInfo) (AsioTime* params, long doubleBufferIndex, AsioBool directProcess); + + + + + ASIO Channel Info + + + + + on input, channel index + + + + + Is Input + + + + + Is Active + + + + + Channel Info + + + + + ASIO Sample Type + + + + + Name + + + + + Main AsioDriver Class. To use this class, you need to query first the GetAsioDriverNames() and + then use the GetAsioDriverByName to instantiate the correct AsioDriver. + This is the first AsioDriver binding fully implemented in C#! + + Contributor: Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Gets the ASIO driver names installed. + + a list of driver names. Use this name to GetAsioDriverByName + + + + Instantiate a AsioDriver given its name. + + The name of the driver + an AsioDriver instance + + + + Instantiate the ASIO driver by GUID. + + The GUID. + an AsioDriver instance + + + + Inits the AsioDriver.. + + The sys handle. + + + + + Gets the name of the driver. + + + + + + Gets the driver version. + + + + + + Gets the error message. + + + + + + Starts this instance. + + + + + Stops this instance. + + + + + Gets the number of channels. + + The num input channels. + The num output channels. + + + + Gets the latencies (n.b. does not throw an exception) + + The input latency. + The output latency. + + + + Gets the size of the buffer. + + Size of the min. + Size of the max. + Size of the preferred. + The granularity. + + + + Determines whether this instance can use the specified sample rate. + + The sample rate. + + true if this instance [can sample rate] the specified sample rate; otherwise, false. + + + + + Gets the sample rate. + + + + + + Sets the sample rate. + + The sample rate. + + + + Gets the clock sources. + + The clocks. + The num sources. + + + + Sets the clock source. + + The reference. + + + + Gets the sample position. + + The sample pos. + The time stamp. + + + + Gets the channel info. + + The channel number. + if set to true [true for input info]. + Channel Info + + + + Creates the buffers. + + The buffer infos. + The num channels. + Size of the buffer. + The callbacks. + + + + Disposes the buffers. + + + + + Controls the panel. + + + + + Futures the specified selector. + + The selector. + The opt. + + + + Notifies OutputReady to the AsioDriver. + + + + + + Releases this instance. + + + + + Handles the exception. Throws an exception based on the error. + + The error to check. + Method name + + + + Inits the vTable method from GUID. This is a tricky part of this class. + + The ASIO GUID. + + + + Internal VTable structure to store all the delegates to the C++ COM method. + + + + + ASIODriverCapability holds all the information from the AsioDriver. + Use ASIODriverExt to get the Capabilities + + + + + Drive Name + + + + + Number of Input Channels + + + + + Number of Output Channels + + + + + Input Latency + + + + + Output Latency + + + + + Buffer Minimum Size + + + + + Buffer Maximum Size + + + + + Buffer Preferred Size + + + + + Buffer Granularity + + + + + Sample Rate + + + + + Input Channel Info + + + + + Output Channel Info + + + + + Callback used by the AsioDriverExt to get wave data + + + + + AsioDriverExt is a simplified version of the AsioDriver. It provides an easier + way to access the capabilities of the Driver and implement the callbacks necessary + for feeding the driver. + Implementation inspired from Rob Philpot's with a managed C++ ASIO wrapper BlueWave.Interop.Asio + http://www.codeproject.com/KB/mcpp/Asio.Net.aspx + + Contributor: Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Initializes a new instance of the class based on an already + instantiated AsioDriver instance. + + A AsioDriver already instantiated. + + + + Allows adjustment of which is the first output channel we write to + + Output Channel offset + Input Channel offset + + + + Gets the driver used. + + The ASIOdriver. + + + + Starts playing the buffers. + + + + + Stops playing the buffers. + + + + + Shows the control panel. + + + + + Releases this instance. + + + + + Determines whether the specified sample rate is supported. + + The sample rate. + + true if [is sample rate supported]; otherwise, false. + + + + + Sets the sample rate. + + The sample rate. + + + + Gets or sets the fill buffer callback. + + The fill buffer callback. + + + + Gets the capabilities of the AsioDriver. + + The capabilities. + + + + Creates the buffers for playing. + + The number of outputs channels. + The number of input channel. + if set to true [use max buffer size] else use Prefered size + + + + Builds the capabilities internally. + + + + + Callback called by the AsioDriver on fill buffer demand. Redirect call to external callback. + + Index of the double buffer. + if set to true [direct process]. + + + + Callback called by the AsioDriver on event "Samples rate changed". + + The sample rate. + + + + Asio message call back. + + The selector. + The value. + The message. + The opt. + + + + + Buffers switch time info call back. + + The asio time param. + Index of the double buffer. + if set to true [direct process]. + + + + + ASIO Error Codes + + + + + This value will be returned whenever the call succeeded + + + + + unique success return value for ASIOFuture calls + + + + + hardware input or output is not present or available + + + + + hardware is malfunctioning (can be returned by any ASIO function) + + + + + input parameter invalid + + + + + hardware is in a bad mode or used in a bad mode + + + + + hardware is not running when sample position is inquired + + + + + sample clock or rate cannot be determined or is not present + + + + + not enough memory for completing the request + + + + + ASIO Message Selector + + + + + selector in <value>, returns 1L if supported, + + + + + returns engine (host) asio implementation version, + + + + + request driver reset. if accepted, this + + + + + not yet supported, will currently always return 0L. + + + + + the driver went out of sync, such that + + + + + the drivers latencies have changed. The engine + + + + + if host returns true here, it will expect the + + + + + supports timecode + + + + + unused - value: number of commands, message points to mmc commands + + + + + kAsioSupportsXXX return 1 if host supports this + + + + + unused and undefined + + + + + unused and undefined + + + + + unused and undefined + + + + + unused and undefined + + + + + driver detected an overload + + + + + This class stores convertors for different interleaved WaveFormat to ASIOSampleType separate channel + format. + + + + + Selects the sample convertor based on the input WaveFormat and the output ASIOSampleTtype. + + The wave format. + The type. + + + + + Optimized convertor for 2 channels SHORT + + + + + Generic convertor for SHORT + + + + + Optimized convertor for 2 channels FLOAT + + + + + Generic convertor Float to INT + + + + + Optimized convertor for 2 channels INT to INT + + + + + Generic convertor INT to INT + + + + + Optimized convertor for 2 channels INT to SHORT + + + + + Generic convertor INT to SHORT + + + + + Generic convertor INT to FLOAT + + + + + Optimized convertor for 2 channels SHORT + + + + + Generic convertor for SHORT + + + + + Optimized convertor for 2 channels FLOAT + + + + + Generic convertor SHORT + + + + + Generic converter 24 LSB + + + + + Generic convertor for float + + + + + ASIO Sample Type + + + + + Int 16 MSB + + + + + Int 24 MSB (used for 20 bits as well) + + + + + Int 32 MSB + + + + + IEEE 754 32 bit float + + + + + IEEE 754 64 bit double float + + + + + 32 bit data with 16 bit alignment + + + + + 32 bit data with 18 bit alignment + + + + + 32 bit data with 20 bit alignment + + + + + 32 bit data with 24 bit alignment + + + + + Int 16 LSB + + + + + Int 24 LSB + used for 20 bits as well + + + + + Int 32 LSB + + + + + IEEE 754 32 bit float, as found on Intel x86 architecture + + + + + IEEE 754 64 bit double float, as found on Intel x86 architecture + + + + + 32 bit data with 16 bit alignment + + + + + 32 bit data with 18 bit alignment + + + + + 32 bit data with 20 bit alignment + + + + + 32 bit data with 24 bit alignment + + + + + DSD 1 bit data, 8 samples per byte. First sample in Least significant bit. + + + + + DSD 1 bit data, 8 samples per byte. First sample in Most significant bit. + + + + + DSD 8 bit data, 1 sample per byte. No Endianness required. + + + + + ASIO common Exception. + + + + + Gets the name of the error. + + The error. + the name of the error + + + + Represents an installed ACM Driver + + + + + Helper function to determine whether a particular codec is installed + + The short name of the function + Whether the codec is installed + + + + Attempts to add a new ACM driver from a file + + Full path of the .acm or dll file containing the driver + Handle to the driver + + + + Removes a driver previously added using AddLocalDriver + + Local driver to remove + + + + Show Format Choose Dialog + + Owner window handle, can be null + Window title + Enumeration flags. None to get everything + Enumeration format. Only needed with certain enumeration flags + The selected format + Textual description of the selected format + Textual description of the selected format tag + True if a format was selected + + + + Gets the maximum size needed to store a WaveFormat for ACM interop functions + + + + + Finds a Driver by its short name + + Short Name + The driver, or null if not found + + + + Gets a list of the ACM Drivers installed + + + + + The callback for acmDriverEnum + + + + + Creates a new ACM Driver object + + Driver handle + + + + The short name of this driver + + + + + The full name of this driver + + + + + The driver ID + + + + + ToString + + + + + The list of FormatTags for this ACM Driver + + + + + Gets all the supported formats for a given format tag + + Format tag + Supported formats + + + + Opens this driver + + + + + Closes this driver + + + + + Dispose + + + + + Flags for use with acmDriverAdd + + + + + ACM_DRIVERADDF_LOCAL + + + + + ACM_DRIVERADDF_GLOBAL + + + + + ACM_DRIVERADDF_FUNCTION + + + + + ACM_DRIVERADDF_NOTIFYHWND + + + + + Interop structure for ACM driver details (ACMDRIVERDETAILS) + http://msdn.microsoft.com/en-us/library/dd742889%28VS.85%29.aspx + + + + + DWORD cbStruct + + + + + FOURCC fccType + + + + + FOURCC fccComp + + + + + WORD wMid; + + + + + WORD wPid + + + + + DWORD vdwACM + + + + + DWORD vdwDriver + + + + + DWORD fdwSupport; + + + + + DWORD cFormatTags + + + + + DWORD cFilterTags + + + + + HICON hicon + + + + + TCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]; + + + + + TCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]; + + + + + TCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]; + + + + + TCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]; + + + + + TCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]; + + + + + ACMDRIVERDETAILS_SHORTNAME_CHARS + + + + + ACMDRIVERDETAILS_LONGNAME_CHARS + + + + + ACMDRIVERDETAILS_COPYRIGHT_CHARS + + + + + ACMDRIVERDETAILS_LICENSING_CHARS + + + + + ACMDRIVERDETAILS_FEATURES_CHARS + + + + + Flags indicating what support a particular ACM driver has + + + + ACMDRIVERDETAILS_SUPPORTF_CODEC - Codec + + + ACMDRIVERDETAILS_SUPPORTF_CONVERTER - Converter + + + ACMDRIVERDETAILS_SUPPORTF_FILTER - Filter + + + ACMDRIVERDETAILS_SUPPORTF_HARDWARE - Hardware + + + ACMDRIVERDETAILS_SUPPORTF_ASYNC - Async + + + ACMDRIVERDETAILS_SUPPORTF_LOCAL - Local + + + ACMDRIVERDETAILS_SUPPORTF_DISABLED - Disabled + + + + ACM_DRIVERENUMF_NOLOCAL, Only global drivers should be included in the enumeration + + + + + ACM_DRIVERENUMF_DISABLED, Disabled ACM drivers should be included in the enumeration + + + + + ACM Format + + + + + Format Index + + + + + Format Tag + + + + + Support Flags + + + + + WaveFormat + + + + + WaveFormat Size + + + + + Format Description + + + + + ACMFORMATCHOOSE + http://msdn.microsoft.com/en-us/library/dd742911%28VS.85%29.aspx + + + + + DWORD cbStruct; + + + + + DWORD fdwStyle; + + + + + HWND hwndOwner; + + + + + LPWAVEFORMATEX pwfx; + + + + + DWORD cbwfx; + + + + + LPCTSTR pszTitle; + + + + + TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; + + + + + TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; + + + + + LPTSTR pszName; + n.b. can be written into + + + + + DWORD cchName + Should be at least 128 unless name is zero + + + + + DWORD fdwEnum; + + + + + LPWAVEFORMATEX pwfxEnum; + + + + + HINSTANCE hInstance; + + + + + LPCTSTR pszTemplateName; + + + + + LPARAM lCustData; + + + + + ACMFORMATCHOOSEHOOKPROC pfnHook; + + + + + None + + + + + ACMFORMATCHOOSE_STYLEF_SHOWHELP + + + + + ACMFORMATCHOOSE_STYLEF_ENABLEHOOK + + + + + ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE + + + + + ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE + + + + + ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT + + + + + ACMFORMATCHOOSE_STYLEF_CONTEXTHELP + + + + + ACMFORMATDETAILS + http://msdn.microsoft.com/en-us/library/dd742913%28VS.85%29.aspx + + + + + DWORD cbStruct; + + + + + DWORD dwFormatIndex; + + + + + DWORD dwFormatTag; + + + + + DWORD fdwSupport; + + + + + LPWAVEFORMATEX pwfx; + + + + + DWORD cbwfx; + + + + + TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; + + + + + ACMFORMATDETAILS_FORMAT_CHARS + + + + + Format Enumeration Flags + + + + + None + + + + + ACM_FORMATENUMF_CONVERT + The WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will only enumerate destination formats that can be converted from the given pwfx format. + + + + + ACM_FORMATENUMF_HARDWARE + The enumerator should only enumerate formats that are supported as native input or output formats on one or more of the installed waveform-audio devices. This flag provides a way for an application to choose only formats native to an installed waveform-audio device. This flag must be used with one or both of the ACM_FORMATENUMF_INPUT and ACM_FORMATENUMF_OUTPUT flags. Specifying both ACM_FORMATENUMF_INPUT and ACM_FORMATENUMF_OUTPUT will enumerate only formats that can be opened for input or output. This is true regardless of whether this flag is specified. + + + + + ACM_FORMATENUMF_INPUT + Enumerator should enumerate only formats that are supported for input (recording). + + + + + ACM_FORMATENUMF_NCHANNELS + The nChannels member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_NSAMPLESPERSEC + The nSamplesPerSec member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_OUTPUT + Enumerator should enumerate only formats that are supported for output (playback). + + + + + ACM_FORMATENUMF_SUGGEST + The WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate all suggested destination formats for the given pwfx format. This mechanism can be used instead of the acmFormatSuggest function to allow an application to choose the best suggested format for conversion. The dwFormatIndex member will always be set to zero on return. + + + + + ACM_FORMATENUMF_WBITSPERSAMPLE + The wBitsPerSample member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_WFORMATTAG + The wFormatTag member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. The dwFormatTag member of the ACMFORMATDETAILS structure must be equal to the wFormatTag member. + + + + + ACM_FORMATSUGGESTF_WFORMATTAG + + + + + ACM_FORMATSUGGESTF_NCHANNELS + + + + + ACM_FORMATSUGGESTF_NSAMPLESPERSEC + + + + + ACM_FORMATSUGGESTF_WBITSPERSAMPLE + + + + + ACM_FORMATSUGGESTF_TYPEMASK + + + + + ACM Format Tag + + + + + Format Tag Index + + + + + Format Tag + + + + + Format Size + + + + + Support Flags + + + + + Standard Formats Count + + + + + Format Description + + + + + DWORD cbStruct; + + + + + DWORD dwFormatTagIndex; + + + + + DWORD dwFormatTag; + + + + + DWORD cbFormatSize; + + + + + DWORD fdwSupport; + + + + + DWORD cStandardFormats; + + + + + TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; + + + + + ACMFORMATTAGDETAILS_FORMATTAG_CHARS + + + + + Interop definitions for Windows ACM (Audio Compression Manager) API + + + + + http://msdn.microsoft.com/en-us/library/dd742910%28VS.85%29.aspx + UINT ACMFORMATCHOOSEHOOKPROC acmFormatChooseHookProc( + HWND hwnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + + + + + http://msdn.microsoft.com/en-us/library/dd742916%28VS.85%29.aspx + MMRESULT acmFormatSuggest( + HACMDRIVER had, + LPWAVEFORMATEX pwfxSrc, + LPWAVEFORMATEX pwfxDst, + DWORD cbwfxDst, + DWORD fdwSuggest); + + + + + http://msdn.microsoft.com/en-us/library/dd742928%28VS.85%29.aspx + MMRESULT acmStreamOpen( + LPHACMSTREAM phas, + HACMDRIVER had, + LPWAVEFORMATEX pwfxSrc, + LPWAVEFORMATEX pwfxDst, + LPWAVEFILTER pwfltr, + DWORD_PTR dwCallback, + DWORD_PTR dwInstance, + DWORD fdwOpen + + + + + A version with pointers for troubleshooting + + + + + AcmStream encapsulates an Audio Compression Manager Stream + used to convert audio from one format to another + + + + + Creates a new ACM stream to convert one format to another. Note that + not all conversions can be done in one step + + The source audio format + The destination audio format + + + + Creates a new ACM stream to convert one format to another, using a + specified driver identifier and wave filter + + the driver identifier + the source format + the wave filter + + + + Returns the number of output bytes for a given number of input bytes + + Number of input bytes + Number of output bytes + + + + Returns the number of source bytes for a given number of destination bytes + + Number of destination bytes + Number of source bytes + + + + Suggests an appropriate PCM format that the compressed format can be converted + to in one step + + The compressed format + The PCM format + + + + Returns the Source Buffer. Fill this with data prior to calling convert + + + + + Returns the Destination buffer. This will contain the converted data + after a successful call to Convert + + + + + Report that we have repositioned in the source stream + + + + + Converts the contents of the SourceBuffer into the DestinationBuffer + + The number of bytes in the SourceBuffer + that need to be converted + The number of source bytes actually converted + The number of converted bytes in the DestinationBuffer + + + + Converts the contents of the SourceBuffer into the DestinationBuffer + + The number of bytes in the SourceBuffer + that need to be converted + The number of converted bytes in the DestinationBuffer + + + + Frees resources associated with this ACM Stream + + + + + Frees resources associated with this ACM Stream + + + + + Frees resources associated with this ACM Stream + + + + + ACMSTREAMHEADER_STATUSF_DONE + + + + + ACMSTREAMHEADER_STATUSF_PREPARED + + + + + ACMSTREAMHEADER_STATUSF_INQUEUE + + + + + Interop structure for ACM stream headers. + ACMSTREAMHEADER + http://msdn.microsoft.com/en-us/library/dd742926%28VS.85%29.aspx + + + + + ACM_STREAMOPENF_QUERY, ACM will be queried to determine whether it supports the given conversion. A conversion stream will not be opened, and no handle will be returned in the phas parameter. + + + + + ACM_STREAMOPENF_ASYNC, Stream conversion should be performed asynchronously. If this flag is specified, the application can use a callback function to be notified when the conversion stream is opened and closed and after each buffer is converted. In addition to using a callback function, an application can examine the fdwStatus member of the ACMSTREAMHEADER structure for the ACMSTREAMHEADER_STATUSF_DONE flag. + + + + + ACM_STREAMOPENF_NONREALTIME, ACM will not consider time constraints when converting the data. By default, the driver will attempt to convert the data in real time. For some formats, specifying this flag might improve the audio quality or other characteristics. + + + + + CALLBACK_TYPEMASK, callback type mask + + + + + CALLBACK_NULL, no callback + + + + + CALLBACK_WINDOW, dwCallback is a HWND + + + + + CALLBACK_TASK, dwCallback is a HTASK + + + + + CALLBACK_FUNCTION, dwCallback is a FARPROC + + + + + CALLBACK_THREAD, thread ID replaces 16 bit task + + + + + CALLBACK_EVENT, dwCallback is an EVENT Handle + + + + + ACM_STREAMSIZEF_SOURCE + + + + + ACM_STREAMSIZEF_DESTINATION + + + + + Summary description for WaveFilter. + + + + + cbStruct + + + + + dwFilterTag + + + + + fdwFilter + + + + + reserved + + + + ACM_METRIC_COUNT_DRIVERS + + + ACM_METRIC_COUNT_CODECS + + + ACM_METRIC_COUNT_CONVERTERS + + + ACM_METRIC_COUNT_FILTERS + + + ACM_METRIC_COUNT_DISABLED + + + ACM_METRIC_COUNT_HARDWARE + + + ACM_METRIC_COUNT_LOCAL_DRIVERS + + + ACM_METRIC_COUNT_LOCAL_CODECS + + + ACM_METRIC_COUNT_LOCAL_CONVERTERS + + + ACM_METRIC_COUNT_LOCAL_FILTERS + + + ACM_METRIC_COUNT_LOCAL_DISABLED + + + ACM_METRIC_HARDWARE_WAVE_INPUT + + + ACM_METRIC_HARDWARE_WAVE_OUTPUT + + + ACM_METRIC_MAX_SIZE_FORMAT + + + ACM_METRIC_MAX_SIZE_FILTER + + + ACM_METRIC_DRIVER_SUPPORT + + + ACM_METRIC_DRIVER_PRIORITY + + + + ACM_STREAMCONVERTF_BLOCKALIGN + + + + + ACM_STREAMCONVERTF_START + + + + + ACM_STREAMCONVERTF_END + + + + + Wave Callback Info + + + + + Callback Strategy + + + + + Window Handle (if applicable) + + + + + Sets up a new WaveCallbackInfo for function callbacks + + + + + Sets up a new WaveCallbackInfo to use a New Window + IMPORTANT: only use this on the GUI thread + + + + + Sets up a new WaveCallbackInfo to use an existing window + IMPORTANT: only use this on the GUI thread + + + + + Wave Callback Strategy + + + + + Use a function + + + + + Create a new window (should only be done if on GUI thread) + + + + + Use an existing window handle + + + + + Use an event handle + + + + + WaveHeader interop structure (WAVEHDR) + http://msdn.microsoft.com/en-us/library/dd743837%28VS.85%29.aspx + + + + pointer to locked data buffer (lpData) + + + length of data buffer (dwBufferLength) + + + used for input only (dwBytesRecorded) + + + for client's use (dwUser) + + + assorted flags (dwFlags) + + + loop control counter (dwLoops) + + + PWaveHdr, reserved for driver (lpNext) + + + reserved for driver + + + + Wave Header Flags enumeration + + + + + WHDR_BEGINLOOP + This buffer is the first buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_DONE + Set by the device driver to indicate that it is finished with the buffer and is returning it to the application. + + + + + WHDR_ENDLOOP + This buffer is the last buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_INQUEUE + Set by Windows to indicate that the buffer is queued for playback. + + + + + WHDR_PREPARED + Set by Windows to indicate that the buffer has been prepared with the waveInPrepareHeader or waveOutPrepareHeader function. + + + + + WaveInCapabilities structure (based on WAVEINCAPS2 from mmsystem.h) + http://msdn.microsoft.com/en-us/library/ms713726(VS.85).aspx + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Number of channels supported + + + + + The product name + + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + The device name from the registry if supported + + + + + Event Args for WaveInStream event + + + + + Creates new WaveInEventArgs + + + + + Buffer containing recorded data. Note that it might not be completely + full. + + + + + The number of recorded bytes in Buffer. + + + + + MME Wave function interop + + + + + CALLBACK_NULL + No callback + + + + + CALLBACK_FUNCTION + dwCallback is a FARPROC + + + + + CALLBACK_EVENT + dwCallback is an EVENT handle + + + + + CALLBACK_WINDOW + dwCallback is a HWND + + + + + CALLBACK_THREAD + callback is a thread ID + + + + + WIM_OPEN + + + + + WIM_CLOSE + + + + + WIM_DATA + + + + + WOM_CLOSE + + + + + WOM_DONE + + + + + WOM_OPEN + + + + + WaveOutCapabilities structure (based on WAVEOUTCAPS2 from mmsystem.h) + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_waveoutcaps_str.asp + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Optional functionality supported by the device + + + + + Number of channels supported + + + + + Whether playback control is supported + + + + + The product name + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Supported wave formats for WaveOutCapabilities + + + + + 11.025 kHz, Mono, 8-bit + + + + + 11.025 kHz, Stereo, 8-bit + + + + + 11.025 kHz, Mono, 16-bit + + + + + 11.025 kHz, Stereo, 16-bit + + + + + 22.05 kHz, Mono, 8-bit + + + + + 22.05 kHz, Stereo, 8-bit + + + + + 22.05 kHz, Mono, 16-bit + + + + + 22.05 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 48 kHz, Mono, 8-bit + + + + + 48 kHz, Stereo, 8-bit + + + + + 48 kHz, Mono, 16-bit + + + + + 48 kHz, Stereo, 16-bit + + + + + 96 kHz, Mono, 8-bit + + + + + 96 kHz, Stereo, 8-bit + + + + + 96 kHz, Mono, 16-bit + + + + + 96 kHz, Stereo, 16-bit + + + + + Flags indicating what features this WaveOut device supports + + + + supports pitch control (WAVECAPS_PITCH) + + + supports playback rate control (WAVECAPS_PLAYBACKRATE) + + + supports volume control (WAVECAPS_VOLUME) + + + supports separate left-right volume control (WAVECAPS_LRVOLUME) + + + (WAVECAPS_SYNC) + + + (WAVECAPS_SAMPLEACCURATE) + + + + Sample provider interface to make WaveChannel32 extensible + Still a bit ugly, hence internal at the moment - and might even make these into + bit depth converting WaveProviders + + + + + ADSR sample provider allowing you to specify attack, decay, sustain and release values + + + + + Creates a new AdsrSampleProvider with default values + + + + + Attack time in seconds + + + + + Release time in seconds + + + + + Reads audio from this sample provider + + + + + Enters the Release phase + + + + + The output WaveFormat + + + + + Sample Provider to concatenate multiple sample providers together + + + + + Creates a new ConcatenatingSampleProvider + + The source providers to play one after the other. Must all share the same sample rate and channel count + + + + The WaveFormat of this Sample Provider + + + + + Read Samples from this sample provider + + + + + Sample Provider to allow fading in and out + + + + + Creates a new FadeInOutSampleProvider + + The source stream with the audio to be faded in or out + If true, we start faded out + + + + Requests that a fade-in begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Requests that a fade-out begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Reads samples from this sample provider + + Buffer to read into + Offset within buffer to write to + Number of samples desired + Number of samples read + + + + WaveFormat of this SampleProvider + + + + + Simple SampleProvider that passes through audio unchanged and raises + an event every n samples with the maximum sample value from the period + for metering purposes + + + + + Number of Samples per notification + + + + + Raised periodically to inform the user of the max volume + + + + + Initialises a new instance of MeteringSampleProvider that raises 10 stream volume + events per second + + Source sample provider + + + + Initialises a new instance of MeteringSampleProvider + + source sampler provider + Number of samples between notifications + + + + The WaveFormat of this sample provider + + + + + Reads samples from this Sample Provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Event args for aggregated stream volume + + + + + Max sample values array (one for each channel) + + + + + A sample provider mixer, allowing inputs to be added and removed + + + + + Creates a new MixingSampleProvider, with no inputs, but a specified WaveFormat + + The WaveFormat of this mixer. All inputs must be in this format + + + + Creates a new MixingSampleProvider, based on the given inputs + + Mixer inputs - must all have the same waveformat, and must + all be of the same WaveFormat. There must be at least one input + + + + Returns the mixer inputs (read-only - use AddMixerInput to add an input + + + + + When set to true, the Read method always returns the number + of samples requested, even if there are no inputs, or if the + current inputs reach their end. Setting this to true effectively + makes this a never-ending sample provider, so take care if you plan + to write it out to a file. + + + + + Adds a WaveProvider as a Mixer input. + Must be PCM or IEEE float already + + IWaveProvider mixer input + + + + Adds a new mixer input + + Mixer input + + + + Raised when a mixer input has been removed because it has ended + + + + + Removes a mixer input + + Mixer input to remove + + + + Removes all mixer inputs + + + + + The output WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + SampleProvider event args + + + + + Constructs a new SampleProviderEventArgs + + + + + The Sample Provider + + + + + No nonsense mono to stereo provider, no volume adjustment, + just copies input to left and right. + + + + + Initializes a new instance of MonoToStereoSampleProvider + + Source sample provider + + + + WaveFormat of this provider + + + + + Reads samples from this provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Multiplier for left channel (default is 1.0) + + + + + Multiplier for right channel (default is 1.0) + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing sample provider, allowing re-patching of input channels to different + output channels + + Input sample providers. Must all be of the same sample rate, but can have any number of channels + Desired number of output channels. + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads samples from this sample provider + + Buffer to be filled with sample data + Offset into buffer to start writing to, usually 0 + Number of samples required + Number of samples read + + + + The output WaveFormat for this SampleProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Simple class that raises an event on every sample + + + + + Initializes a new instance of NotifyingSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Sample notifier + + + + + Allows you to: + 1. insert a pre-delay of silence before the source begins + 2. skip over a certain amount of the beginning of the source + 3. only play a set amount from the source + 4. insert silence at the end after the source is complete + + + + + Number of samples of silence to insert before playing source + + + + + Amount of silence to insert before playing + + + + + Number of samples in source to discard + + + + + Amount of audio to skip over from the source before beginning playback + + + + + Number of samples to read from source (if 0, then read it all) + + + + + Amount of audio to take from the source (TimeSpan.Zero means play to end) + + + + + Number of samples of silence to insert after playing source + + + + + Amount of silence to insert after playing source + + + + + Creates a new instance of offsetSampleProvider + + The Source Sample Provider to read from + + + + The WaveFormat of this SampleProvider + + + + + Reads from this sample provider + + Sample buffer + Offset within sample buffer to read to + Number of samples required + Number of samples read + + + + Converts a mono sample provider to stereo, with a customisable pan strategy + + + + + Initialises a new instance of the PanningSampleProvider + + Source sample provider, must be mono + + + + Pan value, must be between -1 (left) and 1 (right) + + + + + The pan strategy currently in use + + + + + The WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Pair of floating point values, representing samples or multipliers + + + + + Left value + + + + + Right value + + + + + Required Interface for a Panning Strategy + + + + + Gets the left and right multipliers for a given pan value + + Pan value from -1 to 1 + Left and right multipliers in a stereo sample pair + + + + Simplistic "balance" control - treating the mono input as if it was stereo + In the centre, both channels full volume. Opposite channel decays linearly + as balance is turned to to one side + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Square Root Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Sinus Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Linear Pan + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Converts an IWaveProvider containing 16 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm16BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Samples required + Number of samples read + + + + Converts an IWaveProvider containing 24 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm24BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 32 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm32BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 8 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm8BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples to read + Number of samples read + + + + Utility class that takes an IWaveProvider input at any bit depth + and exposes it as an ISampleProvider. Can turn mono inputs into stereo, + and allows adjusting of volume + (The eventual successor to WaveChannel32) + This class also serves as an example of how you can link together several simple + Sample Providers to form a more useful class. + + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + force mono inputs to become stereo + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + The WaveFormat of this Sample Provider + + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Raised periodically to inform the user of the max volume + (before the volume meter) + + + + + Helper base class for classes converting to ISampleProvider + + + + + Source Wave Provider + + + + + Source buffer (to avoid constantly creating small buffers during playback) + + + + + Initialises a new instance of SampleProviderConverterBase + + Source Wave provider + + + + Wave format of this wave provider + + + + + Reads samples from the source wave provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Ensure the source buffer exists and is big enough + + Bytes required + + + + Utility class for converting to SampleProvider + + + + + Helper function to go from IWaveProvider to a SampleProvider + Must already be PCM or IEEE float + + The WaveProvider to convert + A sample provider + + + + Helper class for when you need to convert back to an IWaveProvider from + an ISampleProvider. Keeps it as IEEE float + + + + + Initializes a new instance of the WaveProviderFloatToWaveProvider class + + Source wave provider + + + + Reads from this provider + + + + + The waveformat of this WaveProvider (same as the source) + + + + + Converts a sample provider to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts a sample provider to 24 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream, clipping if necessary + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + The Format of this IWaveProvider + + + + + + Volume of this channel. 1.0 = full scale, 0.0 to mute + + + + + Signal Generator + Sin, Square, Triangle, SawTooth, White Noise, Pink Noise, Sweep. + + + Posibility to change ISampleProvider + Example : + --------- + WaveOut _waveOutGene = new WaveOut(); + WaveGenerator wg = new SignalGenerator(); + wg.Type = ... + wg.Frequency = ... + wg ... + _waveOutGene.Init(wg); + _waveOutGene.Play(); + + + + + Initializes a new instance for the Generator (Default :: 44.1Khz, 2 channels, Sinus, Frequency = 440, Gain = 1) + + + + + Initializes a new instance for the Generator (UserDef SampleRate & Channels) + + Desired sample rate + Number of channels + + + + The waveformat of this WaveProvider (same as the source) + + + + + Frequency for the Generator. (20.0 - 20000.0 Hz) + Sin, Square, Triangle, SawTooth, Sweep (Start Frequency). + + + + + Return Log of Frequency Start (Read only) + + + + + End Frequency for the Sweep Generator. (Start Frequency in Frequency) + + + + + Return Log of Frequency End (Read only) + + + + + Gain for the Generator. (0.0 to 1.0) + + + + + Channel PhaseReverse + + + + + Type of Generator. + + + + + Length Seconds for the Sweep Generator. + + + + + Reads from this provider. + + + + + Private :: Random for WhiteNoise & Pink Noise (Value form -1 to 1) + + Random value from -1 to +1 + + + + Signal Generator type + + + + + Pink noise + + + + + White noise + + + + + Sweep + + + + + Sine wave + + + + + Square wave + + + + + Triangle Wave + + + + + Sawtooth wave + + + + + Author: Freefall + Date: 05.08.16 + Based on: the port of Stephan M. Bernsee´s pitch shifting class + Port site: https://sites.google.com/site/mikescoderama/pitch-shifting + Test application and github site: https://github.com/Freefall63/NAudio-Pitchshifter + + NOTE: I strongly advice to add a Limiter for post-processing. + For my needs the FastAttackCompressor1175 provides acceptable results: + https://github.com/Jiyuu/SkypeFX/blob/master/JSNet/FastAttackCompressor1175.cs + + UPDATE: Added a simple Limiter based on the pydirac implementation. + https://github.com/echonest/remix/blob/master/external/pydirac225/source/Dirac_LE.cpp + + + + + + Creates a new SMB Pitch Shifting Sample Provider with default settings + + Source provider + + + + Creates a new SMB Pitch Shifting Sample Provider with custom settings + + Source provider + FFT Size (any power of two <= 4096: 4096, 2048, 1024, 512, ...) + Oversampling (number of overlapping windows) + Initial pitch (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + Read from this sample provider + + + + + WaveFormat + + + + + Pitch Factor (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + + Takes a stereo input and turns it to mono + + + + + Creates a new mono ISampleProvider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this SampleProvider + + + + + Very simple sample provider supporting adjustable gain + + + + + Initializes a new instance of VolumeSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Helper class turning an already 32 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Helper class turning an already 64 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Fully managed resampling sample provider, based on the WDL Resampler + + + + + Constructs a new resampler + + Source to resample + Desired output sample rate + + + + Reads from this sample provider + + + + + Output WaveFormat + + + + + Useful extension methods to make switching between WaveAndSampleProvider easier + + + + + Converts a WaveProvider into a SampleProvider (only works for PCM) + + WaveProvider to convert + + + + + Allows sending a SampleProvider directly to an IWavePlayer without needing to convert + back to an IWaveProvider + + The WavePlayer + + + + + + Turns WaveFormatExtensible into a standard waveformat if possible + + Input wave format + A standard PCM or IEEE waveformat, or the original waveformat + + + + Converts a ISampleProvider to a IWaveProvider but still 32 bit float + + SampleProvider to convert + An IWaveProvider + + + + Converts a ISampleProvider to a IWaveProvider but and convert to 16 bit + + SampleProvider to convert + A 16 bit IWaveProvider + + + + Concatenates one Sample Provider on the end of another + + The sample provider to play first + The sample provider to play next + A single sampleprovider to play one after the other + + + + Concatenates one Sample Provider on the end of another with silence inserted + + The sample provider to play first + Silence duration to insert between the two + The sample provider to play next + A single sample provider + + + + Skips over a specified amount of time (by consuming source stream) + + Source sample provider + Duration to skip over + A sample provider that skips over the specified amount of time + + + + Takes a specified amount of time from the source stream + + Source sample provider + Duration to take + A sample provider that reads up to the specified amount of time + + + + Converts a Stereo Sample Provider to mono, allowing mixing of channel volume + + Stereo Source Provider + Amount of left channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + Amount of right channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + A mono SampleProvider + + + + Converts a Mono ISampleProvider to stereo + + Mono Source Provider + Amount to mix to left channel (1.0 is full volume) + Amount to mix to right channel (1.0 is full volume) + + + + + Microsoft ADPCM + See http://icculus.org/SDL_sound/downloads/external_documentation/wavecomp.htm + + + + + Empty constructor needed for marshalling from a pointer + + + + + Samples per block + + + + + Number of coefficients + + + + + Coefficients + + + + + Microsoft ADPCM + + Sample Rate + Channels + + + + Serializes this wave format + + Binary writer + + + + String Description of this WaveFormat + + + + + GSM 610 + + + + + Creates a GSM 610 WaveFormat + For now hardcoded to 13kbps + + + + + Samples per block + + + + + Writes this structure to a BinaryWriter + + + + + IMA/DVI ADPCM Wave Format + Work in progress + + + + + parameterless constructor for Marshalling + + + + + Creates a new IMA / DVI ADPCM Wave Format + + Sample Rate + Number of channels + Bits Per Sample + + + + MP3 WaveFormat, MPEGLAYER3WAVEFORMAT from mmreg.h + + + + + Wave format ID (wID) + + + + + Padding flags (fdwFlags) + + + + + Block Size (nBlockSize) + + + + + Frames per block (nFramesPerBlock) + + + + + Codec Delay (nCodecDelay) + + + + + Creates a new MP3 WaveFormat + + + + + Wave Format Padding Flags + + + + + MPEGLAYER3_FLAG_PADDING_ISO + + + + + MPEGLAYER3_FLAG_PADDING_ON + + + + + MPEGLAYER3_FLAG_PADDING_OFF + + + + + Wave Format ID + + + + MPEGLAYER3_ID_UNKNOWN + + + MPEGLAYER3_ID_MPEG + + + MPEGLAYER3_ID_CONSTANTFRAMESIZE + + + + DSP Group TrueSpeech + + + + + DSP Group TrueSpeech WaveFormat + + + + + Writes this structure to a BinaryWriter + + + + + Represents a Wave file format + + + + format type + + + number of channels + + + sample rate + + + for buffer estimation + + + block size of data + + + number of bits per sample of mono data + + + number of following bytes + + + + Creates a new PCM 44.1Khz stereo 16 bit format + + + + + Creates a new 16 bit wave format with the specified sample + rate and channel count + + Sample Rate + Number of channels + + + + Gets the size of a wave buffer equivalent to the latency in milliseconds. + + The milliseconds. + + + + + Creates a WaveFormat with custom members + + The encoding + Sample Rate + Number of channels + Average Bytes Per Second + Block Align + Bits Per Sample + + + + + Creates an A-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a Mu-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a new PCM format with the specified sample rate, bit depth and channels + + + + + Creates a new 32 bit IEEE floating point wave format + + sample rate + number of channels + + + + Helper function to retrieve a WaveFormat structure from a pointer + + WaveFormat structure + + + + + Helper function to marshal WaveFormat to an IntPtr + + WaveFormat + IntPtr to WaveFormat structure (needs to be freed by callee) + + + + Reads in a WaveFormat (with extra data) from a fmt chunk (chunk identifier and + length should already have been read) + + Binary reader + Format chunk length + A WaveFormatExtraData + + + + Reads a new WaveFormat object from a stream + + A binary reader that wraps the stream + + + + Reports this WaveFormat as a string + + String describing the wave format + + + + Compares with another WaveFormat object + + Object to compare to + True if the objects are the same + + + + Provides a Hashcode for this WaveFormat + + A hashcode + + + + Returns the encoding type used + + + + + Writes this WaveFormat object to a stream + + the output stream + + + + Returns the number of channels (1=mono,2=stereo etc) + + + + + Returns the sample rate (samples per second) + + + + + Returns the average number of bytes used per second + + + + + Returns the block alignment + + + + + Returns the number of bits per sample (usually 16 or 32, sometimes 24 or 8) + Can be 0 for some codecs + + + + + Returns the number of extra bytes used by this waveformat. Often 0, + except for compressed formats which store extra data after the WAVEFORMATEX header + + + + + Custom marshaller for WaveFormat structures + + + + + Gets the instance of this marshaller + + + + + + + Clean up managed data + + + + + Clean up native data + + + + + + Get native data size + + + + + Marshal managed to native + + + + + Marshal Native to Managed + + + + + Summary description for WaveFormatEncoding. + + + + WAVE_FORMAT_UNKNOWN, Microsoft Corporation + + + WAVE_FORMAT_PCM Microsoft Corporation + + + WAVE_FORMAT_ADPCM Microsoft Corporation + + + WAVE_FORMAT_IEEE_FLOAT Microsoft Corporation + + + WAVE_FORMAT_VSELP Compaq Computer Corp. + + + WAVE_FORMAT_IBM_CVSD IBM Corporation + + + WAVE_FORMAT_ALAW Microsoft Corporation + + + WAVE_FORMAT_MULAW Microsoft Corporation + + + WAVE_FORMAT_DTS Microsoft Corporation + + + WAVE_FORMAT_DRM Microsoft Corporation + + + WAVE_FORMAT_WMAVOICE9 + + + WAVE_FORMAT_OKI_ADPCM OKI + + + WAVE_FORMAT_DVI_ADPCM Intel Corporation + + + WAVE_FORMAT_IMA_ADPCM Intel Corporation + + + WAVE_FORMAT_MEDIASPACE_ADPCM Videologic + + + WAVE_FORMAT_SIERRA_ADPCM Sierra Semiconductor Corp + + + WAVE_FORMAT_G723_ADPCM Antex Electronics Corporation + + + WAVE_FORMAT_DIGISTD DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIFIX DSP Solutions, Inc. + + + WAVE_FORMAT_DIALOGIC_OKI_ADPCM Dialogic Corporation + + + WAVE_FORMAT_MEDIAVISION_ADPCM Media Vision, Inc. + + + WAVE_FORMAT_CU_CODEC Hewlett-Packard Company + + + WAVE_FORMAT_YAMAHA_ADPCM Yamaha Corporation of America + + + WAVE_FORMAT_SONARC Speech Compression + + + WAVE_FORMAT_DSPGROUP_TRUESPEECH DSP Group, Inc + + + WAVE_FORMAT_ECHOSC1 Echo Speech Corporation + + + WAVE_FORMAT_AUDIOFILE_AF36, Virtual Music, Inc. + + + WAVE_FORMAT_APTX Audio Processing Technology + + + WAVE_FORMAT_AUDIOFILE_AF10, Virtual Music, Inc. + + + WAVE_FORMAT_PROSODY_1612, Aculab plc + + + WAVE_FORMAT_LRC, Merging Technologies S.A. + + + WAVE_FORMAT_DOLBY_AC2, Dolby Laboratories + + + WAVE_FORMAT_GSM610, Microsoft Corporation + + + WAVE_FORMAT_MSNAUDIO, Microsoft Corporation + + + WAVE_FORMAT_ANTEX_ADPCME, Antex Electronics Corporation + + + WAVE_FORMAT_CONTROL_RES_VQLPC, Control Resources Limited + + + WAVE_FORMAT_DIGIREAL, DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIADPCM, DSP Solutions, Inc. + + + WAVE_FORMAT_CONTROL_RES_CR10, Control Resources Limited + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_MPEG, Microsoft Corporation + + + + + + + + + WAVE_FORMAT_MPEGLAYER3, ISO/MPEG Layer3 Format Tag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_GSM + + + WAVE_FORMAT_G729 + + + WAVE_FORMAT_G723 + + + WAVE_FORMAT_ACELP + + + + WAVE_FORMAT_RAW_AAC1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Windows Media Audio, WAVE_FORMAT_WMAUDIO2, Microsoft Corporation + + + + + Windows Media Audio Professional WAVE_FORMAT_WMAUDIO3, Microsoft Corporation + + + + + Windows Media Audio Lossless, WAVE_FORMAT_WMAUDIO_LOSSLESS + + + + + Windows Media Audio Professional over SPDIF WAVE_FORMAT_WMASPDIF (0x0164) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Advanced Audio Coding (AAC) audio in Audio Data Transport Stream (ADTS) format. + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_ADTS_AAC. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral band replication (SBR) or parametric stereo (PS) tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + + Source wmCodec.h + + + + MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_LOAS. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral SBR or PS tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + NOKIA_MPEG_ADTS_AAC + Source wmCodec.h + + + NOKIA_MPEG_RAW_AAC + Source wmCodec.h + + + VODAFONE_MPEG_ADTS_AAC + Source wmCodec.h + + + VODAFONE_MPEG_RAW_AAC + Source wmCodec.h + + + + High-Efficiency Advanced Audio Coding (HE-AAC) stream. + The format block is an HEAACWAVEFORMAT structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + WAVE_FORMAT_DVM + + + WAVE_FORMAT_VORBIS1 "Og" Original stream compatible + + + WAVE_FORMAT_VORBIS2 "Pg" Have independent header + + + WAVE_FORMAT_VORBIS3 "Qg" Have no codebook header + + + WAVE_FORMAT_VORBIS1P "og" Original stream compatible + + + WAVE_FORMAT_VORBIS2P "pg" Have independent headere + + + WAVE_FORMAT_VORBIS3P "qg" Have no codebook header + + + WAVE_FORMAT_EXTENSIBLE + + + + + + + WaveFormatExtensible + http://www.microsoft.com/whdc/device/audio/multichaud.mspx + + + + + Parameterless constructor for marshalling + + + + + Creates a new WaveFormatExtensible for PCM or IEEE + + + + + WaveFormatExtensible for PCM or floating point can be awkward to work with + This creates a regular WaveFormat structure representing the same audio format + Returns the WaveFormat unchanged for non PCM or IEEE float + + + + + + SubFormat (may be one of AudioMediaSubtypes) + + + + + Serialize + + + + + + String representation + + + + + This class used for marshalling from unmanaged code + + + + + Allows the extra data to be read + + + + + parameterless constructor for marshalling + + + + + Reads this structure from a BinaryReader + + + + + Writes this structure to a BinaryWriter + + + + + The WMA wave format. + May not be much use because WMA codec is a DirectShow DMO not an ACM + + + + + Generic interface for wave recording + + + + + Recording WaveFormat + + + + + Start Recording + + + + + Stop Recording + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + WASAPI Loopback Capture + based on a contribution from "Pygmy" - http://naudio.codeplex.com/discussions/203605 + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Gets the default audio loopback capture device + + The default audio loopback capture device + + + + Capturing wave format + + + + + Specify loopback + + + + + Allows recording using the Windows waveIn APIs + Events are raised as recorded buffers are made available + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Prepares a Wave input device for recording + + + + + Creates a WaveIn device using the specified window handle for callbacks + + A valid window handle + + + + Prepares a Wave input device for recording + + + + + Returns the number of Wave In devices available in the system + + + + + Retrieves the capabilities of a waveIn device + + Device to test + The WaveIn device capabilities + + + + Milliseconds for the buffer. Recommended value is 100ms + + + + + Number of Buffers to use (usually 2 or 3) + + + + + The device number to use + + + + + Called when we get a new buffer of recorded data + + + + + Start recording + + + + + Stop recording + + + + + Gets the current position in bytes from the wave input device. + it calls directly into waveInGetPosition) + + Position in bytes + + + + WaveFormat we are recording in + + + + + Dispose pattern + + + + + Microphone Level + + + + + Dispose method + + + + + Recording using waveIn api with event callbacks. + Use this for recording in non-gui applications + Events are raised as recorded buffers are made available + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Prepares a Wave input device for recording + + + + + Returns the number of Wave In devices available in the system + + + + + Retrieves the capabilities of a waveIn device + + Device to test + The WaveIn device capabilities + + + + Milliseconds for the buffer. Recommended value is 100ms + + + + + Number of Buffers to use (usually 2 or 3) + + + + + The device number to use + + + + + Start recording + + + + + Stop recording + + + + + Gets the current position in bytes from the wave input device. + it calls directly into waveInGetPosition) + + Position in bytes + + + + WaveFormat we are recording in + + + + + Dispose pattern + + + + + Microphone Level + + + + + Dispose method + + + + + This class writes audio data to a .aif file on disk + + + + + Creates an Aiff file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Aiff File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + AiffFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new AiffFileWriter + + The filename to write to + The Wave Format of the output data + + + + The aiff file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + WaveFormat of this aiff file + + + + + Returns false: Cannot read from a AiffFileWriter + + + + + Returns true: Can write to a AiffFileWriter + + + + + Returns false: Cannot seek within a AiffFileWriter + + + + + Read is not supported for a AiffFileWriter + + + + + Seek is not supported for a AiffFileWriter + + + + + SetLength is not supported for AiffFileWriter + + + + + + Gets the Position in the AiffFile (i.e. number of bytes written so far) + + + + + Appends bytes to the AiffFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Aiff file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Aiff file + They will be converted to the appropriate bit depth depending on the WaveFormat of the AIF file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Aiff file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this AiffFileWriter + + + + + Raised when ASIO data has been recorded. + It is important to handle this as quickly as possible as it is in the buffer callback + + + + + Initialises a new instance of AsioAudioAvailableEventArgs + + Pointers to the ASIO buffers for each channel + Pointers to the ASIO buffers for each channel + Number of samples in each buffer + Audio format within each buffer + + + + Pointer to a buffer per input channel + + + + + Pointer to a buffer per output channel + Allows you to write directly to the output buffers + If you do so, set SamplesPerBuffer = true, + and make sure all buffers are written to with valid data + + + + + Set to true if you have written to the output buffers + If so, AsioOut will not read from its source + + + + + Number of samples in each buffer + + + + + Converts all the recorded audio into a buffer of 32 bit floating point samples, interleaved by channel + + The samples as 32 bit floating point, interleaved + + + + Audio format within each buffer + Most commonly this will be one of, Int32LSB, Int16LSB, Int24LSB or Float32LSB + + + + + Gets as interleaved samples, allocating a float array + + The samples as 32 bit floating point values + + + + ASIO Out Player. New implementation using an internal C# binding. + + This implementation is only supporting Short16Bit and Float32Bit formats and is optimized + for 2 outputs channels . + SampleRate is supported only if AsioDriver is supporting it + + This implementation is probably the first AsioDriver binding fully implemented in C#! + + Original Contributor: Mark Heath + New Contributor to C# binding : Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Playback Stopped + + + + + When recording, fires whenever recorded audio is available + + + + + Initializes a new instance of the class with the first + available ASIO Driver. + + + + + Initializes a new instance of the class with the driver name. + + Name of the device. + + + + Opens an ASIO output device + + Device number (zero based) + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Dispose + + + + + Gets the names of the installed ASIO Driver. + + an array of driver names + + + + Determines whether ASIO is supported. + + + true if ASIO is supported; otherwise, false. + + + + + Inits the driver from the asio driver name. + + Name of the driver. + + + + Shows the control panel + + + + + Starts playback + + + + + Stops playback + + + + + Pauses playback + + + + + Initialises to play + + Source wave provider + + + + Initialises to play, with optional recording + + Source wave provider - set to null for record only + Number of channels to record + Specify sample rate here if only recording, ignored otherwise + + + + driver buffer update callback to fill the wave buffer. + + The input channels. + The output channels. + + + + Gets the latency (in ms) of the playback driver + + + + + Automatically stop when the end of the input stream is reached + Disable this if auto-stop is causing hanging issues + + + + + A flag to let you know that we have reached the end of the input file + Useful if AutoStop is set to false + You can monitor this yourself and call Stop when it is true + + + + + Playback State + + + + + Driver Name + + + + + The number of output channels we are currently using for playback + (Must be less than or equal to DriverOutputChannelCount) + + + + + The number of input channels we are currently recording from + (Must be less than or equal to DriverInputChannelCount) + + + + + The maximum number of input channels this ASIO driver supports + + + + + The maximum number of output channels this ASIO driver supports + + + + + The number of samples per channel, per buffer. + + + + + By default the first channel on the input WaveProvider is sent to the first ASIO output. + This option sends it to the specified channel number. + Warning: make sure you don't set it higher than the number of available output channels - + the number of source channels. + n.b. Future NAudio may modify this + + + + + Input channel offset (used when recording), allowing you to choose to record from just one + specific input rather than them all + + + + + Sets the volume (1.0 is unity gain) + Not supported for ASIO Out. Set the volume on the input stream instead + + + + + Get the input channel name + + channel index (zero based) + channel name + + + + Get the output channel name + + channel index (zero based) + channel name + + + + https://tech.ebu.ch/docs/tech/tech3285.pdf + + + + + Constructs a new BextChunkInfo + + + + + Description (max 256 chars) + + + + + Originator (max 32 chars) + + + + + Originator Reference (max 32 chars) + + + + + Originator Date Time + + + + + Origination Date as string + + + + + Origination as time + + + + + Time reference (first sample count since midnight) + + + + + version 2 has loudness stuff which we don't know so using version 1 + + + + + 64 bytes http://en.wikipedia.org/wiki/UMID + + + + + for version 2 = 180 bytes (10 before are loudness values), using version 1 = 190 bytes + + + + + Coding history arbitrary length string at end of structure + http://www.ebu.ch/CMSimages/fr/tec_text_r98-1999_tcm7-4709.pdf + A=PCM,F=48000,W=16,M=stereo,T=original,CR/LF + + + + + Broadcast WAVE File Writer + + + + + Createa a new BwfWriter + + Rarget filename + WaveFormat + Chunk information + + + + Write audio data to this BWF + + + + + Flush writer, and fix up header sizes + + + + + Disposes this writer + + + + + A wave file writer that adds cue support + + + + + Writes a wave file, including a cues chunk + + + + + Adds a cue to the Wave file + + Sample position + Label text + + + + Updates the header, and writes the cues out + + + + + NativeDirectSoundOut using DirectSound COM interop. + Contact author: Alexandre Mutel - alexandre_mutel at yahoo.fr + Modified by: Graham "Gee" Plumb + + + + + Playback Stopped + + + + + Gets the DirectSound output devices in the system + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + (40ms seems to work under Vista). + + The latency. + Selected device + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream) + + Position in bytes + + + + Gets the current position from the wave output device. + + + + + Initialise playback + + The waveprovider to be played + + + + Current playback state + + + + + + The volume 1.0 is full scale + + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Determines whether the SecondaryBuffer is lost. + + + true if [is buffer lost]; otherwise, false. + + + + + Convert ms to bytes size according to WaveFormat + + The ms + number of byttes + + + + Processes the samples in a separate thread. + + + + + Stop playback + + + + + Clean up the SecondaryBuffer + + + + In DirectSound, when playback is started, + the rest of the sound that was played last time is played back as noise. + This happens even if the secondary buffer is completely silenced, + so it seems that the buffer in the primary buffer or higher is not cleared. + + + To solve this problem fill the secondary buffer with silence data when stop playback. + + + + + + Feeds the SecondaryBuffer with the WaveStream + + number of bytes to feed + + + + IDirectSound interface + + + + + IDirectSoundBuffer interface + + + + + IDirectSoundNotify interface + + + + + Instanciate DirectSound from the DLL + + The GUID. + The direct sound. + The p unk outer. + + + + DirectSound default playback device GUID + + + + + DirectSound default capture device GUID + + + + + DirectSound default device for voice playback + + + + + DirectSound default device for voice capture + + + + + The DSEnumCallback function is an application-defined callback function that enumerates the DirectSound drivers. + The system calls this function in response to the application's call to the DirectSoundEnumerate or DirectSoundCaptureEnumerate function. + + Address of the GUID that identifies the device being enumerated, or NULL for the primary device. This value can be passed to the DirectSoundCreate8 or DirectSoundCaptureCreate8 function to create a device object for that driver. + Address of a null-terminated string that provides a textual description of the DirectSound device. + Address of a null-terminated string that specifies the module name of the DirectSound driver corresponding to this device. + Address of application-defined data. This is the pointer passed to DirectSoundEnumerate or DirectSoundCaptureEnumerate as the lpContext parameter. + Returns TRUE to continue enumerating drivers, or FALSE to stop. + + + + The DirectSoundEnumerate function enumerates the DirectSound drivers installed in the system. + + callback function + User context + + + + Gets the HANDLE of the desktop window. + + HANDLE of the Desktop window + + + + Class for enumerating DirectSound devices + + + + + The device identifier + + + + + Device description + + + + + Device module name + + + + + IWaveBuffer interface use to store wave datas. + Data can be manipulated with arrays (,, + , ) that are pointing to the same memory buffer. + This is a requirement for all subclasses. + + Use the associated Count property based on the type of buffer to get the number of data in the + buffer. + + for the standard implementation using C# unions. + + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets the byte buffer count. + + The byte buffer count. + + + + Gets the float buffer count. + + The float buffer count. + + + + Gets the short buffer count. + + The short buffer count. + + + + Gets the int buffer count. + + The int buffer count. + + + + Represents the interface to a device that can play a WaveFile + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Initialise playback + + The waveprovider to be played + + + + The volume + 1.0f is full scale + Note that not all implementations necessarily support volume changes + + + + + Current playback state + + + + + Indicates that playback has gone into a stopped state due to + reaching the end of the input stream or an error has been encountered during playback + + + + + Interface for IWavePlayers that can report position + + + + + Position (in terms of bytes played - does not necessarily translate directly to the position within the source audio file) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Generic interface for all WaveProviders. + + + + + Gets the WaveFormat of this WaveProvider. + + The wave format. + + + + Fill the specified buffer with wave data. + + The buffer to fill of wave data. + Offset into buffer + The number of bytes to read + the number of bytes written to the buffer. + + + + Like IWaveProvider, but makes it much simpler to put together a 32 bit floating + point mixing engine + + + + + Gets the WaveFormat of this Sample Provider. + + The wave format. + + + + Fill the specified buffer with 32 bit floating point samples + + The buffer to fill with samples. + Offset into buffer + The number of samples to read + the number of samples written to the buffer. + + + + Media Foundation Encoder class allows you to use Media Foundation to encode an IWaveProvider + to any supported encoding format + + + + + Queries the available bitrates for a given encoding output type, sample rate and number of channels + + Audio subtype - a value from the AudioSubtypes class + The sample rate of the PCM to encode + The number of channels of the PCM to encode + An array of available bitrates in average bits per second + + + + Gets all the available media types for a particular + + Audio subtype - a value from the AudioSubtypes class + An array of available media types that can be encoded with this subtype + + + + Helper function to simplify encoding Window Media Audio + Should be supported on Vista and above (not tested) + + Input provider, must be PCM + Output file path, should end with .wma + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Helper function to simplify encoding to MP3 + By default, will only be available on Windows 8 and above + + Input provider, must be PCM + Output file path, should end with .mp3 + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Helper function to simplify encoding to AAC + By default, will only be available on Windows 7 and above + + Input provider, must be PCM + Output file path, should end with .mp4 (or .aac on Windows 8) + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Tries to find the encoding media type with the closest bitrate to that specified + + Audio subtype, a value from AudioSubtypes + Your encoder input format (used to check sample rate and channel count) + Your desired bitrate + The closest media type, or null if none available + + + + Creates a new encoder that encodes to the specified output media type + + Desired output media type + + + + Encodes a file + + Output filename (container type is deduced from the filename) + Input provider (should be PCM, some encoders will also allow IEEE float) + + + + Disposes this instance + + + + + + Disposes this instance + + + + + Finalizer + + + + + Playback State + + + + + Stopped + + + + + Playing + + + + + Paused + + + + + Stopped Event Args + + + + + Initializes a new instance of StoppedEventArgs + + An exception to report (null if no exception) + + + + An exception. Will be null if the playback or record operation stopped due to + the user requesting stop or reached the end of the input audio + + + + + Support for playback using Wasapi + + + + + Playback Stopped + + + + + WASAPI Out shared mode, default + + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + Desired latency in milliseconds + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + true if sync is done with event. false use sleep. + Desired latency in milliseconds + + + + Creates a new WASAPI Output + + Device to use + + true if sync is done with event. false use sleep. + Desired latency in milliseconds + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Begin Playback + + + + + Stop playback and flush buffers + + + + + Stop playback without flushing buffers + + + + + Initialize for playing the specified wave stream + + IWaveProvider to play + + + + Playback State + + + + + Volume + + + + + Retrieve the AudioStreamVolume object for this audio stream + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Dispose + + + + + WaveBuffer class use to store wave datas. Data can be manipulated with arrays + (,,, ) that are pointing to the + same memory buffer. Use the associated Count property based on the type of buffer to get the number of + data in the buffer. + Implicit casting is now supported to float[], byte[], int[], short[]. + You must not use Length on returned arrays. + + n.b. FieldOffset is 8 now to allow it to work natively on 64 bit + + + + + Number of Bytes + + + + + Initializes a new instance of the class. + + The number of bytes. The size of the final buffer will be aligned on 4 Bytes (upper bound) + + + + Initializes a new instance of the class binded to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Binds this WaveBuffer instance to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets or sets the byte buffer count. + + The byte buffer count. + + + + Gets or sets the float buffer count. + + The float buffer count. + + + + Gets or sets the short buffer count. + + The short buffer count. + + + + Gets or sets the int buffer count. + + The int buffer count. + + + + Clears the associated buffer. + + + + + Copy this WaveBuffer to a destination buffer up to ByteBufferCount bytes. + + + + + Checks the validity of the count parameters. + + Name of the arg. + The value. + The size of value. + + + + This class writes WAV data to a .wav file on disk + + + + + Creates a 16 bit Wave File from an ISampleProvider + BEWARE: the source provider must not return data indefinitely + + The filename to write to + The source sample provider + + + + Creates a Wave file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + Writes to a stream by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The stream the method will output to + The source WaveProvider + + + + WaveFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new WaveFileWriter + + The filename to write to + The Wave Format of the output data + + + + The wave file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + Total time (calculated from Length and average bytes per second) + + + + + WaveFormat of this wave file + + + + + Returns false: Cannot read from a WaveFileWriter + + + + + Returns true: Can write to a WaveFileWriter + + + + + Returns false: Cannot seek within a WaveFileWriter + + + + + Read is not supported for a WaveFileWriter + + + + + Seek is not supported for a WaveFileWriter + + + + + SetLength is not supported for WaveFileWriter + + + + + + Gets the Position in the WaveFile (i.e. number of bytes written so far) + + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Wave file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Wave file + They will be converted to the appropriate bit depth depending on the WaveFormat of the WAV file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + Also updates header, so that WAV file will be valid up to the point currently written + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this WaveFileWriter + + + + + Represents a wave out device + + + + + Indicates playback has stopped automatically + + + + + Retrieves the capabilities of a waveOut device + + Device to test + The WaveOut device capabilities + + + + Returns the number of Wave Out devices available in the system + + + + + Gets or sets the desired latency in milliseconds + Should be set before a call to Init + + + + + Gets or sets the number of buffers used + Should be set before a call to Init + + + + + Gets or sets the device number + Should be set before a call to Init + This must be between -1 and DeviceCount - 1. + -1 means stick to default device even default device is changed + + + + + Creates a default WaveOut device + Will use window callbacks if called from a GUI thread, otherwise function + callbacks + + + + + Creates a WaveOut device using the specified window handle for callbacks + + A valid window handle + + + + Opens a WaveOut device + + + + + Initialises the WaveOut device + + WaveProvider to play + + + + Start playing the audio from the WaveStream + + + + + Pause the audio + + + + + Resume playing after a pause from the same position + + + + + Stop and reset the WaveOut device + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream - it calls directly into waveOutGetPosition) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Playback State + + + + + Volume for this device 1.0 is full scale + + + + + Closes this WaveOut device + + + + + Closes the WaveOut device and disposes of buffers + + True if called from Dispose + + + + Finalizer. Only called when user forgets to call Dispose + + + + + Alternative WaveOut class, making use of the Event callback + + + + + Indicates playback has stopped automatically + + + + + Gets or sets the desired latency in milliseconds + Should be set before a call to Init + + + + + Gets or sets the number of buffers used + Should be set before a call to Init + + + + + Gets or sets the device number + Should be set before a call to Init + This must be between -1 and DeviceCount - 1. + -1 means stick to default device even default device is changed + + + + + Opens a WaveOut device + + + + + Initialises the WaveOut device + + WaveProvider to play + + + + Start playing the audio from the WaveStream + + + + + Pause the audio + + + + + Resume playing after a pause from the same position + + + + + Stop and reset the WaveOut device + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream - it calls directly into waveOutGetPosition) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Playback State + + + + + Volume for this device 1.0 is full scale + + + + + Closes this WaveOut device + + + + + Closes the WaveOut device and disposes of buffers + + True if called from Dispose + + + + Finalizer. Only called when user forgets to call Dispose + + + + + Provides a buffered store of samples + Read method will return queued samples or fill buffer with zeroes + Now backed by a circular buffer + + + + + Creates a new buffered WaveProvider + + WaveFormat + + + + If true, always read the amount of data requested, padding with zeroes if necessary + By default is set to true + + + + + Buffer length in bytes + + + + + Buffer duration + + + + + If true, when the buffer is full, start throwing away data + if false, AddSamples will throw an exception when buffer is full + + + + + The number of buffered bytes + + + + + Buffered Duration + + + + + Gets the WaveFormat + + + + + Adds samples. Takes a copy of buffer, so that buffer can be reused if necessary + + + + + Reads from this WaveProvider + Will always return count bytes, since we will zero-fill the buffer if not enough available + + + + + Discards all audio from the buffer + + + + + Provide WaveProvider that can apply effects in real time using DMO. + + If the audio thread is running on the STA thread, please generate and operate from the same thread. + If the audio thread is running on the MTA thread, please operate on any MTA thread. + + Types of DMO effectors to use + Parameters of the effect to be used + + + + Create a new DmoEffectWaveProvider + + Input Stream + + + + Stream Wave Format + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Get Effector Parameters + + + + + Dispose + + + + + The Media Foundation Resampler Transform + + + + + Creates the Media Foundation Resampler, allowing modifying of sample rate, bit depth and channel count + + Source provider, must be PCM + Output format, must also be PCM + + + + Creates a resampler with a specified target output sample rate + + Source provider + Output sample rate + + + + Creates and configures the actual Resampler transform + + A newly created and configured resampler MFT + + + + Gets or sets the Resampler quality. n.b. set the quality before starting to resample. + 1 is lowest quality (linear interpolation) and 60 is best quality + + + + + Disposes this resampler + + + + + WaveProvider that can mix together multiple 32 bit floating point input provider + All channels must have the same number of inputs and same sample rate + n.b. Work in Progress - not tested yet + + + + + Creates a new MixingWaveProvider32 + + + + + Creates a new 32 bit MixingWaveProvider32 + + inputs - must all have the same format. + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove an input from the mixer + + waveProvider to remove + + + + The number of inputs to this mixer + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Converts from mono to stereo, allowing freedom to route all, some, or none of the incoming signal to left or right channels + + + + + Creates a new stereo waveprovider based on a mono input + + Mono 16 bit PCM input + + + + 1.0 to copy the mono stream to the left channel without adjusting volume + + + + + 1.0 to copy the mono stream to the right channel without adjusting volume + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels. Number of outputs is equal to total number of channels in inputs + + Input wave providers. Must all be of the same format, but can have any number of channels + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels + + Input wave providers. Must all be of the same format, but can have any number of channels + Desired number of output channels. (-1 means use total number of input channels) + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads data from this WaveProvider + + Buffer to be filled with sample data + Offset to write to within buffer, usually 0 + Number of bytes required + Number of bytes read + + + + The WaveFormat of this WaveProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Silence producing wave provider + Useful for playing silence when doing a WASAPI Loopback Capture + + + + + Creates a new silence producing wave provider + + Desired WaveFormat (should be PCM / IEE float + + + + Read silence from into the buffer + + + + + WaveFormat of this silence producing wave provider + + + + + Takes a stereo 16 bit input and turns it mono, allowing you to select left or right channel only or mix them together + + + + + Creates a new mono waveprovider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Helper class allowing us to modify the volume of a 16 bit stream without converting to IEEE float + + + + + Constructs a new VolumeWaveProvider16 + + Source provider, must be 16 bit PCM + + + + Gets or sets volume. + 1.0 is full scale, 0.0 is silence, anything over 1.0 will amplify but potentially clip + + + + + WaveFormat of this WaveProvider + + + + + Read bytes from this WaveProvider + + Buffer to read into + Offset within buffer to read to + Bytes desired + Bytes read + + + + Converts 16 bit PCM to IEEE float, optionally adjusting volume along the way + + + + + Creates a new Wave16toFloatProvider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts IEEE float to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Creates a new WaveFloatTo16Provider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Buffered WaveProvider taking source data from WaveIn + + + + + Creates a new WaveInProvider + n.b. Should make sure the WaveFormat is set correctly on IWaveIn before calling + + The source of wave data + + + + Reads data from the WaveInProvider + + + + + The WaveFormat + + + + + Base class for creating a 16 bit wave provider + + + + + Initializes a new instance of the WaveProvider16 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider16 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a short array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Base class for creating a 32 bit floating point wave provider + Can also be used as a base class for an ISampleProvider that can + be plugged straight into anything requiring an IWaveProvider + + + + + Initializes a new instance of the WaveProvider32 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider32 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a float array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Utility class to intercept audio from an IWaveProvider and + save it to disk + + + + + Constructs a new WaveRecorder + + The location to write the WAV file to + The Source Wave Provider + + + + Read simply returns what the source returns, but writes to disk along the way + + + + + The WaveFormat + + + + + Closes the WAV file + + + + A read-only stream of AIFF data based on an aiff file + with an associated WaveFormat + originally contributed to NAudio by Giawa + + + + Supports opening a AIF file + The AIF is of similar nastiness to the WAV format. + This supports basic reading of uncompressed PCM AIF files, + with 8, 16, 24 and 32 bit PCM data. + + + + + Creates an Aiff File Reader based on an input stream + + The input stream containing a AIF file including header + + + + Ensures valid AIFF header and then finds data offset. + + The stream, positioned at the start of audio data + The format found + The position of the data chunk + The length of the data chunk + Additional chunks found + + + + Cleans up the resources associated with this AiffFileReader + + + + + + + + + + + + + + + Number of Samples (if possible to calculate) + + + + + Position in the AIFF file + + + + + + Reads bytes from the AIFF File + + + + + + AIFF Chunk + + + + + Chunk Name + + + + + Chunk Length + + + + + Chunk start + + + + + Creates a new AIFF Chunk + + + + + AudioFileReader simplifies opening an audio file in NAudio + Simply pass in the filename, and it will attempt to open the + file and set up a conversion path that turns into PCM IEEE float. + ACM codecs will be used for conversion. + It provides a volume property and implements both WaveStream and + ISampleProvider, making it possibly the only stage in your audio + pipeline necessary for simple playback scenarios + + + + + Initializes a new instance of AudioFileReader + + The file to open + + + + Creates the reader stream, supporting all filetypes in the core NAudio library, + and ensuring we are in PCM format + + File Name + + + + File Name + + + + + WaveFormat of this stream + + + + + Length of this stream (in bytes) + + + + + Position of this stream (in bytes) + + + + + Reads from this wave stream + + Audio buffer + Offset into buffer + Number of bytes required + Number of bytes read + + + + Reads audio from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Gets or Sets the Volume of this AudioFileReader. 1.0f is full volume + + + + + Helper to convert source to dest bytes + + + + + Helper to convert dest to source bytes + + + + + Disposes this AudioFileReader + + True if called from Dispose + + + + Helper stream that lets us read from compressed audio files with large block alignment + as though we could read any amount and reposition anywhere + + + + + Creates a new BlockAlignReductionStream + + the input stream + + + + Block alignment of this stream + + + + + Wave Format + + + + + Length of this Stream + + + + + Current position within stream + + + + + Disposes this WaveStream + + + + + Reads data from this stream + + + + + + + + + Implementation of Com IStream + + + + + Holds information on a cue: a labeled position within a Wave file + + + + + Cue position in samples + + + + + Label of the cue + + + + + Creates a Cue based on a sample position and label + + + + + + + Holds a list of cues + + + The specs for reading and writing cues from the cue and list RIFF chunks + are from http://www.sonicspot.com/guide/wavefiles.html and http://www.wotsit.org/ + ------------------------------ + The cues are stored like this: + ------------------------------ + struct CuePoint + { + Int32 dwIdentifier; + Int32 dwPosition; + Int32 fccChunk; + Int32 dwChunkStart; + Int32 dwBlockStart; + Int32 dwSampleOffset; + } + + struct CueChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwCuePoints; + CuePoint[] points; + } + ------------------------------ + Labels look like this: + ------------------------------ + struct ListHeader + { + Int32 listID; /* 'list' */ + Int32 chunkSize; /* includes the Type ID below */ + Int32 typeID; /* 'adtl' */ + } + + struct LabelChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwIdentifier; + Char[] dwText; /* Encoded with extended ASCII */ + } LabelChunk; + + + + + Creates an empty cue list + + + + + Adds an item to the list + + Cue + + + + Gets sample positions for the embedded cues + + Array containing the cue positions + + + + Gets labels for the embedded cues + + Array containing the labels + + + + Creates a cue list from the cue RIFF chunk and the list RIFF chunk + + The data contained in the cue chunk + The data contained in the list chunk + + + + Gets the cues as the concatenated cue and list RIFF chunks. + + RIFF chunks containing the cue data + + + + Number of cues + + + + + Accesses the cue at the specified index + + + + + + + Checks if the cue and list chunks exist and if so, creates a cue list + + + + + A wave file reader supporting cue reading + + + + + Loads a wavefile and supports reading cues + + + + + + Loads a wave from a stream and supports reading cues + + + + + + Cue List (can be null if cues not present) + + + + + An interface for WaveStreams which can report notification of individual samples + + + + + A sample has been detected + + + + + Sample event arguments + + + + + Left sample + + + + + Right sample + + + + + Constructor + + + + + Class for reading any file that Media Foundation can play + Will only work in Windows Vista and above + Automatically converts to PCM + If it is a video file with multiple audio streams, it will pick out the first audio stream + + + + + Allows customisation of this reader class + + + + + Sets up the default settings for MediaFoundationReader + + + + + Allows us to request IEEE float output (n.b. no guarantee this will be accepted) + + + + + If true, the reader object created in the constructor is used in Read + Should only be set to true if you are working entirely on an STA thread, or + entirely with MTA threads. + + + + + If true, the reposition does not happen immediately, but waits until the + next call to read to be processed. + + + + + Default constructor + + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename (can also be a URL e.g. http:// mms:// file://) + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename + Advanced settings + + + + Initializes + + + + + Creates the reader (overridable by ) + + + + + Reads from this wave stream + + Buffer to read into + Offset in buffer + Bytes required + Number of bytes read; 0 indicates end of stream + + + + WaveFormat of this stream (n.b. this is after converting to PCM) + + + + + The bytesRequired of this stream in bytes (n.b may not be accurate) + + + + + Current position within this stream + + + + + Cleans up after finishing with this reader + + true if called from Dispose + + + + WaveFormat has changed + + + + + Class for reading from MP3 files + + + + + The MP3 wave format (n.b. NOT the output format of this stream - see the WaveFormat property) + + + + Supports opening a MP3 file + + + Supports opening a MP3 file + MP3 File name + Factory method to build a frame decompressor + + + + Opens MP3 from a stream rather than a file + Will not dispose of this stream itself + + The incoming stream containing MP3 data + + + + Opens MP3 from a stream rather than a file + Will not dispose of this stream itself + + The incoming stream containing MP3 data + Factory method to build a frame decompressor + + + + Function that can create an MP3 Frame decompressor + + A WaveFormat object describing the MP3 file format + An MP3 Frame decompressor + + + + Creates an ACM MP3 Frame decompressor. This is the default with NAudio + + A WaveFormat object based + + + + + Gets the total length of this file in milliseconds. + + + + + ID3v2 tag if present + + + + + ID3v1 tag if present + + + + + Reads the next mp3 frame + + Next mp3 frame, or null if EOF + + + + Reads the next mp3 frame + + Next mp3 frame, or null if EOF + + + + This is the length in bytes of data available to be read out from the Read method + (i.e. the decompressed MP3 length) + n.b. this may return 0 for files whose length is unknown + + + + + + + + + + + + + + + Reads decompressed PCM data from our MP3 file. + + + + + Xing header if present + + + + + Disposes this WaveStream + + + + + WaveStream that simply passes on data from its source stream + (e.g. a MemoryStream) + + + + + Initialises a new instance of RawSourceWaveStream + + The source stream containing raw audio + The waveformat of the audio in the source stream + + + + Initialises a new instance of RawSourceWaveStream + + The buffer containing raw audio + Offset in the source buffer to read from + Number of bytes to read in the buffer + The waveformat of the audio in the source stream + + + + The WaveFormat of this stream + + + + + The length in bytes of this stream (if supported) + + + + + The current position in this stream + + + + + Reads data from the stream + + + + + Wave Stream for converting between sample rates + + + + + WaveStream to resample using the DMO Resampler + + Input Stream + Desired Output Format + + + + Stream Wave Format + + + + + Stream length in bytes + + + + + Stream position in bytes + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Dispose + + True if disposing (not from finalizer) + + + + Holds information about a RIFF file chunk + + + + + Creates a RiffChunk object + + + + + The chunk identifier + + + + + The chunk identifier converted to a string + + + + + The chunk length + + + + + The stream position this chunk is located at + + + + + A simple compressor + + + + + Create a new simple compressor stream + + Source stream + + + + Make-up Gain + + + + + Threshold + + + + + Ratio + + + + + Attack time + + + + + Release time + + + + + Turns gain on or off + + + + + Gets the WaveFormat of this stream + + + + + Reads bytes from this stream + + Buffer to read into + Offset in array to read into + Number of bytes to read + Number of bytes read + + + + MediaFoundationReader supporting reading from a stream + + + + + Constructs a new media foundation reader from a stream + + + + + Creates the reader + + + + + WaveStream that converts 32 bit audio back down to 16 bit, clipping if necessary + + + + + The method reuses the same buffer to prevent + unnecessary allocations. + + + + + Creates a new Wave32To16Stream + + the source stream + + + + Sets the volume for this stream. 1.0f is full scale + + + + + + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + Destination buffer + Offset into destination buffer + + Number of bytes read. + + + + Conversion to 16 bit and clipping + + + + + + + + + + Clip indicator. Can be reset. + + + + + Disposes this WaveStream + + + + + Represents Channel for the WaveMixerStream + 32 bit output and 16 bit input + It's output is always stereo + The input stream can be panned + + + + + Creates a new WaveChannel32 + + the source stream + stream volume (1 is 0dB) + pan control (-1 to 1) + + + + Creates a WaveChannel32 with default settings + + The source stream + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + If true, Read always returns the number of bytes requested + + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Pan of this channel (from -1 to 1) + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + Sample + + + + + Raise the sample event (no check for null because it has already been done) + + + + This class supports the reading of WAV files, + providing a repositionable WaveStream that returns the raw data + contained in the WAV file + + + + Supports opening a WAV file + The WAV file format is a real mess, but we will only + support the basic WAV file format which actually covers the vast + majority of WAV files out there. For more WAV file format information + visit www.wotsit.org. If you have a WAV file that can't be read by + this class, email it to the NAudio project and we will probably + fix this reader to support it + + + + + Creates a Wave File Reader based on an input stream + + The input stream containing a WAV file including header + + + + Gets a list of the additional chunks found in this file + + + + + Gets the data for the specified chunk + + + + + Cleans up the resources associated with this WaveFileReader + + + + + + + + + + This is the length of audio data contained in this WAV file, in bytes + (i.e. the byte length of the data chunk, not the length of the WAV file itself) + + + + + + Number of Sample Frames (if possible to calculate) + This currently does not take into account number of channels + Multiply number of channels if you want the total number of samples + + + + + Position in the WAV data chunk. + + + + + + Reads bytes from the Wave File + + + + + + Attempts to read the next sample or group of samples as floating point normalised into the range -1.0f to 1.0f + + An array of samples, 1 for mono, 2 for stereo etc. Null indicates end of file reached + + + + + Attempts to read a sample into a float. n.b. only applicable for uncompressed formats + Will normalise the value read into the range -1.0f to 1.0f if it comes from a PCM encoding + + False if the end of the WAV data chunk was reached + + + + IWaveProvider that passes through an ACM Codec + + + + + Create a new WaveFormat conversion stream + + Desired output format + Source Provider + + + + Gets the WaveFormat of this stream + + + + + Indicates that a reposition has taken place, and internal buffers should be reset + + + + + Reads bytes from this stream + + Buffer to read into + Offset in buffer to read into + Number of bytes to read + Number of bytes read + + + + Disposes this stream + + true if the user called this + + + + Disposes this resource + + + + + Finalizer + + + + + WaveStream that passes through an ACM Codec + + + + + Create a new WaveFormat conversion stream + + Desired output format + Source stream + + + + Creates a stream that can convert to PCM + + The source stream + A PCM stream + + + + Gets or sets the current position in the stream + + + + + Converts source bytes to destination bytes + + + + + Converts destination bytes to source bytes + + + + + Returns the stream length + + + + + Gets the WaveFormat of this stream + + + + + + + Buffer to read into + Offset within buffer to write to + Number of bytes to read + Bytes read + + + + Disposes this stream + + true if the user called this + + + + A buffer of Wave samples + + + + + creates a new wavebuffer + + WaveIn device to write to + Buffer size in bytes + + + + Place this buffer back to record more audio + + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + + Provides access to the actual record buffer (for reading only) + + + + + Indicates whether the Done flag is set on this buffer + + + + + Indicates whether the InQueue flag is set on this buffer + + + + + Number of bytes recorded + + + + + The buffer size in bytes + + + + + WaveStream that can mix together multiple 32 bit input streams + (Normally used with stereo input channels) + All channels must have the same number of inputs + + + + + Creates a new 32 bit WaveMixerStream + + + + + Creates a new 32 bit WaveMixerStream + + An Array of WaveStreams - must all have the same format. + Use WaveChannel is designed for this purpose. + Automatically stop when all inputs have been read + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove a WaveStream from the mixer + + waveStream to remove + + + + The number of inputs to this mixer + + + + + Automatically stop when all inputs have been read + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Length of this Wave Stream (in bytes) + + + + + + Position within this Wave Stream (in bytes) + + + + + + + + + + + Disposes this WaveStream + + + + + Simply shifts the input stream in time, optionally + clipping its start and end. + (n.b. may include looping in the future) + + + + + Creates a new WaveOffsetStream + + the source stream + the time at which we should start reading from the source stream + amount to trim off the front of the source stream + length of time to play from source stream + + + + Creates a WaveOffsetStream with default settings (no offset or pre-delay, + and whole length of source stream) + + The source stream + + + + The length of time before which no audio will be played + + + + + An offset into the source stream from which to start playing + + + + + Length of time to read from the source stream + + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + A buffer of Wave samples for streaming to a Wave Output device + + + + + creates a new wavebuffer + + WaveOut device to write to + Buffer size in bytes + Stream to provide more data + Lock to protect WaveOut API's from being called on >1 thread + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + this is called by the WAVE callback and should be used to refill the buffer + + + + Whether the header's in queue flag is set + + + + + The buffer size in bytes + + + + + Base class for all WaveStream classes. Derives from stream. + + + + + Retrieves the WaveFormat for this stream + + + + + We can read from this stream + + + + + We can seek within this stream + + + + + We can't write to this stream + + + + + Flush does not need to do anything + See + + + + + An alternative way of repositioning. + See + + + + + Sets the length of the WaveStream. Not Supported. + + + + + + Writes to the WaveStream. Not Supported. + + + + + The block alignment for this wavestream. Do not modify the Position + to anything that is not a whole multiple of this value + + + + + Moves forward or backwards the specified number of seconds in the stream + + Number of seconds to move, can be negative + + + + The current position in the stream in Time format + + + + + Total length in real-time of the stream (may be an estimate for compressed files) + + + + + Whether the WaveStream has non-zero sample data at the current position for the + specified count + + Number of bytes to read + + + + MP3 Frame decompressor using the Windows Media MP3 Decoder DMO object + + + + + Initializes a new instance of the DMO MP3 Frame decompressor + + + + + + Converted PCM WaveFormat + + + + + Decompress a single frame of MP3 + + + + + Alerts us that a reposition has occured so the MP3 decoder needs to reset its state + + + + + Dispose of this obejct and clean up resources + + + + + http://tech.ebu.ch/docs/tech/tech3306-2009.pdf + + + + + WaveFormat + + + + + Data Chunk Position + + + + + Data Chunk Length + + + + + Riff Chunks + + + + + Soundfont generator + + + + + Gets the generator type + + + + + Generator amount as an unsigned short + + + + + Generator amount as a signed short + + + + + Low byte amount + + + + + High byte amount + + + + + Instrument + + + + + Sample Header + + + + + + + + + + Generator types + + + + Start address offset + + + End address offset + + + Start loop address offset + + + End loop address offset + + + Start address coarse offset + + + Modulation LFO to pitch + + + Vibrato LFO to pitch + + + Modulation envelope to pitch + + + Initial filter cutoff frequency + + + Initial filter Q + + + Modulation LFO to filter Cutoff frequency + + + Modulation envelope to filter cutoff frequency + + + End address coarse offset + + + Modulation LFO to volume + + + Unused + + + Chorus effects send + + + Reverb effects send + + + Pan + + + Unused + + + Unused + + + Unused + + + Delay modulation LFO + + + Frequency modulation LFO + + + Delay vibrato LFO + + + Frequency vibrato LFO + + + Delay modulation envelope + + + Attack modulation envelope + + + Hold modulation envelope + + + Decay modulation envelope + + + Sustain modulation envelop + + + Release modulation envelope + + + Key number to modulation envelope hold + + + Key number to modulation envelope decay + + + Delay volume envelope + + + Attack volume envelope + + + Hold volume envelope + + + Decay volume envelope + + + Sustain volume envelope + + + Release volume envelope + + + Key number to volume envelope hold + + + Key number to volume envelope decay + + + Instrument + + + Reserved + + + Key range + + + Velocity range + + + Start loop address coarse offset + + + Key number + + + Velocity + + + Initial attenuation + + + Reserved + + + End loop address coarse offset + + + Coarse tune + + + Fine tune + + + Sample ID + + + Sample modes + + + Reserved + + + Scale tuning + + + Exclusive class + + + Overriding root key + + + Unused + + + Unused + + + + A soundfont info chunk + + + + + SoundFont Version + + + + + WaveTable sound engine + + + + + Bank name + + + + + Data ROM + + + + + Creation Date + + + + + Author + + + + + Target Product + + + + + Copyright + + + + + Comments + + + + + Tools + + + + + ROM Version + + + + + + + + + + SoundFont instrument + + + + + instrument name + + + + + Zones + + + + + + + + + + Instrument Builder + + + + + Transform Types + + + + + Linear + + + + + Modulator + + + + + Source Modulation data type + + + + + Destination generator type + + + + + Amount + + + + + Source Modulation Amount Type + + + + + Source Transform Type + + + + + + + + + + Controller Sources + + + + + No Controller + + + + + Note On Velocity + + + + + Note On Key Number + + + + + Poly Pressure + + + + + Channel Pressure + + + + + Pitch Wheel + + + + + Pitch Wheel Sensitivity + + + + + Source Types + + + + + Linear + + + + + Concave + + + + + Convex + + + + + Switch + + + + + Modulator Type + + + + + + + + + + + A SoundFont Preset + + + + + Preset name + + + + + Patch Number + + + + + Bank number + 0 - 127, GM percussion bank is 128 + + + + + Zones + + + + + + + + + + Class to read the SoundFont file presets chunk + + + + + The Presets contained in this chunk + + + + + The instruments contained in this chunk + + + + + The sample headers contained in this chunk + + + + + + + + + + just reads a chunk ID at the current position + + chunk ID + + + + reads a chunk at the current position + + + + + creates a new riffchunk from current position checking that we're not + at the end of this chunk first + + the new chunk + + + + useful for chunks that just contain a string + + chunk as string + + + + A SoundFont Sample Header + + + + + The sample name + + + + + Start offset + + + + + End offset + + + + + Start loop point + + + + + End loop point + + + + + Sample Rate + + + + + Original pitch + + + + + Pitch correction + + + + + Sample Link + + + + + SoundFont Sample Link Type + + + + + + + + + + SoundFont sample modes + + + + + No loop + + + + + Loop Continuously + + + + + Reserved no loop + + + + + Loop and continue + + + + + Sample Link Type + + + + + Mono Sample + + + + + Right Sample + + + + + Left Sample + + + + + Linked Sample + + + + + ROM Mono Sample + + + + + ROM Right Sample + + + + + ROM Left Sample + + + + + ROM Linked Sample + + + + + SoundFont Version Structure + + + + + Major Version + + + + + Minor Version + + + + + Builds a SoundFont version + + + + + Reads a SoundFont Version structure + + + + + Writes a SoundFont Version structure + + + + + Gets the length of this structure + + + + + Represents a SoundFont + + + + + Loads a SoundFont from a file + + Filename of the SoundFont + + + + Loads a SoundFont from a stream + + stream + + + + The File Info Chunk + + + + + The Presets + + + + + The Instruments + + + + + The Sample Headers + + + + + The Sample Data + + + + + + + + + + base class for structures that can read themselves + + + + + A SoundFont zone + + + + + + + + + + Modulators for this Zone + + + + + Generators for this Zone + + + + + Summary description for Fader. + + + + + Required designer variable. + + + + + Creates a new Fader control + + + + + Clean up any resources being used. + + + + + + + + + + + + + + + + + + + + + + + + + Minimum value of this fader + + + + + Maximum value of this fader + + + + + Current value of this fader + + + + + Fader orientation + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Pan slider control + + + + + Required designer variable. + + + + + True when pan value changed + + + + + Creates a new PanSlider control + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + + The current Pan setting + + + + + Control that represents a potentiometer + TODO list: + Optional Log scale + Optional reverse scale + Keyboard control + Optional bitmap mode + Optional complete draw mode + Tooltip support + + + + + Value changed event + + + + + Creates a new pot control + + + + + Minimum Value of the Pot + + + + + Maximum Value of the Pot + + + + + The current value of the pot + + + + + Draws the control + + + + + Handles the mouse down event to allow changing value by dragging + + + + + Handles the mouse up event to allow changing value by dragging + + + + + Handles the mouse down event to allow changing value by dragging + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Implements a rudimentary volume meter + + + + + Basic volume meter + + + + + On Fore Color Changed + + + + + Current Value + + + + + Minimum decibels + + + + + Maximum decibels + + + + + Meter orientation + + + + + Paints the volume meter + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + VolumeSlider control + + + + + Required designer variable. + + + + + Volume changed event + + + + + Creates a new VolumeSlider control + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + The volume for this control + + + + + Windows Forms control for painting audio waveforms + + + + + Constructs a new instance of the WaveFormPainter class + + + + + On Resize + + + + + On ForeColor Changed + + + + + + Add Max Value + + + + + + On Paint + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Control for viewing waveforms + + + + + Required designer variable. + + + + + Creates a new WaveViewer control + + + + + sets the associated wavestream + + + + + The zoom level, in samples per pixel + + + + + Start position (currently in bytes) + + + + + Clean up any resources being used. + + + + + + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Audio Subtype GUIDs + http://msdn.microsoft.com/en-us/library/windows/desktop/aa372553%28v=vs.85%29.aspx + + + + + Advanced Audio Coding (AAC). + + + + + Not used + + + + + Dolby AC-3 audio over Sony/Philips Digital Interface (S/PDIF). + + + + + Encrypted audio data used with secure audio path. + + + + + Digital Theater Systems (DTS) audio. + + + + + Uncompressed IEEE floating-point audio. + + + + + MPEG Audio Layer-3 (MP3). + + + + + MPEG-1 audio payload. + + + + + Windows Media Audio 9 Voice codec. + + + + + Uncompressed PCM audio. + + + + + Windows Media Audio 9 Professional codec over S/PDIF. + + + + + Windows Media Audio 9 Lossless codec or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 8 codec, Windows Media Audio 9 codec, or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 9 Professional codec or Windows Media Audio 9.1 Professional codec. + + + + + Dolby Digital (AC-3). + + + + + MPEG-4 and AAC Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + μ-law coding + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Adaptive delta pulse code modulation (ADPCM) + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Dolby Digital Plus formatted for HDMI output. + http://msdn.microsoft.com/en-us/library/windows/hardware/ff538392(v=vs.85).aspx + Reference : internet + + + + + MSAudio1 - unknown meaning + Reference : wmcodecdsp.h + + + + + IMA ADPCM ACM Wrapper + + + + + WMSP2 - unknown meaning + Reference: wmsdkidl.h + + + + + IMFActivate, defined in mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Creates the object associated with this activation object. + + + + + Shuts down the created object. + + + + + Detaches the created object from the activation object. + + + + + Provides a generic way to store key/value pairs on an object. + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms704598%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + IMFByteStream + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms698720%28v=vs.85%29.aspx + + + + + Retrieves the characteristics of the byte stream. + virtual HRESULT STDMETHODCALLTYPE GetCapabilities(/*[out]*/ __RPC__out DWORD *pdwCapabilities) = 0; + + + + + Retrieves the length of the stream. + virtual HRESULT STDMETHODCALLTYPE GetLength(/*[out]*/ __RPC__out QWORD *pqwLength) = 0; + + + + + Sets the length of the stream. + virtual HRESULT STDMETHODCALLTYPE SetLength(/*[in]*/ QWORD qwLength) = 0; + + + + + Retrieves the current read or write position in the stream. + virtual HRESULT STDMETHODCALLTYPE GetCurrentPosition(/*[out]*/ __RPC__out QWORD *pqwPosition) = 0; + + + + + Sets the current read or write position. + virtual HRESULT STDMETHODCALLTYPE SetCurrentPosition(/*[in]*/ QWORD qwPosition) = 0; + + + + + Queries whether the current position has reached the end of the stream. + virtual HRESULT STDMETHODCALLTYPE IsEndOfStream(/*[out]*/ __RPC__out BOOL *pfEndOfStream) = 0; + + + + + Reads data from the stream. + virtual HRESULT STDMETHODCALLTYPE Read(/*[size_is][out]*/ __RPC__out_ecount_full(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbRead) = 0; + + + + + Begins an asynchronous read operation from the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginRead(/*[out]*/ _Out_writes_bytes_(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous read operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndRead(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbRead) = 0; + + + + + Writes data to the stream. + virtual HRESULT STDMETHODCALLTYPE Write(/*[size_is][in]*/ __RPC__in_ecount_full(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbWritten) = 0; + + + + + Begins an asynchronous write operation to the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginWrite(/*[in]*/ _In_reads_bytes_(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous write operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndWrite(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbWritten) = 0; + + + + + Moves the current position in the stream by a specified offset. + virtual HRESULT STDMETHODCALLTYPE Seek(/*[in]*/ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, /*[in]*/ LONGLONG llSeekOffset, /*[in]*/ DWORD dwSeekFlags, /*[out]*/ __RPC__out QWORD *pqwCurrentPosition) = 0; + + + + + Clears any internal buffers used by the stream. + virtual HRESULT STDMETHODCALLTYPE Flush( void) = 0; + + + + + Closes the stream and releases any resources associated with the stream. + virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; + + + + + Represents a generic collection of IUnknown pointers. + + + + + Retrieves the number of objects in the collection. + + + + + Retrieves an object in the collection. + + + + + Adds an object to the collection. + + + + + Removes an object from the collection. + + + + + Removes an object from the collection. + + + + + Removes all items from the collection. + + + + + IMFMediaBuffer + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms696261%28v=vs.85%29.aspx + + + + + Gives the caller access to the memory in the buffer. + + + + + Unlocks a buffer that was previously locked. + + + + + Retrieves the length of the valid data in the buffer. + + + + + Sets the length of the valid data in the buffer. + + + + + Retrieves the allocated size of the buffer. + + + + + IMFMediaEvent - Represents an event generated by a Media Foundation object. Use this interface to get information about the event. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms702249%28v=vs.85%29.aspx + Mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the event type. + + + virtual HRESULT STDMETHODCALLTYPE GetType( + /* [out] */ __RPC__out MediaEventType *pmet) = 0; + + + + + Retrieves the extended type of the event. + + + virtual HRESULT STDMETHODCALLTYPE GetExtendedType( + /* [out] */ __RPC__out GUID *pguidExtendedType) = 0; + + + + + Retrieves an HRESULT that specifies the event status. + + + virtual HRESULT STDMETHODCALLTYPE GetStatus( + /* [out] */ __RPC__out HRESULT *phrStatus) = 0; + + + + + Retrieves the value associated with the event, if any. + + + virtual HRESULT STDMETHODCALLTYPE GetValue( + /* [out] */ __RPC__out PROPVARIANT *pvValue) = 0; + + + + + Represents a description of a media format. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms704850%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the major type of the format. + + + + + Queries whether the media type is a compressed format. + + + + + Compares two media types and determines whether they are identical. + + + + + Retrieves an alternative representation of the media type. + + + + + Frees memory that was allocated by the GetRepresentation method. + + + + + Creates an instance of either the sink writer or the source reader. + + + + + Creates an instance of the sink writer or source reader, given a URL. + + + + + Creates an instance of the sink writer or source reader, given an IUnknown pointer. + + + + + CLSID_MFReadWriteClassFactory + + + + + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms702192%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves flags associated with the sample. + + + + + Sets flags associated with the sample. + + + + + Retrieves the presentation time of the sample. + + + + + Sets the presentation time of the sample. + + + + + Retrieves the duration of the sample. + + + + + Sets the duration of the sample. + + + + + Retrieves the number of buffers in the sample. + + + + + Retrieves a buffer from the sample. + + + + + Converts a sample with multiple buffers into a sample with a single buffer. + + + + + Adds a buffer to the end of the list of buffers in the sample. + + + + + Removes a buffer at a specified index from the sample. + + + + + Removes all buffers from the sample. + + + + + Retrieves the total length of the valid data in all of the buffers in the sample. + + + + + Copies the sample data to a buffer. + + + + + Implemented by the Microsoft Media Foundation sink writer object. + + + + + Adds a stream to the sink writer. + + + + + Sets the input format for a stream on the sink writer. + + + + + Initializes the sink writer for writing. + + + + + Delivers a sample to the sink writer. + + + + + Indicates a gap in an input stream. + + + + + Places a marker in the specified stream. + + + + + Notifies the media sink that a stream has reached the end of a segment. + + + + + Flushes one or more streams. + + + + + (Finalize) Completes all writing operations on the sink writer. + + + + + Queries the underlying media sink or encoder for an interface. + + + + + Gets statistics about the performance of the sink writer. + + + + + IMFSourceReader interface + http://msdn.microsoft.com/en-us/library/windows/desktop/dd374655%28v=vs.85%29.aspx + + + + + Queries whether a stream is selected. + + + + + Selects or deselects one or more streams. + + + + + Gets a format that is supported natively by the media source. + + + + + Gets the current media type for a stream. + + + + + Sets the media type for a stream. + + + + + Seeks to a new position in the media source. + + + + + Reads the next sample from the media source. + + + + + Flushes one or more streams. + + + + + Queries the underlying media source or decoder for an interface. + + + + + Gets an attribute from the underlying media source. + + + + + Contains flags that indicate the status of the IMFSourceReader::ReadSample method + http://msdn.microsoft.com/en-us/library/windows/desktop/dd375773(v=vs.85).aspx + + + + + No Error + + + + + An error occurred. If you receive this flag, do not make any further calls to IMFSourceReader methods. + + + + + The source reader reached the end of the stream. + + + + + One or more new streams were created + + + + + The native format has changed for one or more streams. The native format is the format delivered by the media source before any decoders are inserted. + + + + + The current media has type changed for one or more streams. To get the current media type, call the IMFSourceReader::GetCurrentMediaType method. + + + + + There is a gap in the stream. This flag corresponds to an MEStreamTick event from the media source. + + + + + All transforms inserted by the application have been removed for a particular stream. + + + + + IMFTransform, defined in mftransform.h + + + + + Retrieves the minimum and maximum number of input and output streams. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamLimits( + /* [out] */ __RPC__out DWORD *pdwInputMinimum, + /* [out] */ __RPC__out DWORD *pdwInputMaximum, + /* [out] */ __RPC__out DWORD *pdwOutputMinimum, + /* [out] */ __RPC__out DWORD *pdwOutputMaximum) = 0; + + + + + Retrieves the current number of input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamCount( + /* [out] */ __RPC__out DWORD *pcInputStreams, + /* [out] */ __RPC__out DWORD *pcOutputStreams) = 0; + + + + + Retrieves the stream identifiers for the input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamIDs( + DWORD dwInputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwInputIDArraySize) DWORD *pdwInputIDs, + DWORD dwOutputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwOutputIDArraySize) DWORD *pdwOutputIDs) = 0; + + + + + Gets the buffer requirements and other information for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamInfo( + DWORD dwInputStreamID, + /* [out] */ __RPC__out MFT_INPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the buffer requirements and other information for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamInfo( + DWORD dwOutputStreamID, + /* [out] */ __RPC__out MFT_OUTPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the global attribute store for this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetAttributes( + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an input stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamAttributes( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamAttributes( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Removes an input stream from this MFT. + + + virtual HRESULT STDMETHODCALLTYPE DeleteInputStream( + DWORD dwStreamID) = 0; + + + + + Adds one or more new input streams to this MFT. + + + virtual HRESULT STDMETHODCALLTYPE AddInputStreams( + DWORD cStreams, + /* [in] */ __RPC__in DWORD *adwStreamIDs) = 0; + + + + + Gets an available media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputAvailableType( + DWORD dwInputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Retrieves an available media type for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputAvailableType( + DWORD dwOutputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Sets, tests, or clears the media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetInputType( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Sets, tests, or clears the media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetOutputType( + DWORD dwOutputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Gets the current media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputCurrentType( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Gets the current media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputCurrentType( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Queries whether an input stream on this Media Foundation transform (MFT) can accept more data. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStatus( + DWORD dwInputStreamID, + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Queries whether the Media Foundation transform (MFT) is ready to produce output data. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStatus( + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Sets the range of time stamps the client needs for output. + + + virtual HRESULT STDMETHODCALLTYPE SetOutputBounds( + LONGLONG hnsLowerBound, + LONGLONG hnsUpperBound) = 0; + + + + + Sends an event to an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessEvent( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaEvent *pEvent) = 0; + + + + + Sends a message to the Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessMessage( + MFT_MESSAGE_TYPE eMessage, + ULONG_PTR ulParam) = 0; + + + + + Delivers data to an input stream on this Media Foundation transform (MFT). + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessInput( + DWORD dwInputStreamID, + IMFSample *pSample, + DWORD dwFlags) = 0; + + + + + Generates output from the current input data. + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessOutput( + DWORD dwFlags, + DWORD cOutputBufferCount, + /* [size_is][out][in] */ MFT_OUTPUT_DATA_BUFFER *pOutputSamples, + /* [out] */ DWORD *pdwStatus) = 0; + + + + + See mfobjects.h + + + + + Unknown event type. + + + + + Signals a serious error. + + + + + Custom event type. + + + + + A non-fatal error occurred during streaming. + + + + + Session Unknown + + + + + Raised after the IMFMediaSession::SetTopology method completes asynchronously + + + + + Raised by the Media Session when the IMFMediaSession::ClearTopologies method completes asynchronously. + + + + + Raised when the IMFMediaSession::Start method completes asynchronously. + + + + + Raised when the IMFMediaSession::Pause method completes asynchronously. + + + + + Raised when the IMFMediaSession::Stop method completes asynchronously. + + + + + Raised when the IMFMediaSession::Close method completes asynchronously. + + + + + Raised by the Media Session when it has finished playing the last presentation in the playback queue. + + + + + Raised by the Media Session when the playback rate changes. + + + + + Raised by the Media Session when it completes a scrubbing request. + + + + + Raised by the Media Session when the session capabilities change. + + + + + Raised by the Media Session when the status of a topology changes. + + + + + Raised by the Media Session when a new presentation starts. + + + + + Raised by a media source a new presentation is ready. + + + + + License acquisition is about to begin. + + + + + License acquisition is complete. + + + + + Individualization is about to begin. + + + + + Individualization is complete. + + + + + Signals the progress of a content enabler object. + + + + + A content enabler object's action is complete. + + + + + Raised by a trusted output if an error occurs while enforcing the output policy. + + + + + Contains status information about the enforcement of an output policy. + + + + + A media source started to buffer data. + + + + + A media source stopped buffering data. + + + + + The network source started opening a URL. + + + + + The network source finished opening a URL. + + + + + Raised by a media source at the start of a reconnection attempt. + + + + + Raised by a media source at the end of a reconnection attempt. + + + + + Raised by the enhanced video renderer (EVR) when it receives a user event from the presenter. + + + + + Raised by the Media Session when the format changes on a media sink. + + + + + Source Unknown + + + + + Raised when a media source starts without seeking. + + + + + Raised by a media stream when the source starts without seeking. + + + + + Raised when a media source seeks to a new position. + + + + + Raised by a media stream after a call to IMFMediaSource::Start causes a seek in the stream. + + + + + Raised by a media source when it starts a new stream. + + + + + Raised by a media source when it restarts or seeks a stream that is already active. + + + + + Raised by a media source when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media source when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media source when a presentation ends. + + + + + Raised by a media stream when the stream ends. + + + + + Raised when a media stream delivers a new sample. + + + + + Signals that a media stream does not have data available at a specified time. + + + + + Raised by a media stream when it starts or stops thinning the stream. + + + + + Raised by a media stream when the media type of the stream changes. + + + + + Raised by a media source when the playback rate changes. + + + + + Raised by the sequencer source when a segment is completed and is followed by another segment. + + + + + Raised by a media source when the source's characteristics change. + + + + + Raised by a media source to request a new playback rate. + + + + + Raised by a media source when it updates its metadata. + + + + + Raised by the sequencer source when the IMFSequencerSource::UpdateTopology method completes asynchronously. + + + + + Sink Unknown + + + + + Raised by a stream sink when it completes the transition to the running state. + + + + + Raised by a stream sink when it completes the transition to the stopped state. + + + + + Raised by a stream sink when it completes the transition to the paused state. + + + + + Raised by a stream sink when the rate has changed. + + + + + Raised by a stream sink to request a new media sample from the pipeline. + + + + + Raised by a stream sink after the IMFStreamSink::PlaceMarker method is called. + + + + + Raised by a stream sink when the stream has received enough preroll data to begin rendering. + + + + + Raised by a stream sink when it completes a scrubbing request. + + + + + Raised by a stream sink when the sink's media type is no longer valid. + + + + + Raised by the stream sinks of the EVR if the video device changes. + + + + + Provides feedback about playback quality to the quality manager. + + + + + Raised when a media sink becomes invalid. + + + + + The audio session display name changed. + + + + + The volume or mute state of the audio session changed + + + + + The audio device was removed. + + + + + The Windows audio server system was shut down. + + + + + The grouping parameters changed for the audio session. + + + + + The audio session icon changed. + + + + + The default audio format for the audio device changed. + + + + + The audio session was disconnected from a Windows Terminal Services session + + + + + The audio session was preempted by an exclusive-mode connection. + + + + + Trust Unknown + + + + + The output policy for a stream changed. + + + + + Content protection message + + + + + The IMFOutputTrustAuthority::SetPolicy method completed. + + + + + DRM License Backup Completed + + + + + DRM License Backup Progress + + + + + DRM License Restore Completed + + + + + DRM License Restore Progress + + + + + DRM License Acquisition Completed + + + + + DRM Individualization Completed + + + + + DRM Individualization Progress + + + + + DRM Proximity Completed + + + + + DRM License Store Cleaned + + + + + DRM Revocation Download Completed + + + + + Transform Unknown + + + + + Sent by an asynchronous MFT to request a new input sample. + + + + + Sent by an asynchronous MFT when new output data is available from the MFT. + + + + + Sent by an asynchronous Media Foundation transform (MFT) when a drain operation is complete. + + + + + Sent by an asynchronous MFT in response to an MFT_MESSAGE_COMMAND_MARKER message. + + + + + Media Foundation attribute guids + http://msdn.microsoft.com/en-us/library/windows/desktop/ms696989%28v=vs.85%29.aspx + + + + + Specifies whether an MFT performs asynchronous processing. + + + + + Enables the use of an asynchronous MFT. + + + + + Contains flags for an MFT activation object. + + + + + Specifies the category for an MFT. + + + + + Contains the class identifier (CLSID) of an MFT. + + + + + Contains the registered input types for a Media Foundation transform (MFT). + + + + + Contains the registered output types for a Media Foundation transform (MFT). + + + + + Contains the symbolic link for a hardware-based MFT. + + + + + Contains the display name for a hardware-based MFT. + + + + + Contains a pointer to the stream attributes of the connected stream on a hardware-based MFT. + + + + + Specifies whether a hardware-based MFT is connected to another hardware-based MFT. + + + + + Specifies the preferred output format for an encoder. + + + + + Specifies whether an MFT is registered only in the application's process. + + + + + Contains configuration properties for an encoder. + + + + + Specifies whether a hardware device source uses the system time for time stamps. + + + + + Contains an IMFFieldOfUseMFTUnlock pointer, which can be used to unlock the MFT. + + + + + Contains the merit value of a hardware codec. + + + + + Specifies whether a decoder is optimized for transcoding rather than for playback. + + + + + Contains a pointer to the proxy object for the application's presentation descriptor. + + + + + Contains a pointer to the presentation descriptor from the protected media path (PMP). + + + + + Specifies the duration of a presentation, in 100-nanosecond units. + + + + + Specifies the total size of the source file, in bytes. + + + + + Specifies the audio encoding bit rate for the presentation, in bits per second. + + + + + Specifies the video encoding bit rate for the presentation, in bits per second. + + + + + Specifies the MIME type of the content. + + + + + Specifies when a presentation was last modified. + + + + + The identifier of the playlist element in the presentation. + + + + + Contains the preferred RFC 1766 language of the media source. + + + + + The time at which the presentation must begin, relative to the start of the media source. + + + + + Specifies whether the audio streams in the presentation have a variable bit rate. + + + + + Media type Major Type + + + + + Media Type subtype + + + + + Audio block alignment + + + + + Audio average bytes per second + + + + + Audio number of channels + + + + + Audio samples per second + + + + + Audio bits per sample + + + + + Enables the source reader or sink writer to use hardware-based Media Foundation transforms (MFTs). + + + + + Contains additional format data for a media type. + + + + + Specifies for a media type whether each sample is independent of the other samples in the stream. + + + + + Specifies for a media type whether the samples have a fixed size. + + + + + Contains a DirectShow format GUID for a media type. + + + + + Specifies the preferred legacy format structure to use when converting an audio media type. + + + + + Specifies for a media type whether the media data is compressed. + + + + + Approximate data rate of the video stream, in bits per second, for a video media type. + + + + + Specifies the payload type of an Advanced Audio Coding (AAC) stream. + 0 - The stream contains raw_data_block elements only + 1 - Audio Data Transport Stream (ADTS). The stream contains an adts_sequence, as defined by MPEG-2. + 2 - Audio Data Interchange Format (ADIF). The stream contains an adif_sequence, as defined by MPEG-2. + 3 - The stream contains an MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + + + + + Specifies the audio profile and level of an Advanced Audio Coding (AAC) stream, as defined by ISO/IEC 14496-3. + + + + + Media Foundation Errors + + + + RANGES + 14000 - 14999 = General Media Foundation errors + 15000 - 15999 = ASF parsing errors + 16000 - 16999 = Media Source errors + 17000 - 17999 = MEDIAFOUNDATION Network Error Events + 18000 - 18999 = MEDIAFOUNDATION WMContainer Error Events + 19000 - 19999 = MEDIAFOUNDATION Media Sink Error Events + 20000 - 20999 = Renderer errors + 21000 - 21999 = Topology Errors + 25000 - 25999 = Timeline Errors + 26000 - 26999 = Unused + 28000 - 28999 = Transform errors + 29000 - 29999 = Content Protection errors + 40000 - 40999 = Clock errors + 41000 - 41999 = MF Quality Management Errors + 42000 - 42999 = MF Transcode API Errors + + + + + MessageId: MF_E_PLATFORM_NOT_INITIALIZED + + MessageText: + + Platform not initialized. Please call MFStartup().%0 + + + + + MessageId: MF_E_BUFFERTOOSMALL + + MessageText: + + The buffer was too small to carry out the requested action.%0 + + + + + MessageId: MF_E_INVALIDREQUEST + + MessageText: + + The request is invalid in the current state.%0 + + + + + MessageId: MF_E_INVALIDSTREAMNUMBER + + MessageText: + + The stream number provided was invalid.%0 + + + + + MessageId: MF_E_INVALIDMEDIATYPE + + MessageText: + + The data specified for the media type is invalid, inconsistent, or not supported by this object.%0 + + + + + MessageId: MF_E_NOTACCEPTING + + MessageText: + + The callee is currently not accepting further input.%0 + + + + + MessageId: MF_E_NOT_INITIALIZED + + MessageText: + + This object needs to be initialized before the requested operation can be carried out.%0 + + + + + MessageId: MF_E_UNSUPPORTED_REPRESENTATION + + MessageText: + + The requested representation is not supported by this object.%0 + + + + + MessageId: MF_E_NO_MORE_TYPES + + MessageText: + + An object ran out of media types to suggest therefore the requested chain of streaming objects cannot be completed.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SERVICE + + MessageText: + + The object does not support the specified service.%0 + + + + + MessageId: MF_E_UNEXPECTED + + MessageText: + + An unexpected error has occurred in the operation requested.%0 + + + + + MessageId: MF_E_INVALIDNAME + + MessageText: + + Invalid name.%0 + + + + + MessageId: MF_E_INVALIDTYPE + + MessageText: + + Invalid type.%0 + + + + + MessageId: MF_E_INVALID_FILE_FORMAT + + MessageText: + + The file does not conform to the relevant file format specification. + + + + + MessageId: MF_E_INVALIDINDEX + + MessageText: + + Invalid index.%0 + + + + + MessageId: MF_E_INVALID_TIMESTAMP + + MessageText: + + An invalid timestamp was given.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SCHEME + + MessageText: + + The scheme of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_BYTESTREAM_TYPE + + MessageText: + + The byte stream type of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_TIME_FORMAT + + MessageText: + + The given time format is unsupported.%0 + + + + + MessageId: MF_E_NO_SAMPLE_TIMESTAMP + + MessageText: + + The Media Sample does not have a timestamp.%0 + + + + + MessageId: MF_E_NO_SAMPLE_DURATION + + MessageText: + + The Media Sample does not have a duration.%0 + + + + + MessageId: MF_E_INVALID_STREAM_DATA + + MessageText: + + The request failed because the data in the stream is corrupt.%0\n. + + + + + MessageId: MF_E_RT_UNAVAILABLE + + MessageText: + + Real time services are not available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE + + MessageText: + + The specified rate is not supported.%0 + + + + + MessageId: MF_E_THINNING_UNSUPPORTED + + MessageText: + + This component does not support stream-thinning.%0 + + + + + MessageId: MF_E_REVERSE_UNSUPPORTED + + MessageText: + + The call failed because no reverse playback rates are available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE_TRANSITION + + MessageText: + + The requested rate transition cannot occur in the current state.%0 + + + + + MessageId: MF_E_RATE_CHANGE_PREEMPTED + + MessageText: + + The requested rate change has been pre-empted and will not occur.%0 + + + + + MessageId: MF_E_NOT_FOUND + + MessageText: + + The specified object or value does not exist.%0 + + + + + MessageId: MF_E_NOT_AVAILABLE + + MessageText: + + The requested value is not available.%0 + + + + + MessageId: MF_E_NO_CLOCK + + MessageText: + + The specified operation requires a clock and no clock is available.%0 + + + + + MessageId: MF_S_MULTIPLE_BEGIN + + MessageText: + + This callback and state had already been passed in to this event generator earlier.%0 + + + + + MessageId: MF_E_MULTIPLE_BEGIN + + MessageText: + + This callback has already been passed in to this event generator.%0 + + + + + MessageId: MF_E_MULTIPLE_SUBSCRIBERS + + MessageText: + + Some component is already listening to events on this event generator.%0 + + + + + MessageId: MF_E_TIMER_ORPHANED + + MessageText: + + This timer was orphaned before its callback time arrived.%0 + + + + + MessageId: MF_E_STATE_TRANSITION_PENDING + + MessageText: + + A state transition is already pending.%0 + + + + + MessageId: MF_E_UNSUPPORTED_STATE_TRANSITION + + MessageText: + + The requested state transition is unsupported.%0 + + + + + MessageId: MF_E_UNRECOVERABLE_ERROR_OCCURRED + + MessageText: + + An unrecoverable error has occurred.%0 + + + + + MessageId: MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS + + MessageText: + + The provided sample has too many buffers.%0 + + + + + MessageId: MF_E_SAMPLE_NOT_WRITABLE + + MessageText: + + The provided sample is not writable.%0 + + + + + MessageId: MF_E_INVALID_KEY + + MessageText: + + The specified key is not valid. + + + + + MessageId: MF_E_BAD_STARTUP_VERSION + + MessageText: + + You are calling MFStartup with the wrong MF_VERSION. Mismatched bits? + + + + + MessageId: MF_E_UNSUPPORTED_CAPTION + + MessageText: + + The caption of the given URL is unsupported.%0 + + + + + MessageId: MF_E_INVALID_POSITION + + MessageText: + + The operation on the current offset is not permitted.%0 + + + + + MessageId: MF_E_ATTRIBUTENOTFOUND + + MessageText: + + The requested attribute was not found.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_ALLOWED + + MessageText: + + The specified property type is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_SUPPORTED + + MessageText: + + The specified property type is not supported.%0 + + + + + MessageId: MF_E_PROPERTY_EMPTY + + MessageText: + + The specified property is empty.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_EMPTY + + MessageText: + + The specified property is not empty.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_NOT_ALLOWED + + MessageText: + + The vector property specified is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_REQUIRED + + MessageText: + + A vector property is required in this context.%0 + + + + + MessageId: MF_E_OPERATION_CANCELLED + + MessageText: + + The operation is cancelled.%0 + + + + + MessageId: MF_E_BYTESTREAM_NOT_SEEKABLE + + MessageText: + + The provided bytestream was expected to be seekable and it is not.%0 + + + + + MessageId: MF_E_DISABLED_IN_SAFEMODE + + MessageText: + + The Media Foundation platform is disabled when the system is running in Safe Mode.%0 + + + + + MessageId: MF_E_CANNOT_PARSE_BYTESTREAM + + MessageText: + + The Media Source could not parse the byte stream.%0 + + + + + MessageId: MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS + + MessageText: + + Mutually exclusive flags have been specified to source resolver. This flag combination is invalid.%0 + + + + + MessageId: MF_E_MEDIAPROC_WRONGSTATE + + MessageText: + + MediaProc is in the wrong state%0 + + + + + MessageId: MF_E_RT_THROUGHPUT_NOT_AVAILABLE + + MessageText: + + Real time I/O service can not provide requested throughput.%0 + + + + + MessageId: MF_E_RT_TOO_MANY_CLASSES + + MessageText: + + The workqueue cannot be registered with more classes.%0 + + + + + MessageId: MF_E_RT_WOULDBLOCK + + MessageText: + + This operation cannot succeed because another thread owns this object.%0 + + + + + MessageId: MF_E_NO_BITPUMP + + MessageText: + + Internal. Bitpump not found.%0 + + + + + MessageId: MF_E_RT_OUTOFMEMORY + + MessageText: + + No more RT memory available.%0 + + + + + MessageId: MF_E_RT_WORKQUEUE_CLASS_NOT_SPECIFIED + + MessageText: + + An MMCSS class has not been set for this work queue.%0 + + + + + MessageId: MF_E_INSUFFICIENT_BUFFER + + MessageText: + + Insufficient memory for response.%0 + + + + + MessageId: MF_E_CANNOT_CREATE_SINK + + MessageText: + + Activate failed to create mediasink. Call OutputNode::GetUINT32(MF_TOPONODE_MAJORTYPE) for more information. %0 + + + + + MessageId: MF_E_BYTESTREAM_UNKNOWN_LENGTH + + MessageText: + + The length of the provided bytestream is unknown.%0 + + + + + MessageId: MF_E_SESSION_PAUSEWHILESTOPPED + + MessageText: + + The media session cannot pause from a stopped state.%0 + + + + + MessageId: MF_S_ACTIVATE_REPLACED + + MessageText: + + The activate could not be created in the remote process for some reason it was replaced with empty one.%0 + + + + + MessageId: MF_E_FORMAT_CHANGE_NOT_SUPPORTED + + MessageText: + + The data specified for the media type is supported, but would require a format change, which is not supported by this object.%0 + + + + + MessageId: MF_E_INVALID_WORKQUEUE + + MessageText: + + The operation failed because an invalid combination of workqueue ID and flags was specified.%0 + + + + + MessageId: MF_E_DRM_UNSUPPORTED + + MessageText: + + No DRM support is available.%0 + + + + + MessageId: MF_E_UNAUTHORIZED + + MessageText: + + This operation is not authorized.%0 + + + + + MessageId: MF_E_OUT_OF_RANGE + + MessageText: + + The value is not in the specified or valid range.%0 + + + + + MessageId: MF_E_INVALID_CODEC_MERIT + + MessageText: + + The registered codec merit is not valid.%0 + + + + + MessageId: MF_E_HW_MFT_FAILED_START_STREAMING + + MessageText: + + Hardware MFT failed to start streaming due to lack of hardware resources.%0 + + + + + MessageId: MF_S_ASF_PARSEINPROGRESS + + MessageText: + + Parsing is still in progress and is not yet complete.%0 + + + + + MessageId: MF_E_ASF_PARSINGINCOMPLETE + + MessageText: + + Not enough data have been parsed to carry out the requested action.%0 + + + + + MessageId: MF_E_ASF_MISSINGDATA + + MessageText: + + There is a gap in the ASF data provided.%0 + + + + + MessageId: MF_E_ASF_INVALIDDATA + + MessageText: + + The data provided are not valid ASF.%0 + + + + + MessageId: MF_E_ASF_OPAQUEPACKET + + MessageText: + + The packet is opaque, so the requested information cannot be returned.%0 + + + + + MessageId: MF_E_ASF_NOINDEX + + MessageText: + + The requested operation failed since there is no appropriate ASF index.%0 + + + + + MessageId: MF_E_ASF_OUTOFRANGE + + MessageText: + + The value supplied is out of range for this operation.%0 + + + + + MessageId: MF_E_ASF_INDEXNOTLOADED + + MessageText: + + The index entry requested needs to be loaded before it can be available.%0 + + + + + MessageId: MF_E_ASF_TOO_MANY_PAYLOADS + + MessageText: + + The packet has reached the maximum number of payloads.%0 + + + + + MessageId: MF_E_ASF_UNSUPPORTED_STREAM_TYPE + + MessageText: + + Stream type is not supported.%0 + + + + + MessageId: MF_E_ASF_DROPPED_PACKET + + MessageText: + + One or more ASF packets were dropped.%0 + + + + + MessageId: MF_E_NO_EVENTS_AVAILABLE + + MessageText: + + There are no events available in the queue.%0 + + + + + MessageId: MF_E_INVALID_STATE_TRANSITION + + MessageText: + + A media source cannot go from the stopped state to the paused state.%0 + + + + + MessageId: MF_E_END_OF_STREAM + + MessageText: + + The media stream cannot process any more samples because there are no more samples in the stream.%0 + + + + + MessageId: MF_E_SHUTDOWN + + MessageText: + + The request is invalid because Shutdown() has been called.%0 + + + + + MessageId: MF_E_MP3_NOTFOUND + + MessageText: + + The MP3 object was not found.%0 + + + + + MessageId: MF_E_MP3_OUTOFDATA + + MessageText: + + The MP3 parser ran out of data before finding the MP3 object.%0 + + + + + MessageId: MF_E_MP3_NOTMP3 + + MessageText: + + The file is not really a MP3 file.%0 + + + + + MessageId: MF_E_MP3_NOTSUPPORTED + + MessageText: + + The MP3 file is not supported.%0 + + + + + MessageId: MF_E_NO_DURATION + + MessageText: + + The Media stream has no duration.%0 + + + + + MessageId: MF_E_INVALID_FORMAT + + MessageText: + + The Media format is recognized but is invalid.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_FOUND + + MessageText: + + The property requested was not found.%0 + + + + + MessageId: MF_E_PROPERTY_READ_ONLY + + MessageText: + + The property is read only.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_ALLOWED + + MessageText: + + The specified property is not allowed in this context.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NOT_STARTED + + MessageText: + + The media source is not started.%0 + + + + + MessageId: MF_E_UNSUPPORTED_FORMAT + + MessageText: + + The Media format is recognized but not supported.%0 + + + + + MessageId: MF_E_MP3_BAD_CRC + + MessageText: + + The MPEG frame has bad CRC.%0 + + + + + MessageId: MF_E_NOT_PROTECTED + + MessageText: + + The file is not protected.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_WRONGSTATE + + MessageText: + + The media source is in the wrong state%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED + + MessageText: + + No streams are selected in source presentation descriptor.%0 + + + + + MessageId: MF_E_CANNOT_FIND_KEYFRAME_SAMPLE + + MessageText: + + No key frame sample was found.%0 + + + + + MessageId: MF_E_NETWORK_RESOURCE_FAILURE + + MessageText: + + An attempt to acquire a network resource failed.%0 + + + + + MessageId: MF_E_NET_WRITE + + MessageText: + + Error writing to the network.%0 + + + + + MessageId: MF_E_NET_READ + + MessageText: + + Error reading from the network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_NETWORK + + MessageText: + + Internal. Entry cannot complete operation without network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_ASYNC + + MessageText: + + Internal. Async op is required.%0 + + + + + MessageId: MF_E_NET_BWLEVEL_NOT_SUPPORTED + + MessageText: + + Internal. Bandwidth levels are not supported.%0 + + + + + MessageId: MF_E_NET_STREAMGROUPS_NOT_SUPPORTED + + MessageText: + + Internal. Stream groups are not supported.%0 + + + + + MessageId: MF_E_NET_MANUALSS_NOT_SUPPORTED + + MessageText: + + Manual stream selection is not supported.%0 + + + + + MessageId: MF_E_NET_INVALID_PRESENTATION_DESCRIPTOR + + MessageText: + + Invalid presentation descriptor.%0 + + + + + MessageId: MF_E_NET_CACHESTREAM_NOT_FOUND + + MessageText: + + Cannot find cache stream.%0 + + + + + MessageId: MF_I_MANUAL_PROXY + + MessageText: + + The proxy setting is manual.%0 + + + + duplicate removed + MessageId=17011 Severity=Informational Facility=MEDIAFOUNDATION SymbolicName=MF_E_INVALID_REQUEST + Language=English + The request is invalid in the current state.%0 + . + + MessageId: MF_E_NET_REQUIRE_INPUT + + MessageText: + + Internal. Entry cannot complete operation without input.%0 + + + + + MessageId: MF_E_NET_REDIRECT + + MessageText: + + The client redirected to another server.%0 + + + + + MessageId: MF_E_NET_REDIRECT_TO_PROXY + + MessageText: + + The client is redirected to a proxy server.%0 + + + + + MessageId: MF_E_NET_TOO_MANY_REDIRECTS + + MessageText: + + The client reached maximum redirection limit.%0 + + + + + MessageId: MF_E_NET_TIMEOUT + + MessageText: + + The server, a computer set up to offer multimedia content to other computers, could not handle your request for multimedia content in a timely manner. Please try again later.%0 + + + + + MessageId: MF_E_NET_CLIENT_CLOSE + + MessageText: + + The control socket is closed by the client.%0 + + + + + MessageId: MF_E_NET_BAD_CONTROL_DATA + + MessageText: + + The server received invalid data from the client on the control connection.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_SERVER + + MessageText: + + The server is not a compatible streaming media server.%0 + + + + + MessageId: MF_E_NET_UNSAFE_URL + + MessageText: + + Url.%0 + + + + + MessageId: MF_E_NET_CACHE_NO_DATA + + MessageText: + + Data is not available.%0 + + + + + MessageId: MF_E_NET_EOL + + MessageText: + + End of line.%0 + + + + + MessageId: MF_E_NET_BAD_REQUEST + + MessageText: + + The request could not be understood by the server.%0 + + + + + MessageId: MF_E_NET_INTERNAL_SERVER_ERROR + + MessageText: + + The server encountered an unexpected condition which prevented it from fulfilling the request.%0 + + + + + MessageId: MF_E_NET_SESSION_NOT_FOUND + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_NET_NOCONNECTION + + MessageText: + + There is no connection established with the Windows Media server. The operation failed.%0 + + + + + MessageId: MF_E_NET_CONNECTION_FAILURE + + MessageText: + + The network connection has failed.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_PUSHSERVER + + MessageText: + + The Server service that received the HTTP push request is not a compatible version of Windows Media Services (WMS). This error may indicate the push request was received by IIS instead of WMS. Ensure WMS is started and has the HTTP Server control protocol properly enabled and try again.%0 + + + + + MessageId: MF_E_NET_SERVER_ACCESSDENIED + + MessageText: + + The Windows Media server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_PROXY_ACCESSDENIED + + MessageText: + + The proxy server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_CANNOTCONNECT + + MessageText: + + Unable to establish a connection to the server.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_TEMPLATE + + MessageText: + + The specified push template is invalid.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_PUBLISHING_POINT + + MessageText: + + The specified push publishing point is invalid.%0 + + + + + MessageId: MF_E_NET_BUSY + + MessageText: + + The requested resource is in use.%0 + + + + + MessageId: MF_E_NET_RESOURCE_GONE + + MessageText: + + The Publishing Point or file on the Windows Media Server is no longer available.%0 + + + + + MessageId: MF_E_NET_ERROR_FROM_PROXY + + MessageText: + + The proxy experienced an error while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_PROXY_TIMEOUT + + MessageText: + + The proxy did not receive a timely response while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_SERVER_UNAVAILABLE + + MessageText: + + The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.%0 + + + + + MessageId: MF_E_NET_TOO_MUCH_DATA + + MessageText: + + The encoding process was unable to keep up with the amount of supplied data.%0 + + + + + MessageId: MF_E_NET_SESSION_INVALID + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_OFFLINE_MODE + + MessageText: + + The requested URL is not available in offline mode.%0 + + + + + MessageId: MF_E_NET_UDP_BLOCKED + + MessageText: + + A device in the network is blocking UDP traffic.%0 + + + + + MessageId: MF_E_NET_UNSUPPORTED_CONFIGURATION + + MessageText: + + The specified configuration value is not supported.%0 + + + + + MessageId: MF_E_NET_PROTOCOL_DISABLED + + MessageText: + + The networking protocol is disabled.%0 + + + + + MessageId: MF_E_ALREADY_INITIALIZED + + MessageText: + + This object has already been initialized and cannot be re-initialized at this time.%0 + + + + + MessageId: MF_E_BANDWIDTH_OVERRUN + + MessageText: + + The amount of data passed in exceeds the given bitrate and buffer window.%0 + + + + + MessageId: MF_E_LATE_SAMPLE + + MessageText: + + The sample was passed in too late to be correctly processed.%0 + + + + + MessageId: MF_E_FLUSH_NEEDED + + MessageText: + + The requested action cannot be carried out until the object is flushed and the queue is emptied.%0 + + + + + MessageId: MF_E_INVALID_PROFILE + + MessageText: + + The profile is invalid.%0 + + + + + MessageId: MF_E_INDEX_NOT_COMMITTED + + MessageText: + + The index that is being generated needs to be committed before the requested action can be carried out.%0 + + + + + MessageId: MF_E_NO_INDEX + + MessageText: + + The index that is necessary for the requested action is not found.%0 + + + + + MessageId: MF_E_CANNOT_INDEX_IN_PLACE + + MessageText: + + The requested index cannot be added in-place to the specified ASF content.%0 + + + + + MessageId: MF_E_MISSING_ASF_LEAKYBUCKET + + MessageText: + + The ASF leaky bucket parameters must be specified in order to carry out this request.%0 + + + + + MessageId: MF_E_INVALID_ASF_STREAMID + + MessageText: + + The stream id is invalid. The valid range for ASF stream id is from 1 to 127.%0 + + + + + MessageId: MF_E_STREAMSINK_REMOVED + + MessageText: + + The requested Stream Sink has been removed and cannot be used.%0 + + + + + MessageId: MF_E_STREAMSINKS_OUT_OF_SYNC + + MessageText: + + The various Stream Sinks in this Media Sink are too far out of sync for the requested action to take place.%0 + + + + + MessageId: MF_E_STREAMSINKS_FIXED + + MessageText: + + Stream Sinks cannot be added to or removed from this Media Sink because its set of streams is fixed.%0 + + + + + MessageId: MF_E_STREAMSINK_EXISTS + + MessageText: + + The given Stream Sink already exists.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_CANCELED + + MessageText: + + Sample allocations have been canceled.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_EMPTY + + MessageText: + + The sample allocator is currently empty, due to outstanding requests.%0 + + + + + MessageId: MF_E_SINK_ALREADYSTOPPED + + MessageText: + + When we try to sopt a stream sink, it is already stopped %0 + + + + + MessageId: MF_E_ASF_FILESINK_BITRATE_UNKNOWN + + MessageText: + + The ASF file sink could not reserve AVIO because the bitrate is unknown.%0 + + + + + MessageId: MF_E_SINK_NO_STREAMS + + MessageText: + + No streams are selected in sink presentation descriptor.%0 + + + + + MessageId: MF_S_SINK_NOT_FINALIZED + + MessageText: + + The sink has not been finalized before shut down. This may cause sink generate a corrupted content.%0 + + + + + MessageId: MF_E_METADATA_TOO_LONG + + MessageText: + + A metadata item was too long to write to the output container.%0 + + + + + MessageId: MF_E_SINK_NO_SAMPLES_PROCESSED + + MessageText: + + The operation failed because no samples were processed by the sink.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_PROCAMP_HW + + MessageText: + + There is no available procamp hardware with which to perform color correction.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_DEINTERLACE_HW + + MessageText: + + There is no available deinterlacing hardware with which to deinterlace the video stream.%0 + + + + + MessageId: MF_E_VIDEO_REN_COPYPROT_FAILED + + MessageText: + + A video stream requires copy protection to be enabled, but there was a failure in attempting to enable copy protection.%0 + + + + + MessageId: MF_E_VIDEO_REN_SURFACE_NOT_SHARED + + MessageText: + + A component is attempting to access a surface for sharing that is not shared.%0 + + + + + MessageId: MF_E_VIDEO_DEVICE_LOCKED + + MessageText: + + A component is attempting to access a shared device that is already locked by another component.%0 + + + + + MessageId: MF_E_NEW_VIDEO_DEVICE + + MessageText: + + The device is no longer available. The handle should be closed and a new one opened.%0 + + + + + MessageId: MF_E_NO_VIDEO_SAMPLE_AVAILABLE + + MessageText: + + A video sample is not currently queued on a stream that is required for mixing.%0 + + + + + MessageId: MF_E_NO_AUDIO_PLAYBACK_DEVICE + + MessageText: + + No audio playback device was found.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_IN_USE + + MessageText: + + The requested audio playback device is currently in use.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_INVALIDATED + + MessageText: + + The audio playback device is no longer present.%0 + + + + + MessageId: MF_E_AUDIO_SERVICE_NOT_RUNNING + + MessageText: + + The audio service is not running.%0 + + + + + MessageId: MF_E_TOPO_INVALID_OPTIONAL_NODE + + MessageText: + + The topology contains an invalid optional node. Possible reasons are incorrect number of outputs and inputs or optional node is at the beginning or end of a segment. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_FIND_DECRYPTOR + + MessageText: + + No suitable transform was found to decrypt the content. %0 + + + + + MessageId: MF_E_TOPO_CODEC_NOT_FOUND + + MessageText: + + No suitable transform was found to encode or decode the content. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_CONNECT + + MessageText: + + Unable to find a way to connect nodes%0 + + + + + MessageId: MF_E_TOPO_UNSUPPORTED + + MessageText: + + Unsupported operations in topoloader%0 + + + + + MessageId: MF_E_TOPO_INVALID_TIME_ATTRIBUTES + + MessageText: + + The topology or its nodes contain incorrectly set time attributes%0 + + + + + MessageId: MF_E_TOPO_LOOPS_IN_TOPOLOGY + + MessageText: + + The topology contains loops, which are unsupported in media foundation topologies%0 + + + + + MessageId: MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_STREAM_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a stream descriptor%0 + + + + + MessageId: MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED + + MessageText: + + A stream descriptor was set on a source stream node but it was not selected on the presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_SOURCE + + MessageText: + + A source stream node in the topology does not have a source%0 + + + + + MessageId: MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED + + MessageText: + + The topology loader does not support sink activates on output nodes.%0 + + + + + MessageId: MF_E_SEQUENCER_UNKNOWN_SEGMENT_ID + + MessageText: + + The sequencer cannot find a segment with the given ID.%0\n. + + + + + MessageId: MF_S_SEQUENCER_CONTEXT_CANCELED + + MessageText: + + The context was canceled.%0\n. + + + + + MessageId: MF_E_NO_SOURCE_IN_CACHE + + MessageText: + + Cannot find source in source cache.%0\n. + + + + + MessageId: MF_S_SEQUENCER_SEGMENT_AT_END_OF_STREAM + + MessageText: + + Cannot update topology flags.%0\n. + + + + + MessageId: MF_E_TRANSFORM_TYPE_NOT_SET + + MessageText: + + A valid type has not been set for this stream or a stream that it depends on.%0 + + + + + MessageId: MF_E_TRANSFORM_STREAM_CHANGE + + MessageText: + + A stream change has occurred. Output cannot be produced until the streams have been renegotiated.%0 + + + + + MessageId: MF_E_TRANSFORM_INPUT_REMAINING + + MessageText: + + The transform cannot take the requested action until all of the input data it currently holds is processed or flushed.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_MISSING + + MessageText: + + The transform requires a profile but no profile was supplied or found.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_INVALID_OR_CORRUPT + + MessageText: + + The transform requires a profile but the supplied profile was invalid or corrupt.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_TRUNCATED + + MessageText: + + The transform requires a profile but the supplied profile ended unexpectedly while parsing.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_PID_NOT_RECOGNIZED + + MessageText: + + The property ID does not match any property supported by the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VARIANT_TYPE_WRONG + + MessageText: + + The variant does not have the type expected for this property ID.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_NOT_WRITEABLE + + MessageText: + + An attempt was made to set the value on a read-only property.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_ARRAY_VALUE_WRONG_NUM_DIM + + MessageText: + + The array property value has an unexpected number of dimensions.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_SIZE_WRONG + + MessageText: + + The array or blob property value has an unexpected size.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_OUT_OF_RANGE + + MessageText: + + The property value is out of range for this transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_INCOMPATIBLE + + MessageText: + + The property value is incompatible with some other property or mediatype set on the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_OUTPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set output mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_INPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set input mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION + + MessageText: + + The requested operation is not supported for the currently set combination of mediatypes.%0 + + + + + MessageId: MF_E_TRANSFORM_CONFLICTS_WITH_OTHER_CURRENTLY_ENABLED_FEATURES + + MessageText: + + The requested feature is not supported in combination with some other currently enabled feature.%0 + + + + + MessageId: MF_E_TRANSFORM_NEED_MORE_INPUT + + MessageText: + + The transform cannot produce output until it gets more input samples.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_SPKR_CONFIG + + MessageText: + + The requested operation is not supported for the current speaker configuration.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING + + MessageText: + + The transform cannot accept mediatype changes in the middle of processing.%0 + + + + + MessageId: MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT + + MessageText: + + The caller should not propagate this event to downstream components.%0 + + + + + MessageId: MF_E_UNSUPPORTED_D3D_TYPE + + MessageText: + + The input type is not supported for D3D device.%0 + + + + + MessageId: MF_E_TRANSFORM_ASYNC_LOCKED + + MessageText: + + The caller does not appear to support this transform's asynchronous capabilities.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_INITIALIZE_ACM_DRIVER + + MessageText: + + An audio compression manager driver could not be initialized by the transform.%0 + + + + + MessageId: MF_E_LICENSE_INCORRECT_RIGHTS + + MessageText: + + You are not allowed to open this file. Contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_OUTOFDATE + + MessageText: + + The license for this media file has expired. Get a new license or contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_REQUIRED + + MessageText: + + You need a license to perform the requested operation on this media file.%0 + + + + + MessageId: MF_E_DRM_HARDWARE_INCONSISTENT + + MessageText: + + The licenses for your media files are corrupted. Contact Microsoft product support.%0 + + + + + MessageId: MF_E_NO_CONTENT_PROTECTION_MANAGER + + MessageText: + + The APP needs to provide IMFContentProtectionManager callback to access the protected media file.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NO_RIGHTS + + MessageText: + + Client does not have rights to restore licenses.%0 + + + + + MessageId: MF_E_BACKUP_RESTRICTED_LICENSE + + MessageText: + + Licenses are restricted and hence can not be backed up.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NEEDS_INDIVIDUALIZATION + + MessageText: + + License restore requires machine to be individualized.%0 + + + + + MessageId: MF_S_PROTECTION_NOT_REQUIRED + + MessageText: + + Protection for stream is not required.%0 + + + + + MessageId: MF_E_COMPONENT_REVOKED + + MessageText: + + Component is revoked.%0 + + + + + MessageId: MF_E_TRUST_DISABLED + + MessageText: + + Trusted functionality is currently disabled on this component.%0 + + + + + MessageId: MF_E_WMDRMOTA_NO_ACTION + + MessageText: + + No Action is set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_ALREADY_SET + + MessageText: + + Action is already set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_HEADER_NOT_AVAILABLE + + MessageText: + + DRM Heaader is not available.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_ENCRYPTION_SCHEME_NOT_SUPPORTED + + MessageText: + + Current encryption scheme is not supported.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_MISMATCH + + MessageText: + + Action does not match with current configuration.%0 + + + + + MessageId: MF_E_WMDRMOTA_INVALID_POLICY + + MessageText: + + Invalid policy for WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_POLICY_UNSUPPORTED + + MessageText: + + The policies that the Input Trust Authority requires to be enforced are unsupported by the outputs.%0 + + + + + MessageId: MF_E_OPL_NOT_SUPPORTED + + MessageText: + + The OPL that the license requires to be enforced are not supported by the Input Trust Authority.%0 + + + + + MessageId: MF_E_TOPOLOGY_VERIFICATION_FAILED + + MessageText: + + The topology could not be successfully verified.%0 + + + + + MessageId: MF_E_SIGNATURE_VERIFICATION_FAILED + + MessageText: + + Signature verification could not be completed successfully for this component.%0 + + + + + MessageId: MF_E_DEBUGGING_NOT_ALLOWED + + MessageText: + + Running this process under a debugger while using protected content is not allowed.%0 + + + + + MessageId: MF_E_CODE_EXPIRED + + MessageText: + + MF component has expired.%0 + + + + + MessageId: MF_E_GRL_VERSION_TOO_LOW + + MessageText: + + The current GRL on the machine does not meet the minimum version requirements.%0 + + + + + MessageId: MF_E_GRL_RENEWAL_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any renewal entries for the specified revocation.%0 + + + + + MessageId: MF_E_GRL_EXTENSIBLE_ENTRY_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any extensible entries for the specified extension GUID.%0 + + + + + MessageId: MF_E_KERNEL_UNTRUSTED + + MessageText: + + The kernel isn't secure for high security level content.%0 + + + + + MessageId: MF_E_PEAUTH_UNTRUSTED + + MessageText: + + The response from protected environment driver isn't valid.%0 + + + + + MessageId: MF_E_NON_PE_PROCESS + + MessageText: + + A non-PE process tried to talk to PEAuth.%0 + + + + + MessageId: MF_E_REBOOT_REQUIRED + + MessageText: + + We need to reboot the machine.%0 + + + + + MessageId: MF_S_WAIT_FOR_POLICY_SET + + MessageText: + + Protection for this stream is not guaranteed to be enforced until the MEPolicySet event is fired.%0 + + + + + MessageId: MF_S_VIDEO_DISABLED_WITH_UNKNOWN_SOFTWARE_OUTPUT + + MessageText: + + This video stream is disabled because it is being sent to an unknown software output.%0 + + + + + MessageId: MF_E_GRL_INVALID_FORMAT + + MessageText: + + The GRL file is not correctly formed, it may have been corrupted or overwritten.%0 + + + + + MessageId: MF_E_GRL_UNRECOGNIZED_FORMAT + + MessageText: + + The GRL file is in a format newer than those recognized by this GRL Reader.%0 + + + + + MessageId: MF_E_ALL_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and required all processes that can run protected media to restart.%0 + + + + + MessageId: MF_E_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and the current process needs to restart.%0 + + + + + MessageId: MF_E_USERMODE_UNTRUSTED + + MessageText: + + The user space is untrusted for protected content play.%0 + + + + + MessageId: MF_E_PEAUTH_SESSION_NOT_STARTED + + MessageText: + + PEAuth communication session hasn't been started.%0 + + + + + MessageId: MF_E_PEAUTH_PUBLICKEY_REVOKED + + MessageText: + + PEAuth's public key is revoked.%0 + + + + + MessageId: MF_E_GRL_ABSENT + + MessageText: + + The GRL is absent.%0 + + + + + MessageId: MF_S_PE_TRUSTED + + MessageText: + + The Protected Environment is trusted.%0 + + + + + MessageId: MF_E_PE_UNTRUSTED + + MessageText: + + The Protected Environment is untrusted.%0 + + + + + MessageId: MF_E_PEAUTH_NOT_STARTED + + MessageText: + + The Protected Environment Authorization service (PEAUTH) has not been started.%0 + + + + + MessageId: MF_E_INCOMPATIBLE_SAMPLE_PROTECTION + + MessageText: + + The sample protection algorithms supported by components are not compatible.%0 + + + + + MessageId: MF_E_PE_SESSIONS_MAXED + + MessageText: + + No more protected environment sessions can be supported.%0 + + + + + MessageId: MF_E_HIGH_SECURITY_LEVEL_CONTENT_NOT_ALLOWED + + MessageText: + + WMDRM ITA does not allow protected content with high security level for this release.%0 + + + + + MessageId: MF_E_TEST_SIGNED_COMPONENTS_NOT_ALLOWED + + MessageText: + + WMDRM ITA cannot allow the requested action for the content as one or more components is not properly signed.%0 + + + + + MessageId: MF_E_ITA_UNSUPPORTED_ACTION + + MessageText: + + WMDRM ITA does not support the requested action.%0 + + + + + MessageId: MF_E_ITA_ERROR_PARSING_SAP_PARAMETERS + + MessageText: + + WMDRM ITA encountered an error in parsing the Secure Audio Path parameters.%0 + + + + + MessageId: MF_E_POLICY_MGR_ACTION_OUTOFBOUNDS + + MessageText: + + The Policy Manager action passed in is invalid.%0 + + + + + MessageId: MF_E_BAD_OPL_STRUCTURE_FORMAT + + MessageText: + + The structure specifying Output Protection Level is not the correct format.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_PROTECTION_GUID + + MessageText: + + WMDRM ITA does not recognize the Explicite Analog Video Output Protection guid specified in the license.%0 + + + + + MessageId: MF_E_NO_PMP_HOST + + MessageText: + + IMFPMPHost object not available.%0 + + + + + MessageId: MF_E_ITA_OPL_DATA_NOT_INITIALIZED + + MessageText: + + WMDRM ITA could not initialize the Output Protection Level data.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Analog Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_DIGITAL_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Digital Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_CLOCK_INVALID_CONTINUITY_KEY + + MessageText: + + The continuity key supplied is not currently valid.%0 + + + + + MessageId: MF_E_CLOCK_NO_TIME_SOURCE + + MessageText: + + No Presentation Time Source has been specified.%0 + + + + + MessageId: MF_E_CLOCK_STATE_ALREADY_SET + + MessageText: + + The clock is already in the requested state.%0 + + + + + MessageId: MF_E_CLOCK_NOT_SIMPLE + + MessageText: + + The clock has too many advanced features to carry out the request.%0 + + + + + MessageId: MF_S_CLOCK_STOPPED + + MessageText: + + Timer::SetTimer returns this success code if called happened while timer is stopped. Timer is not going to be dispatched until clock is running%0 + + + + + MessageId: MF_E_NO_MORE_DROP_MODES + + MessageText: + + The component does not support any more drop modes.%0 + + + + + MessageId: MF_E_NO_MORE_QUALITY_LEVELS + + MessageText: + + The component does not support any more quality levels.%0 + + + + + MessageId: MF_E_DROPTIME_NOT_SUPPORTED + + MessageText: + + The component does not support drop time functionality.%0 + + + + + MessageId: MF_E_QUALITYKNOB_WAIT_LONGER + + MessageText: + + Quality Manager needs to wait longer before bumping the Quality Level up.%0 + + + + + MessageId: MF_E_QM_INVALIDSTATE + + MessageText: + + Quality Manager is in an invalid state. Quality Management is off at this moment.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_CONTAINERTYPE + + MessageText: + + No transcode output container type is specified.%0 + + + + + MessageId: MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS + + MessageText: + + The profile does not have a media type configuration for any selected source streams.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_MATCHING_ENCODER + + MessageText: + + Cannot find an encoder MFT that accepts the user preferred output type.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_INITIALIZED + + MessageText: + + Memory allocator is not initialized.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_COMMITED + + MessageText: + + Memory allocator is not committed yet.%0 + + + + + MessageId: MF_E_ALLOCATOR_ALREADY_COMMITED + + MessageText: + + Memory allocator has already been committed.%0 + + + + + MessageId: MF_E_STREAM_ERROR + + MessageText: + + An error occurred in media stream.%0 + + + + + MessageId: MF_E_INVALID_STREAM_STATE + + MessageText: + + Stream is not in a state to handle the request.%0 + + + + + MessageId: MF_E_HW_STREAM_NOT_CONNECTED + + MessageText: + + Hardware stream is not connected yet.%0 + + + + + Main interface for using Media Foundation with NAudio + + + + + initializes MediaFoundation - only needs to be called once per process + + + + + Enumerate the installed MediaFoundation transforms in the specified category + + A category from MediaFoundationTransformCategories + + + + + uninitializes MediaFoundation + + + + + Creates a Media type + + + + + Creates a media type from a WaveFormat + + + + + Creates a memory buffer of the specified size + + Memory buffer size in bytes + The memory buffer + + + + Creates a sample object + + The sample object + + + + Creates a new attributes store + + Initial size + The attributes store + + + + Creates a media foundation byte stream based on a stream object + (usable with WinRT streams) + + The input stream + A media foundation byte stream + + + + Creates a source reader based on a byte stream + + The byte stream + A media foundation source reader + + + + Interop definitions for MediaFoundation + thanks to Lucian Wischik for the initial work on many of these definitions (also various interfaces) + n.b. the goal is to make as much of this internal as possible, and provide + better .NET APIs using the MediaFoundationApi class instead + + + + + Initializes Microsoft Media Foundation. + + + + + Shuts down the Microsoft Media Foundation platform + + + + + Creates an empty media type. + + + + + Initializes a media type from a WAVEFORMATEX structure. + + + + + Converts a Media Foundation audio media type to a WAVEFORMATEX structure. + + TODO: try making second parameter out WaveFormatExtraData + + + + Creates the source reader from a URL. + + + + + Creates the source reader from a byte stream. + + + + + Creates the sink writer from a URL or byte stream. + + + + + Creates a Microsoft Media Foundation byte stream that wraps an IRandomAccessStream object. + + + + + Gets a list of Microsoft Media Foundation transforms (MFTs) that match specified search criteria. + + + + + Creates an empty media sample. + + + + + Allocates system memory and creates a media buffer to manage it. + + + + + Creates an empty attribute store. + + + + + Gets a list of output formats from an audio encoder. + + + + + All streams + + + + + First audio stream + + + + + First video stream + + + + + Media source + + + + + Media Foundation SDK Version + + + + + Media Foundation API Version + + + + + Media Foundation Version + + + + + An abstract base class for simplifying working with Media Foundation Transforms + You need to override the method that actually creates and configures the transform + + + + + The Source Provider + + + + + The Output WaveFormat + + + + + Constructs a new MediaFoundationTransform wrapper + Will read one second at a time + + The source provider for input data to the transform + The desired output format + + + + To be implemented by overriding classes. Create the transform object, set up its input and output types, + and configure any custom properties in here + + An object implementing IMFTrasform + + + + Disposes this MediaFoundation transform + + + + + Disposes this Media Foundation Transform + + + + + Destructor + + + + + The output WaveFormat of this Media Foundation Transform + + + + + Reads data out of the source, passing it through the transform + + Output buffer + Offset within buffer to write to + Desired byte count + Number of bytes read + + + + Attempts to read from the transform + Some useful info here: + http://msdn.microsoft.com/en-gb/library/windows/desktop/aa965264%28v=vs.85%29.aspx#process_data + + + + + + Indicate that the source has been repositioned and completely drain out the transforms buffers + + + + + Media Foundation Transform Categories + + + + + MFT_CATEGORY_VIDEO_DECODER + + + + + MFT_CATEGORY_VIDEO_ENCODER + + + + + MFT_CATEGORY_VIDEO_EFFECT + + + + + MFT_CATEGORY_MULTIPLEXER + + + + + MFT_CATEGORY_DEMULTIPLEXER + + + + + MFT_CATEGORY_AUDIO_DECODER + + + + + MFT_CATEGORY_AUDIO_ENCODER + + + + + MFT_CATEGORY_AUDIO_EFFECT + + + + + MFT_CATEGORY_VIDEO_PROCESSOR + + + + + MFT_CATEGORY_OTHER + + + + + Media Type helper class, simplifying working with IMFMediaType + (will probably change in the future, to inherit from an attributes class) + Currently does not release the COM object, so you must do that yourself + + + + + Wraps an existing IMFMediaType object + + The IMFMediaType object + + + + Creates and wraps a new IMFMediaType object + + + + + Creates and wraps a new IMFMediaType object based on a WaveFormat + + WaveFormat + + + + Tries to get a UINT32 value, returning a default value if it doesn't exist + + Attribute key + Default value + Value or default if key doesn't exist + + + + The Sample Rate (valid for audio media types) + + + + + The number of Channels (valid for audio media types) + + + + + The number of bits per sample (n.b. not always valid for compressed audio types) + + + + + The average bytes per second (valid for audio media types) + + + + + The Media Subtype. For audio, is a value from the AudioSubtypes class + + + + + The Major type, e.g. audio or video (from the MediaTypes class) + + + + + Access to the actual IMFMediaType object + Use to pass to MF APIs or Marshal.ReleaseComObject when you are finished with it + + + + + Major Media Types + http://msdn.microsoft.com/en-us/library/windows/desktop/aa367377%28v=vs.85%29.aspx + + + + + Default + + + + + Audio + + + + + Video + + + + + Protected Media + + + + + Synchronized Accessible Media Interchange (SAMI) captions. + + + + + Script stream + + + + + Still image stream. + + + + + HTML stream. + + + + + Binary stream. + + + + + A stream that contains data files. + + + + + Contains information about an input stream on a Media Foundation transform (MFT) + + + + + Maximum amount of time between an input sample and the corresponding output sample, in 100-nanosecond units. + + + + + Bitwise OR of zero or more flags from the _MFT_INPUT_STREAM_INFO_FLAGS enumeration. + + + + + The minimum size of each input buffer, in bytes. + + + + + Maximum amount of input data, in bytes, that the MFT holds to perform lookahead. + + + + + The memory alignment required for input buffers. If the MFT does not require a specific alignment, the value is zero. + + + + + Defines messages for a Media Foundation transform (MFT). + + + + + Requests the MFT to flush all stored data. + + + + + Requests the MFT to drain any stored data. + + + + + Sets or clears the Direct3D Device Manager for DirectX Video Accereration (DXVA). + + + + + Drop samples - requires Windows 7 + + + + + Command Tick - requires Windows 8 + + + + + Notifies the MFT that streaming is about to begin. + + + + + Notifies the MFT that streaming is about to end. + + + + + Notifies the MFT that an input stream has ended. + + + + + Notifies the MFT that the first sample is about to be processed. + + + + + Marks a point in the stream. This message applies only to asynchronous MFTs. Requires Windows 7 + + + + + Contains information about an output buffer for a Media Foundation transform. + + + + + Output stream identifier. + + + + + Pointer to the IMFSample interface. + + + + + Before calling ProcessOutput, set this member to zero. + + + + + Before calling ProcessOutput, set this member to NULL. + + + + + Contains information about an output stream on a Media Foundation transform (MFT). + + + + + Bitwise OR of zero or more flags from the _MFT_OUTPUT_STREAM_INFO_FLAGS enumeration. + + + + + Minimum size of each output buffer, in bytes. + + + + + The memory alignment required for output buffers. + + + + + Contains media type information for registering a Media Foundation transform (MFT). + + + + + The major media type. + + + + + The Media Subtype + + + + + Contains statistics about the performance of the sink writer. + + + + + The size of the structure, in bytes. + + + + + The time stamp of the most recent sample given to the sink writer. + + + + + The time stamp of the most recent sample to be encoded. + + + + + The time stamp of the most recent sample given to the media sink. + + + + + The time stamp of the most recent stream tick. + + + + + The system time of the most recent sample request from the media sink. + + + + + The number of samples received. + + + + + The number of samples encoded. + + + + + The number of samples given to the media sink. + + + + + The number of stream ticks received. + + + + + The amount of data, in bytes, currently waiting to be processed. + + + + + The total amount of data, in bytes, that has been sent to the media sink. + + + + + The number of pending sample requests. + + + + + The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer. + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink. + + + + + Contains flags for registering and enumeration Media Foundation transforms (MFTs). + + + + + None + + + + + The MFT performs synchronous data processing in software. + + + + + The MFT performs asynchronous data processing in software. + + + + + The MFT performs hardware-based data processing, using either the AVStream driver or a GPU-based proxy MFT. + + + + + The MFT that must be unlocked by the application before use. + + + + + For enumeration, include MFTs that were registered in the caller's process. + + + + + The MFT is optimized for transcoding rather than playback. + + + + + For enumeration, sort and filter the results. + + + + + Bitwise OR of all the flags, excluding MFT_ENUM_FLAG_SORTANDFILTER. + + + + + Indicates the status of an input stream on a Media Foundation transform (MFT). + + + + + None + + + + + The input stream can receive more data at this time. + + + + + Describes an input stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of input data must contain complete, unbroken units of data. + + + + + Each media sample that the client provides as input must contain exactly one unit of data, as defined for the MFT_INPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All input samples must be the same size. + + + + + MTF Input Stream Holds buffers + + + + + The MFT does not hold input samples after the IMFTransform::ProcessInput method returns. + + + + + This input stream can be removed by calling IMFTransform::DeleteInputStream. + + + + + This input stream is optional. + + + + + The MFT can perform in-place processing. + + + + + Defines flags for the IMFTransform::ProcessOutput method. + + + + + None + + + + + The MFT can still generate output from this stream without receiving any more input. + + + + + The format has changed on this output stream, or there is a new preferred format for this stream. + + + + + The MFT has removed this output stream. + + + + + There is no sample ready for this stream. + + + + + Indicates whether a Media Foundation transform (MFT) can produce output data. + + + + + None + + + + + There is a sample available for at least one output stream. + + + + + Describes an output stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of output data from the MFT contains complete, unbroken units of data. + + + + + Each output sample contains exactly one unit of data, as defined for the MFT_OUTPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All output samples are the same size. + + + + + The MFT can discard the output data from this output stream, if requested by the client. + + + + + This output stream is optional. + + + + + The MFT provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. + + + + + The MFT can either provide output samples for this stream or it can use samples that the client allocates. + + + + + The MFT does not require the client to process the output for this stream. + + + + + The MFT might remove this output stream during streaming. + + + + + Defines flags for processing output samples in a Media Foundation transform (MFT). + + + + + None + + + + + Do not produce output for streams in which the pSample member of the MFT_OUTPUT_DATA_BUFFER structure is NULL. + + + + + Regenerates the last output sample. + + + + + Process Output Status flags + + + + + None + + + + + The Media Foundation transform (MFT) has created one or more new output streams. + + + + + Defines flags for the setting or testing the media type on a Media Foundation transform (MFT). + + + + + None + + + + + Test the proposed media type, but do not set it. + + + + + Represents a MIDI Channel AfterTouch Event. + + + + + Creates a new ChannelAfterTouchEvent from raw MIDI data + + A binary reader + + + + Creates a new Channel After-Touch Event + + Absolute time + Channel + After-touch pressure + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The aftertouch pressure value + + + + + Represents a MIDI control change event + + + + + Reads a control change event from a MIDI stream + + Binary reader on the MIDI stream + + + + Creates a control change event + + Time + MIDI Channel Number + The MIDI Controller + Controller value + + + + Describes this control change event + + A string describing this event + + + + + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The controller number + + + + + The controller value + + + + + Represents a MIDI key signature event event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new Key signature event with the specified data + + + + + Creates a deep clone of this MIDI event. + + + + + Number of sharps or flats + + + + + Major or Minor key + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event + + + + + Gets the type of this meta event + + + + + Empty constructor + + + + + Custom constructor for use by derived types, who will manage the data themselves + + Meta event type + Meta data length + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Reads a meta-event from a stream + + A binary reader based on the stream of MIDI data + A new MetaEvent object + + + + Describes this meta event + + + + + + + + + + MIDI MetaEvent Type + + + + Track sequence number + + + Text event + + + Copyright + + + Sequence track name + + + Track instrument name + + + Lyric + + + Marker + + + Cue point + + + Program (patch) name + + + Device (port) name + + + MIDI Channel (not official?) + + + MIDI Port (not official?) + + + End track + + + Set tempo + + + SMPTE offset + + + Time signature + + + Key signature + + + Sequencer specific + + + + MIDI command codes + + + + Note Off + + + Note On + + + Key After-touch + + + Control change + + + Patch change + + + Channel after-touch + + + Pitch wheel change + + + Sysex message + + + Eox (comes at end of a sysex message) + + + Timing clock (used when synchronization is required) + + + Start sequence + + + Continue sequence + + + Stop sequence + + + Auto-Sensing + + + Meta-event + + + + MidiController enumeration + http://www.midi.org/techspecs/midimessages.php#3 + + + + Bank Select (MSB) + + + Modulation (MSB) + + + Breath Controller + + + Foot controller (MSB) + + + Main volume + + + Pan + + + Expression + + + Bank Select LSB + + + Sustain + + + Portamento On/Off + + + Sostenuto On/Off + + + Soft Pedal On/Off + + + Legato Footswitch + + + Reset all controllers + + + All notes off + + + + Represents an individual MIDI event + + + + The MIDI command code + + + + Creates a MidiEvent from a raw message received using + the MME MIDI In APIs + + The short MIDI message + A new MIDI Event + + + + Constructs a MidiEvent from a BinaryStream + + The binary stream of MIDI data + The previous MIDI event (pass null for first event) + A new MidiEvent + + + + Converts this MIDI event to a short message (32 bit integer) that + can be sent by the Windows MIDI out short message APIs + Cannot be implemented for all MIDI messages + + A short message + + + + Default constructor + + + + + Creates a MIDI event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + + + + Creates a deep clone of this MIDI event. + + + + + The MIDI Channel Number for this event (1-16) + + + + + The Delta time for this event + + + + + The absolute time for this event + + + + + The command code for this event + + + + + Whether this is a note off event + + + + + Whether this is a note on event + + + + + Determines if this is an end track event + + + + + Displays a summary of the MIDI event + + A string containing a brief description of this MIDI event + + + + Utility function that can read a variable length integer from a binary stream + + The binary stream + The integer read + + + + Writes a variable length integer to a binary stream + + Binary stream + The value to write + + + + Exports this MIDI event's data + Overriden in derived classes, but they should call this version + + Absolute time used to calculate delta. + Is updated ready for the next delta calculation + Stream to write to + + + + A helper class to manage collection of MIDI events + It has the ability to organise them in tracks + + + + + Creates a new Midi Event collection + + Initial file type + Delta Ticks Per Quarter Note + + + + The number of tracks + + + + + The absolute time that should be considered as time zero + Not directly used here, but useful for timeshifting applications + + + + + The number of ticks per quarter note + + + + + Gets events on a specified track + + Track number + The list of events + + + + Gets events on a specific track + + Track number + The list of events + + + + Adds a new track + + The new track event list + + + + Adds a new track + + Initial events to add to the new track + The new track event list + + + + Removes a track + + Track number to remove + + + + Clears all events + + + + + The MIDI file type + + + + + Adds an event to the appropriate track depending on file type + + The event to be added + The original (or desired) track number + When adding events in type 0 mode, the originalTrack parameter + is ignored. If in type 1 mode, it will use the original track number to + store the new events. If the original track was 0 and this is a channel based + event, it will create new tracks if necessary and put it on the track corresponding + to its channel number + + + + Sorts, removes empty tracks and adds end track markers + + + + + Gets an enumerator for the lists of track events + + + + + Gets an enumerator for the lists of track events + + + + + Utility class for comparing MidiEvent objects + + + + + Compares two MidiEvents + Sorts by time, with EndTrack always sorted to the end + + + + + Class able to read a MIDI file + + + + + Opens a MIDI file for reading + + Name of MIDI file + + + + MIDI File format + + + + + Opens a MIDI file for reading + + Name of MIDI file + If true will error on non-paired note events + + + + Opens a MIDI file stream for reading + + The input stream containing a MIDI file + If true will error on non-paired note events + + + + The collection of events in this MIDI file + + + + + Number of tracks in this MIDI file + + + + + Delta Ticks Per Quarter Note + + + + + Describes the MIDI file + + A string describing the MIDI file and its events + + + + Exports a MIDI file + + Filename to export to + Events to export + + + + Represents a MIDI in device + + + + + Called when a MIDI message is received + + + + + An invalid MIDI message + + + + + Gets the number of MIDI input devices available in the system + + + + + Opens a specified MIDI in device + + The device number + + + + Closes this MIDI in device + + + + + Closes this MIDI in device + + + + + Start the MIDI in device + + + + + Stop the MIDI in device + + + + + Reset the MIDI in device + + + + + Gets the MIDI in device info + + + + + Closes the MIDI out device + + True if called from Dispose + + + + Cleanup + + + + + MIDI In Device Capabilities + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name + + + + + Support - Reserved + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + MIDI In Message Information + + + + + Create a new MIDI In Message EventArgs + + + + + + + The Raw message received from the MIDI In API + + + + + The raw message interpreted as a MidiEvent + + + + + The timestamp in milliseconds for this message + + + + + MIM_OPEN + + + + + MIM_CLOSE + + + + + MIM_DATA + + + + + MIM_LONGDATA + + + + + MIM_ERROR + + + + + MIM_LONGERROR + + + + + MIM_MOREDATA + + + + + MOM_OPEN + + + + + MOM_CLOSE + + + + + MOM_DONE + + + + + Represents a MIDI message + + + + + Creates a new MIDI message + + Status + Data parameter 1 + Data parameter 2 + + + + Creates a new MIDI message from a raw message + + A packed MIDI message from an MMIO function + + + + Creates a Note On message + + Note number (0 to 127) + Volume (0 to 127) + MIDI channel (1 to 16) + A new MidiMessage object + + + + Creates a Note Off message + + Note number + Volume + MIDI channel (1-16) + A new MidiMessage object + + + + Creates a patch change message + + The patch number + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Creates a Control Change message + + The controller number to change + The value to set the controller to + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Returns the raw MIDI message data + + + + + Represents a MIDI out device + + + + + Gets the number of MIDI devices available in the system + + + + + Gets the MIDI Out device info + + + + + Opens a specified MIDI out device + + The device number + + + + Closes this MIDI out device + + + + + Closes this MIDI out device + + + + + Gets or sets the volume for this MIDI out device + + + + + Resets the MIDI out device + + + + + Sends a MIDI out message + + Message + Parameter 1 + Parameter 2 + + + + Sends a MIDI message to the MIDI out device + + The message to send + + + + Closes the MIDI out device + + True if called from Dispose + + + + Send a long message, for example sysex. + + The bytes to send. + + + + Cleanup + + + + + class representing the capabilities of a MIDI out device + MIDIOUTCAPS: http://msdn.microsoft.com/en-us/library/dd798467%28VS.85%29.aspx + + + + + MIDICAPS_VOLUME + + + + + separate left-right volume control + MIDICAPS_LRVOLUME + + + + + MIDICAPS_CACHE + + + + + MIDICAPS_STREAM + driver supports midiStreamOut directly + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + Returns the number of supported voices + + + + + Gets the polyphony of the device + + + + + Returns true if the device supports all channels + + + + + Queries whether a particular channel is supported + + Channel number to test + True if the channel is supported + + + + Returns true if the device supports patch caching + + + + + Returns true if the device supports separate left and right volume + + + + + Returns true if the device supports MIDI stream out + + + + + Returns true if the device supports volume control + + + + + Returns the type of technology used by this MIDI out device + + + + + Represents the different types of technology used by a MIDI out device + + from mmsystem.h + + + The device is a MIDI port + + + The device is a MIDI synth + + + The device is a square wave synth + + + The device is an FM synth + + + The device is a MIDI mapper + + + The device is a WaveTable synth + + + The device is a software synth + + + + Represents a note MIDI event + + + + + Reads a NoteEvent from a stream of MIDI data + + Binary Reader for the stream + + + + Creates a MIDI Note Event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + MIDI Note Number + MIDI Note Velocity + + + + + + + + + The MIDI note number + + + + + The note velocity + + + + + The note name + + + + + Describes the Note Event + + Note event as a string + + + + + + + + + Represents a MIDI note on event + + + + + Reads a new Note On event from a stream of MIDI data + + Binary reader on the MIDI data stream + + + + Creates a NoteOn event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI note number + MIDI note velocity + MIDI note duration + + + + Creates a deep clone of this MIDI event. + + + + + The associated Note off event + + + + + Get or set the Note Number, updating the off event at the same time + + + + + Get or set the channel, updating the off event at the same time + + + + + The duration of this note + + + There must be a note off event + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI patch change event + + + + + Gets the default MIDI instrument names + + + + + Reads a new patch change event from a MIDI stream + + Binary reader for the MIDI stream + + + + Creates a new patch change event + + Time of the event + Channel number + Patch number + + + + The Patch Number + + + + + Describes this patch change event + + String describing the patch change event + + + + Gets as a short message for sending with the midiOutShortMsg API + + short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI pitch wheel change event + + + + + Reads a pitch wheel change event from a MIDI stream + + The MIDI stream to read from + + + + Creates a new pitch wheel change event + + Absolute event time + Channel + Pitch wheel value + + + + Describes this pitch wheel change event + + String describing this pitch wheel change event + + + + Pitch Wheel Value 0 is minimum, 0x2000 (8192) is default, 0x3FFF (16383) is maximum + + + + + Gets a short message + + Integer to sent as short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event with raw data + + + + + Raw data contained in the meta event + + + + + Creates a meta event with raw data + + + + + Creates a deep clone of this MIDI event. + + + + + Describes this meta event + + + + + + + + + + Represents a Sequencer Specific event + + + + + Reads a new sequencer specific event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new Sequencer Specific event + + The sequencer specific data + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this sequencer specific + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + SMPTE Offset Event + + + + + Creates a new time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a deep clone of this MIDI event. + + + + + Hours + + + + + Minutes + + + + + Seconds + + + + + Frames + + + + + SubFrames + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI sysex message + + + + + Reads a sysex message from a MIDI stream + + Stream of MIDI data + a new sysex message + + + + Creates a deep clone of this MIDI event. + + + + + Describes this sysex message + + A string describing the sysex message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI tempo event + + + + + Reads a new tempo event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new tempo event with specified settings + + Microseconds per quarter note + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Describes this tempo event + + String describing the tempo event + + + + Microseconds per quarter note + + + + + Tempo + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI text event + + + + + Reads a new text event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TextEvent + + The text in this type + MetaEvent type (must be one that is + associated with text data) + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this text event + + + + + The raw contents of this text event + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TimeSignatureEvent + + Time at which to create this event + Numerator + Denominator + Ticks in Metronome Click + No of 32nd Notes in Quarter Click + + + + Creates a deep clone of this MIDI event. + + + + + Numerator (number of beats in a bar) + + + + + Denominator (Beat unit), + 1 means 2, 2 means 4 (crochet), 3 means 8 (quaver), 4 means 16 and 5 means 32 + + + + + Ticks in a metronome click + + + + + Number of 32nd notes in a quarter note + + + + + The time signature + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI track sequence number event event + + + + + Creates a new track sequence number event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a deep clone of this MIDI event. + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Boolean mixer control + + + + + Gets the details for this control + + memory pointer + + + + The current value of the control + + + + + Custom Mixer control + + + + + Get the data for this custom control + + pointer to memory to receive data + + + + List text mixer control + + + + + Get the details for this control + + Memory location to read to + + + Represents a Windows mixer device + + + The number of mixer devices available + + + Connects to the specified mixer + The index of the mixer to use. + This should be between zero and NumberOfDevices - 1 + + + The number of destinations this mixer supports + + + The name of this mixer device + + + The manufacturer code for this mixer device + + + The product identifier code for this mixer device + + + Retrieve the specified MixerDestination object + The ID of the destination to use. + Should be between 0 and DestinationCount - 1 + + + + A way to enumerate the destinations + + + + + A way to enumerate all available devices + + + + + Represents a mixer control + + + + + Mixer Handle + + + + + Number of Channels + + + + + Mixer Handle Type + + + + + Gets all the mixer controls + + Mixer Handle + Mixer Line + Mixer Handle Type + + + + + Gets a specified Mixer Control + + Mixer Handle + Line ID + Control ID + Number of Channels + Flags to use (indicates the meaning of mixerHandle) + + + + + Gets the control details + + + + + Gets the control details + + + + + + Mixer control name + + + + + Mixer control type + + + + + Returns true if this is a boolean control + + Control type + + + + Is this a boolean control + + + + + Determines whether a specified mixer control type is a list text control + + + + + True if this is a list text control + + + + + True if this is a signed control + + + + + True if this is an unsigned control + + + + + True if this is a custom control + + + + + String representation for debug purposes + + + + + Mixer control types + + + + Custom + + + Boolean meter + + + Signed meter + + + Peak meter + + + Unsigned meter + + + Boolean + + + On Off + + + Mute + + + Mono + + + Loudness + + + Stereo Enhance + + + Button + + + Decibels + + + Signed + + + Unsigned + + + Percent + + + Slider + + + Pan + + + Q-sound pan + + + Fader + + + Volume + + + Bass + + + Treble + + + Equaliser + + + Single Select + + + Mux + + + Multiple select + + + Mixer + + + Micro time + + + Milli time + + + + Mixer Interop Flags + + + + + MIXER_OBJECTF_HANDLE = 0x80000000; + + + + + MIXER_OBJECTF_MIXER = 0x00000000; + + + + + MIXER_OBJECTF_HMIXER + + + + + MIXER_OBJECTF_WAVEOUT + + + + + MIXER_OBJECTF_HWAVEOUT + + + + + MIXER_OBJECTF_WAVEIN + + + + + MIXER_OBJECTF_HWAVEIN + + + + + MIXER_OBJECTF_MIDIOUT + + + + + MIXER_OBJECTF_HMIDIOUT + + + + + MIXER_OBJECTF_MIDIIN + + + + + MIXER_OBJECTF_HMIDIIN + + + + + MIXER_OBJECTF_AUX + + + + + MIXER_GETCONTROLDETAILSF_VALUE = 0x00000000; + MIXER_SETCONTROLDETAILSF_VALUE = 0x00000000; + + + + + MIXER_GETCONTROLDETAILSF_LISTTEXT = 0x00000001; + MIXER_SETCONTROLDETAILSF_LISTTEXT = 0x00000001; + + + + + MIXER_GETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_SETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_GETLINECONTROLSF_QUERYMASK = 0x0000000F; + + + + + MIXER_GETLINECONTROLSF_ALL = 0x00000000; + + + + + MIXER_GETLINECONTROLSF_ONEBYID = 0x00000001; + + + + + MIXER_GETLINECONTROLSF_ONEBYTYPE = 0x00000002; + + + + + MIXER_GETLINEINFOF_DESTINATION = 0x00000000; + + + + + MIXER_GETLINEINFOF_SOURCE = 0x00000001; + + + + + MIXER_GETLINEINFOF_LINEID = 0x00000002; + + + + + MIXER_GETLINEINFOF_COMPONENTTYPE = 0x00000003; + + + + + MIXER_GETLINEINFOF_TARGETTYPE = 0x00000004; + + + + + MIXER_GETLINEINFOF_QUERYMASK = 0x0000000F; + + + + + Mixer Line Flags + + + + + Audio line is active. An active line indicates that a signal is probably passing + through the line. + + + + + Audio line is disconnected. A disconnected line's associated controls can still be + modified, but the changes have no effect until the line is connected. + + + + + Audio line is an audio source line associated with a single audio destination line. + If this flag is not set, this line is an audio destination line associated with zero + or more audio source lines. + + + + + BOUNDS structure + + + + + dwMinimum / lMinimum / reserved 0 + + + + + dwMaximum / lMaximum / reserved 1 + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + METRICS structure + + + + + cSteps / reserved[0] + + + + + cbCustomData / reserved[1], number of bytes for control details + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + MIXERCONTROL struct + http://msdn.microsoft.com/en-us/library/dd757293%28VS.85%29.aspx + + + + + Represents a mixer line (source or destination) + + + + + Creates a new mixer destination + + Mixer Handle + Destination Index + Mixer Handle Type + + + + Creates a new Mixer Source For a Specified Source + + Mixer Handle + Destination Index + Source Index + Flag indicating the meaning of mixerHandle + + + + Creates a new Mixer Source + + Wave In Device + + + + Mixer Line Name + + + + + Mixer Line short name + + + + + The line ID + + + + + Component Type + + + + + Mixer destination type description + + + + + Number of channels + + + + + Number of sources + + + + + Number of controls + + + + + Is this destination active + + + + + Is this destination disconnected + + + + + Is this destination a source + + + + + Gets the specified source + + + + + Enumerator for the controls on this Mixer Limne + + + + + Enumerator for the sources on this Mixer Line + + + + + The name of the target output device + + + + + Describes this Mixer Line (for diagnostic purposes) + + + + + Mixer Line Component type enumeration + + + + + Audio line is a destination that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_DST_UNDEFINED + + + + + Audio line is a digital destination (for example, digital input to a DAT or CD audio device). + MIXERLINE_COMPONENTTYPE_DST_DIGITAL + + + + + Audio line is a line level destination (for example, line level input from a CD audio device) that will be the final recording source for the analog-to-digital converter (ADC). Because most audio cards for personal computers provide some sort of gain for the recording audio source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_DST_WAVEIN type. + MIXERLINE_COMPONENTTYPE_DST_LINE + + + + + Audio line is a destination used for a monitor. + MIXERLINE_COMPONENTTYPE_DST_MONITOR + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive speakers. This is the typical component type for the audio output of audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_SPEAKERS + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive headphones. Most audio cards use the same audio destination line for speakers and headphones, in which case the mixer device simply uses the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS type. + MIXERLINE_COMPONENTTYPE_DST_HEADPHONES + + + + + Audio line is a destination that will be routed to a telephone line. + MIXERLINE_COMPONENTTYPE_DST_TELEPHONE + + + + + Audio line is a destination that will be the final recording source for the waveform-audio input (ADC). This line typically provides some sort of gain or attenuation. This is the typical component type for the recording line of most audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_WAVEIN + + + + + Audio line is a destination that will be the final recording source for voice input. This component type is exactly like MIXERLINE_COMPONENTTYPE_DST_WAVEIN but is intended specifically for settings used during voice recording/recognition. Support for this line is optional for a mixer device. Many mixer devices provide only MIXERLINE_COMPONENTTYPE_DST_WAVEIN. + MIXERLINE_COMPONENTTYPE_DST_VOICEIN + + + + + Audio line is a source that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED + + + + + Audio line is a digital source (for example, digital output from a DAT or audio CD). + MIXERLINE_COMPONENTTYPE_SRC_DIGITAL + + + + + Audio line is a line-level source (for example, line-level input from an external stereo) that can be used as an optional recording source. Because most audio cards for personal computers provide some sort of gain for the recording source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY type. + MIXERLINE_COMPONENTTYPE_SRC_LINE + + + + + Audio line is a microphone recording source. Most audio cards for personal computers provide at least two types of recording sources: an auxiliary audio line and microphone input. A microphone audio line typically provides some sort of gain. Audio cards that use a single input for use with a microphone or auxiliary audio line should use the MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE component type. + MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE + + + + + Audio line is a source originating from the output of an internal synthesizer. Most audio cards for personal computers provide some sort of MIDI synthesizer (for example, an Adlib®-compatible or OPL/3 FM synthesizer). + MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER + + + + + Audio line is a source originating from the output of an internal audio CD. This component type is provided for audio cards that provide an audio source line intended to be connected to an audio CD (or CD-ROM playing an audio CD). + MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC + + + + + Audio line is a source originating from an incoming telephone line. + MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE + + + + + Audio line is a source originating from personal computer speaker. Several audio cards for personal computers provide the ability to mix what would typically be played on the internal speaker with the output of an audio card. Some audio cards support the ability to use this output as a recording source. + MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER + + + + + Audio line is a source originating from the waveform-audio output digital-to-analog converter (DAC). Most audio cards for personal computers provide this component type as a source to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination. Some cards also allow this source to be routed to the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT + + + + + Audio line is a source originating from the auxiliary audio line. This line type is intended as a source with gain or attenuation that can be routed to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination and/or recorded from the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY + + + + + Audio line is an analog source (for example, analog output from a video-cassette tape). + MIXERLINE_COMPONENTTYPE_SRC_ANALOG + + + + + Represents a signed mixer control + + + + + Gets details for this contrl + + + + + The value of the control + + + + + Minimum value for this control + + + + + Maximum value for this control + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + + Represents an unsigned mixer control + + + + + Gets the details for this control + + + + + The control value + + + + + The control's minimum value + + + + + The control's maximum value + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + Helper methods for working with audio buffers + + + + + Ensures the buffer is big enough + + + + + + + + Ensures the buffer is big enough + + + + + + + + these will become extension methods once we move to .NET 3.5 + + + + + Checks if the buffer passed in is entirely full of nulls + + + + + Converts to a string containing the buffer described in hex + + + + + Decodes the buffer using the specified encoding, stopping at the first null + + + + + Concatenates the given arrays into a single array. + + The arrays to concatenate + The concatenated resulting array. + + + + An encoding for use with file types that have one byte per character + + + + + The one and only instance of this class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chunk Identifier helpers + + + + + Chunk identifier to Int32 (replaces mmioStringToFOURCC) + + four character chunk identifier + Chunk identifier as int 32 + + + + A very basic circular buffer implementation + + + + + Create a new circular buffer + + Max buffer size in bytes + + + + Write data to the buffer + + Data to write + Offset into data + Number of bytes to write + number of bytes written + + + + Read from the buffer + + Buffer to read into + Offset into read buffer + Bytes to read + Number of bytes actually read + + + + Maximum length of this circular buffer + + + + + Number of bytes currently stored in the circular buffer + + + + + Resets the buffer + + + + + Advances the buffer, discarding bytes + + Bytes to advance + + + + A util class for conversions + + + + + linear to dB conversion + + linear value + decibel value + + + + dB to linear conversion + + decibel value + linear value + + + + Allows us to add descriptions to interop members + + + + + The description + + + + + Field description + + + + + String representation + + + + + + Helper to get descriptions + + + + + Describes the Guid by looking for a FieldDescription attribute on the specified class + + + + + HResult + + + + + S_OK + + + + + S_FALSE + + + + + E_INVALIDARG (from winerror.h) + + + + + MAKE_HRESULT macro + + + + + Helper to deal with the fact that in Win Store apps, + the HResult property name has changed + + COM Exception + The HResult + + + + Methods for converting between IEEE 80-bit extended double precision + and standard C# double precision. + + + + + Converts a C# double precision number to an 80-bit + IEEE extended double precision number (occupying 10 bytes). + + The double precision number to convert to IEEE extended. + An array of 10 bytes containing the IEEE extended number. + + + + Converts an IEEE 80-bit extended precision number to a + C# double precision number. + + The 80-bit IEEE extended number (as an array of 10 bytes). + A C# double precision number that is a close representation of the IEEE extended number. + + + + Pass-through stream that ignores Dispose + Useful for dealing with MemoryStreams that you want to re-use + + + + + The source stream all other methods fall through to + + + + + If true the Dispose will be ignored, if false, will pass through to the SourceStream + Set to true by default + + + + + Creates a new IgnoreDisposeStream + + The source stream + + + + Can Read + + + + + Can Seek + + + + + Can write to the underlying stream + + + + + Flushes the underlying stream + + + + + Gets the length of the underlying stream + + + + + Gets or sets the position of the underlying stream + + + + + Reads from the underlying stream + + + + + Seeks on the underlying stream + + + + + Sets the length of the underlying stream + + + + + Writes to the underlying stream + + + + + Dispose - by default (IgnoreDispose = true) will do nothing, + leaving the underlying stream undisposed + + + + + Support for Marshal Methods in both UWP and .NET 3.5 + + + + + SizeOf a structure + + + + + Offset of a field in a structure + + + + + Pointer to Structure + + + + + In-place and stable implementation of MergeSort + + + + + MergeSort a list of comparable items + + + + + MergeSort a list + + + + + General purpose native methods for internal NAudio use + + + + + A thread-safe Progress Log Control + + + + + Creates a new progress log control + + + + + The contents of the log as text + + + + + Log a message + + + + + Clear the log + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + WavePosition extension methods + + + + + Get Position as timespan + + + + + Manufacturer codes from mmreg.h + + + + Microsoft Corporation + + + Creative Labs, Inc + + + Media Vision, Inc. + + + Fujitsu Corp. + + + Artisoft, Inc. + + + Turtle Beach, Inc. + + + IBM Corporation + + + Vocaltec LTD. + + + Roland + + + DSP Solutions, Inc. + + + NEC + + + ATI + + + Wang Laboratories, Inc + + + Tandy Corporation + + + Voyetra + + + Antex Electronics Corporation + + + ICL Personal Systems + + + Intel Corporation + + + Advanced Gravis + + + Video Associates Labs, Inc. + + + InterActive Inc + + + Yamaha Corporation of America + + + Everex Systems, Inc + + + Echo Speech Corporation + + + Sierra Semiconductor Corp + + + Computer Aided Technologies + + + APPS Software International + + + DSP Group, Inc + + + microEngineering Labs + + + Computer Friends, Inc. + + + ESS Technology + + + Audio, Inc. + + + Motorola, Inc. + + + Canopus, co., Ltd. + + + Seiko Epson Corporation + + + Truevision + + + Aztech Labs, Inc. + + + Videologic + + + SCALACS + + + Korg Inc. + + + Audio Processing Technology + + + Integrated Circuit Systems, Inc. + + + Iterated Systems, Inc. + + + Metheus + + + Logitech, Inc. + + + Winnov, Inc. + + + NCR Corporation + + + EXAN + + + AST Research Inc. + + + Willow Pond Corporation + + + Sonic Foundry + + + Vitec Multimedia + + + MOSCOM Corporation + + + Silicon Soft, Inc. + + + Supermac + + + Audio Processing Technology + + + Speech Compression + + + Ahead, Inc. + + + Dolby Laboratories + + + OKI + + + AuraVision Corporation + + + Ing C. Olivetti & C., S.p.A. + + + I/O Magic Corporation + + + Matsushita Electric Industrial Co., LTD. + + + Control Resources Limited + + + Xebec Multimedia Solutions Limited + + + New Media Corporation + + + Natural MicroSystems + + + Lyrrus Inc. + + + Compusic + + + OPTi Computers Inc. + + + Adlib Accessories Inc. + + + Compaq Computer Corp. + + + Dialogic Corporation + + + InSoft, Inc. + + + M.P. Technologies, Inc. + + + Weitek + + + Lernout & Hauspie + + + Quanta Computer Inc. + + + Apple Computer, Inc. + + + Digital Equipment Corporation + + + Mark of the Unicorn + + + Workbit Corporation + + + Ositech Communications Inc. + + + miro Computer Products AG + + + Cirrus Logic + + + ISOLUTION B.V. + + + Horizons Technology, Inc + + + Computer Concepts Ltd + + + Voice Technologies Group, Inc. + + + Radius + + + Rockwell International + + + Co. XYZ for testing + + + Opcode Systems + + + Voxware Inc + + + Northern Telecom Limited + + + APICOM + + + Grande Software + + + ADDX + + + Wildcat Canyon Software + + + Rhetorex Inc + + + Brooktree Corporation + + + ENSONIQ Corporation + + + FAST Multimedia AG + + + NVidia Corporation + + + OKSORI Co., Ltd. + + + DiAcoustics, Inc. + + + Gulbransen, Inc. + + + Kay Elemetrics, Inc. + + + Crystal Semiconductor Corporation + + + Splash Studios + + + Quarterdeck Corporation + + + TDK Corporation + + + Digital Audio Labs, Inc. + + + Seer Systems, Inc. + + + PictureTel Corporation + + + AT&T Microelectronics + + + Osprey Technologies, Inc. + + + Mediatrix Peripherals + + + SounDesignS M.C.S. Ltd. + + + A.L. Digital Ltd. + + + Spectrum Signal Processing, Inc. + + + Electronic Courseware Systems, Inc. + + + AMD + + + Core Dynamics + + + CANAM Computers + + + Softsound, Ltd. + + + Norris Communications, Inc. + + + Danka Data Devices + + + EuPhonics + + + Precept Software, Inc. + + + Crystal Net Corporation + + + Chromatic Research, Inc + + + Voice Information Systems, Inc + + + Vienna Systems + + + Connectix Corporation + + + Gadget Labs LLC + + + Frontier Design Group LLC + + + Viona Development GmbH + + + Casio Computer Co., LTD + + + Diamond Multimedia + + + S3 + + + Fraunhofer + + + + Summary description for MmException. + + + + + Creates a new MmException + + The result returned by the Windows API call + The name of the Windows API that failed + + + + Helper function to automatically raise an exception on failure + + The result of the API call + The API function name + + + + Returns the Windows API result + + + + + Windows multimedia error codes from mmsystem.h. + + + + no error, MMSYSERR_NOERROR + + + unspecified error, MMSYSERR_ERROR + + + device ID out of range, MMSYSERR_BADDEVICEID + + + driver failed enable, MMSYSERR_NOTENABLED + + + device already allocated, MMSYSERR_ALLOCATED + + + device handle is invalid, MMSYSERR_INVALHANDLE + + + no device driver present, MMSYSERR_NODRIVER + + + memory allocation error, MMSYSERR_NOMEM + + + function isn't supported, MMSYSERR_NOTSUPPORTED + + + error value out of range, MMSYSERR_BADERRNUM + + + invalid flag passed, MMSYSERR_INVALFLAG + + + invalid parameter passed, MMSYSERR_INVALPARAM + + + handle being used simultaneously on another thread (eg callback),MMSYSERR_HANDLEBUSY + + + specified alias not found, MMSYSERR_INVALIDALIAS + + + bad registry database, MMSYSERR_BADDB + + + registry key not found, MMSYSERR_KEYNOTFOUND + + + registry read error, MMSYSERR_READERROR + + + registry write error, MMSYSERR_WRITEERROR + + + registry delete error, MMSYSERR_DELETEERROR + + + registry value not found, MMSYSERR_VALNOTFOUND + + + driver does not call DriverCallback, MMSYSERR_NODRIVERCB + + + more data to be returned, MMSYSERR_MOREDATA + + + unsupported wave format, WAVERR_BADFORMAT + + + still something playing, WAVERR_STILLPLAYING + + + header not prepared, WAVERR_UNPREPARED + + + device is synchronous, WAVERR_SYNC + + + Conversion not possible (ACMERR_NOTPOSSIBLE) + + + Busy (ACMERR_BUSY) + + + Header Unprepared (ACMERR_UNPREPARED) + + + Cancelled (ACMERR_CANCELED) + + + invalid line (MIXERR_INVALLINE) + + + invalid control (MIXERR_INVALCONTROL) + + + invalid value (MIXERR_INVALVALUE) + + + diff --git a/TestEngine/bin/Debug/lib/TheWorstEngine.dll b/TestEngine/bin/Debug/lib/TheWorstEngine.dll index 39ca7462ff206e7522ba76abd744bb9d1e0a3ce8..98c558d4f375982bcffc55c0942903250ef8fc98 100644 GIT binary patch literal 16384 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 literal 11776 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 diff --git a/TestEngine/obj/Debug/TestEngine.csproj.FileListAbsolute.txt b/TestEngine/obj/Debug/TestEngine.csproj.FileListAbsolute.txt index 2d6ebe5..ac4eb39 100644 --- a/TestEngine/obj/Debug/TestEngine.csproj.FileListAbsolute.txt +++ b/TestEngine/obj/Debug/TestEngine.csproj.FileListAbsolute.txt @@ -15,3 +15,5 @@ D:\C#类编程文件\带工程\TWE\TheWorstEngine\TestEngine\bin\Debug\LogSystem D:\C#类编程文件\带工程\TWE\TheWorstEngine\TestEngine\bin\Debug\LangSystem.pdb D:\C#类编程文件\带工程\TWE\TheWorstEngine\TestEngine\bin\Debug\LogSystem.pdb D:\C#类编程文件\带工程\TWE\TheWorstEngine\TestEngine\obj\Debug\TestEngine.Form2.resources +D:\C#类编程文件\带工程\TWE\TheWorstEngine\TestEngine\bin\Debug\NAudio.dll +D:\C#类编程文件\带工程\TWE\TheWorstEngine\TestEngine\bin\Debug\NAudio.xml diff --git a/TestEngine/obj/Debug/TestEngine.csprojAssemblyReference.cache b/TestEngine/obj/Debug/TestEngine.csprojAssemblyReference.cache index c5e343b3dc2c209b14687e34be74411cd50a00bb..8609a5b3457a6cb6c6fc9adb7a389c20357a5f39 100644 GIT binary patch literal 52730 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 diff --git a/TestEngine/obj/Debug/TestEngine.exe b/TestEngine/obj/Debug/TestEngine.exe index 5262c1cd9d6db78fb78d1951441a7109ab87e8f6..282b9d4c1f5b4c814e3f5889acf36afc75c5e48f 100644 GIT binary patch delta 4741 zcma)AeQZBsL87&Ur;+HIYd9V(+D=pi z`SfC<`I%WpU1p1@5vMZ)!V-rvLJ0=m^%JS2u$JEN0MT9nwc1RpqFJB7P!Rc*R56ja z53J^}ieyU|RhcdA)A*HuFE5djfTWX>mKI9dg)uY0LrPkzCo!O zUYrt6Hp_P;xq~bQ%9GDZpaKBPm5xHxHt^a(^hzb|<|w7`IaNu^{FJnw7nq^sOYmWq z<#fVkD3_KQX1;czlX%$bivXw%HYhY5m4E|3sdW>TG|#p4D|NaEdG$IU)EO|#*_sqJ zQ6b$>utBE*7|BOTRRZnfN;oX%rlc@=Zy#swRB001I*D7hkeF;^Y#VzrR+NfCHjNyZ z{4LKao&$`fsIQ@dq^elAIyY2q-j@?X=9GM4sx5G0#y^p@Wt6dt{BS&$9L)>IKr9@K z6a->$JP-@vY#yyQD0QWXae~~Q>qR?VunP+iF)}?%*4xV!2W}(QGz8j7G!Igm}RSc8!u&O~m8=J!A#$i-Abw5X%BOO#mE2F8oU=#DCoczRsb|UTwJYPF` z8bgwyFd=xCv2h3%M@%rlvpIO1kN>fHX;TaGzwud_{$z^4-#~a^#sYHRe1Zb zl`X*NC*Hn^443wyL*yNCfI5W|OJsnwv{cgQ6XPdc`c=~3%7frkGaGFS=EG)FPEgWp zVHjNRZOAWWp;TV;J4~8c?H;Y-|LYX&pF4$*({MTkC(ampnS-HBT&0aze_1AqWLwl2 z7J*w7PS)NRvHV;YbE!Q8=5=#fP6(OHb3!r*ljI~2a|NTd_}hhZ&KZSen^9y5ZN3%> z2rABux=XBwq&k2*n-H%?K@(!&u1zS0_9P#t^YDr|orf#opuBVr%C%5ZEr{G_p`)WW z$whQ}lU(D%*2KfvQ^SWw>c@)i=vAzhtl=8O?aDANnC?;$K?&)Cy@os@;~D)54hSAm6lSAjK*m%o{s zv^4WlE8+M~C31yeweoChl{Wc>;0==vf7eErW{t$dC|kDGGhkds1!B(>bb8>HmOPl3 z5NpN`#AX!i6$UG^`LK{2%3Bx)!sbeQl~_Rk#G%(yt2l$z635QF*a*`2jr&0Ezx;K* z=Y7EL3%fs;rx4+tQ;6_}E<|{7ZNyR%YjTxJp1{PiR|507D*>IP;7Y(OaRu75OsutM zF9SKZgbZ=lTVfX_T3J7oSVt7_QVKVio>^+O;pz*fh1?pvx(b5*7v(=9bXw-xsAK5Qq`NBSXkGTl@T0oi<+7z(%; zdWaZ$4@w9l@%2!(XcYOCCa%Abp^E#1;zR>pqWt4tiT>x}LrU-KMKT&>YOg2mDZCWGBu;#~{vA@-?BMM`vBj-8d#0Q^)5jb3%6ZSbkn+mLW`574k$B|LOZ4%#8S6q#y==MWRA z8O@w%7!{f(CQ`eU>_l;wBH3S|{0e!n8*$Vm%}4$h4^0aO|8h;Bh)ZC9^UTXZy)+H9 zgl0*)K++~jTO?g4=@v;lK+C9G^1YHClynGGN6JhGBpssd6a%uIYG{Zwtsd06M)UAG zuasfnWgLznI!+H@N3KDE24uO~RKPjzr zhAz@3&{nqq{h3w$2J5uA=u5XZ4ebkZQTK>tTPs{fcez@LInNc$;ugMSVDTJ@K7gZgB;em94ojHEBg zX^cubMxVN@^MD4SbcuTPGR*#nb`ktpt%OGDH1JWHC*A?A!X_N0$*#+Av=WZ~C|#6` zb80*FiZ3v~gEH_Kol>tN^+Ot`-b+_$K>W`20q7h0dC)W3b$VUe)?;7Iv_w4xX+CHr zZ33;P?V!`~+q#}+OS*`j1m7(2l{5&xP2yW6-9fJa*-d`{P0`;(1udaJlh$u{MeI%I z@t`Sk56wOwV{!PIR|pzt(s!ET3n`vLy<3^yKv3LdI`c#9_rmd;Xh4kd!^Y3Jh~9Ge z=QHmFHv2ofI%rR7hnak$`%zkDcI?bd4bJm#IMCTEtqW~GJLK7^-iQ&lA|F8N%mNbVYRw#f34CM>mA<_Yc^wLHjj?nfv>X+QL!RD=M;u zVf*#G%b-C285e8=eMN>#_=^1f=luOYcky_jzv-;o(BM4l{&n^djo5>4YB+=nc%Q$2 zkX=mj@vzUQxkW(c6X?H?Nkwa_SF3tp9X=cJ>A1?zwYTAB$dE7JsZclZtH(^x#Kd_IZwZV>liXhemG4 WPKgm;)qh;d$p=ULiBH9FgZsZxjH1f` delta 4692 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 delta 1706 zcmcJPe`s4(6vyvP-b?#x(>0{+Yx-JW(((Dz z`_EA5>x#pIL)+s&1C_$2IM^R+pW>z!byX~z{|uZ4L~*dzicyC6kD}uDKBErNe*{ms z?{n^tb93%F=U$`0jRL>eCN>$mmVMd(3&joDf{=y+Gk3o3;oyD>A6Njx-!%Gl3C@g` zrx3kJq2Gl=<)|Szj(yOCLr zAN;pOgeO_lv4gd8C+Ni3eIU-ux@aV<#aoM(B0fUyv`iN*GhhkkvS0udy3UG zK@BmL=P4c=5;>2lwhczF1RnAnKuHLhDN^Wg)8V3q_Mxs@q6-nn&;PDsTPsCYPl3}Y z5hO^Y$|?v}ioWnx1igmdYgeZmpkb92{&EnBMY5QI6fhjwNPq~D(F<0h7@h{*=!+t$ z0$&BI!OLI`cooF%#;2etA_XP)SCNPU@rz^m@lMcbV~R*X;9q>z5OT#1k}=R6XME*;sUYRLFM5?q+`L#%|J5 zQb%;JCsn?WzE0|%eTdbcD{;!Y;>tDhrZm1rsg&xO!kx0Q^vLAI_~c>ydkqU&yG_w( zO63K5D%Fhd`P42hnct>#iA&_{h8djT|7e!#R^@`2rMZ;O3+9RLZ@4mCOmBfk(+`#n zi$a7X95j}0ps&&=P#Om_s+`AQg{5skiwF%@Vkx7^;_8R#I@X9MX@I)2s_a5}+k}Rv z#+%jf$fUBGoWy8Ej5>1Abcw#p)Zp2i&qny7`F3`;ME)4%GGS)+td=N?s30MWrfcvC z+uvW`{d?vA!*loYuq6E_?+@*^tNIVM&m+9-cwzjrq<#JVcjnI=uFU^rYLEG)KaO_v GE#)`#+gT9+ diff --git a/TheWorstEngine/Developer/KeyManager(unused).cs b/TheWorstEngine/Developer/KeyManager(unused).cs new file mode 100644 index 0000000..3399a0c --- /dev/null +++ b/TheWorstEngine/Developer/KeyManager(unused).cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.Reflection; + +namespace TheWorstEngine.Developer +{ + /// + /// 键盘钩子 + /// [以下代码来自某网友,并非本人原创] + /// + class KeyManager + { + public event KeyEventHandler KeyDownEvent; + public event KeyPressEventHandler KeyPressEvent; + public event KeyEventHandler KeyUpEvent; + + public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam); + static int hKeyboardHook = 0; //声明键盘钩子处理的初始值 + //值在Microsoft SDK的Winuser.h里查询 + public const int WH_KEYBOARD_LL = 13; //线程键盘钩子监听鼠标消息设为2,全局键盘监听鼠标消息设为13 + HookProc KeyboardHookProcedure; //声明KeyboardHookProcedure作为HookProc类型 + //键盘结构 + [StructLayout(LayoutKind.Sequential)] + public class KeyboardHookStruct + { + public int vkCode; //定一个虚拟键码。该代码必须有一个价值的范围1至254 + public int scanCode; // 指定的硬件扫描码的关键 + public int flags; // 键标志 + public int time; // 指定的时间戳记的这个讯息 + public int dwExtraInfo; // 指定额外信息相关的信息 + } + //使用此功能,安装了一个钩子 + [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] + public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId); + + + //调用此函数卸载钩子 + [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] + public static extern bool UnhookWindowsHookEx(int idHook); + + + //使用此功能,通过信息钩子继续下一个钩子 + [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] + public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam); + + // 取得当前线程编号(线程钩子需要用到) + [DllImport("kernel32.dll")] + static extern int GetCurrentThreadId(); + + //使用WINDOWS API函数代替获取当前实例的函数,防止钩子失效 + [DllImport("kernel32.dll")] + public static extern IntPtr GetModuleHandle(string name); + + public void Start() + { + // 安装键盘钩子 + if (hKeyboardHook == 0) + { + KeyboardHookProcedure = new HookProc(KeyboardHookProc); + hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, GetModuleHandle(System.Diagnostics.Process.GetCurrentProcess().MainModule.ModuleName), 0); + //hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); + //************************************ + //键盘线程钩子 + //SetWindowsHookEx( 2,KeyboardHookProcedure, IntPtr.Zero, GetCurrentThreadId());//指定要监听的线程idGetCurrentThreadId(), + //键盘全局钩子,需要引用空间(using System.Reflection;) + //SetWindowsHookEx( 13,MouseHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0); + // + //关于SetWindowsHookEx (int idHook, HookProc lpfn, IntPtr hInstance, int threadId)函数将钩子加入到钩子链表中,说明一下四个参数: + //idHook 钩子类型,即确定钩子监听何种消息,上面的代码中设为2,即监听键盘消息并且是线程钩子,如果是全局钩子监听键盘消息应设为13, + //线程钩子监听鼠标消息设为7,全局钩子监听鼠标消息设为14。lpfn 钩子子程的地址指针。如果dwThreadId参数为0 或是一个由别的进程创建的 + //线程的标识,lpfn必须指向DLL中的钩子子程。 除此以外,lpfn可以指向当前进程的一段钩子子程代码。钩子函数的入口地址,当钩子钩到任何 + //消息后便调用这个函数。hInstance应用程序实例的句柄。标识包含lpfn所指的子程的DLL。如果threadId 标识当前进程创建的一个线程,而且子 + //程代码位于当前进程,hInstance必须为NULL。可以很简单的设定其为本应用程序的实例句柄。threaded 与安装的钩子子程相关联的线程的标识符 + //如果为0,钩子子程与所有的线程关联,即为全局钩子 + //************************************ + //如果SetWindowsHookEx失败 + if (hKeyboardHook == 0) + { + Stop(); + throw new Exception("安装键盘钩子失败"); + } + } + } + public void Stop() + { + bool retKeyboard = true; + + + if (hKeyboardHook != 0) + { + retKeyboard = UnhookWindowsHookEx(hKeyboardHook); + hKeyboardHook = 0; + } + + if (!(retKeyboard)) throw new Exception("卸载钩子失败!"); + } + //ToAscii职能的转换指定的虚拟键码和键盘状态的相应字符或字符 + [DllImport("user32")] + public static extern int ToAscii(int uVirtKey, //[in] 指定虚拟关键代码进行翻译。 + int uScanCode, // [in] 指定的硬件扫描码的关键须翻译成英文。高阶位的这个值设定的关键,如果是(不压) + byte[] lpbKeyState, // [in] 指针,以256字节数组,包含当前键盘的状态。每个元素(字节)的数组包含状态的一个关键。如果高阶位的字节是一套,关键是下跌(按下)。在低比特,如果设置表明,关键是对切换。在此功能,只有肘位的CAPS LOCK键是相关的。在切换状态的NUM个锁和滚动锁定键被忽略。 + byte[] lpwTransKey, // [out] 指针的缓冲区收到翻译字符或字符。 + int fuState); // [in] Specifies whether a menu is active. This parameter must be 1 if a menu is active, or 0 otherwise. + + //获取按键的状态 + [DllImport("user32")] + public static extern int GetKeyboardState(byte[] pbKeyState); + + + [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] + private static extern short GetKeyState(int vKey); + + private const int WM_KEYDOWN = 0x100;//KEYDOWN + private const int WM_KEYUP = 0x101;//KEYUP + private const int WM_SYSKEYDOWN = 0x104;//SYSKEYDOWN + private const int WM_SYSKEYUP = 0x105;//SYSKEYUP + + private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) + { + // 侦听键盘事件 + if ((nCode >= 0) && (KeyDownEvent != null || KeyUpEvent != null || KeyPressEvent != null)) + { + KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct)); + // raise KeyDown + if (KeyDownEvent != null && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)) + { + Keys keyData = (Keys)MyKeyboardHookStruct.vkCode; + KeyEventArgs e = new KeyEventArgs(keyData); + KeyDownEvent(this, e); + } + + //键盘按下 + if (KeyPressEvent != null && wParam == WM_KEYDOWN) + { + byte[] keyState = new byte[256]; + GetKeyboardState(keyState); + + byte[] inBuffer = new byte[2]; + if (ToAscii(MyKeyboardHookStruct.vkCode, MyKeyboardHookStruct.scanCode, keyState, inBuffer, MyKeyboardHookStruct.flags) == 1) + { + KeyPressEventArgs e = new KeyPressEventArgs((char)inBuffer[0]); + KeyPressEvent(this, e); + } + } + + // 键盘抬起 + if (KeyUpEvent != null && (wParam == WM_KEYUP || wParam == WM_SYSKEYUP)) + { + Keys keyData = (Keys)MyKeyboardHookStruct.vkCode; + KeyEventArgs e = new KeyEventArgs(keyData); + KeyUpEvent(this, e); + } + + } + //如果返回1,则结束消息,这个消息到此为止,不再传递。 + //如果返回0或调用CallNextHookEx函数则消息出了这个钩子继续往下传递,也就是传给消息真正的接受者 + return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam); + } + ~KeyManager() + { + Stop(); + } + } +} \ No newline at end of file diff --git a/TheWorstEngine/Developer/Mp3Player(unused).cs b/TheWorstEngine/Developer/Mp3Player(unused).cs new file mode 100644 index 0000000..0ab9150 --- /dev/null +++ b/TheWorstEngine/Developer/Mp3Player(unused).cs @@ -0,0 +1,156 @@ +using System; +using System.Runtime.InteropServices; + +namespace TheWorstEngine.Developer +{ + /// + /// 播放MP3文件 + /// + public class Mp3Player + { + //定义API函数使用的字符串变量 + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] + private string Name = ""; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + private string durLength = ""; + + [MarshalAs(UnmanagedType.LPTStr, SizeConst = 128)] + private string TemStr = ""; + + private int ilong; + + //定义播放状态枚举变量 + public enum State + { + mPlaying = 1, + mPuase = 2, + mStop = 3 + }; + + //结构变量 + public struct structMCI + { + public bool bMut; + public int iDur; + public int iPos; + public int iVol; + public int iBal; + public string iName; + public State state; + }; + + public structMCI mc = new structMCI(); + + //取得播放文件属性 + public string FileName + { + get + { + return mc.iName; + } + set + { + //ASCIIEncoding asc = new ASCIIEncoding(); + try + { + TemStr = ""; + TemStr = TemStr.PadLeft(127, Convert.ToChar(" ")); + Name = Name.PadLeft(260, Convert.ToChar(" ")); + mc.iName = value; + ilong = APIClass.GetShortPathName(mc.iName, Name, Name.Length); + Name = GetCurrPath(Name); + //Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media"; + Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media"; + ilong = APIClass.mciSendString("close all", TemStr, TemStr.Length, 0); + ilong = APIClass.mciSendString(Name, TemStr, TemStr.Length, 0); + ilong = APIClass.mciSendString("set media time format milliseconds", TemStr, TemStr.Length, 0); + mc.state = State.mStop; + } + catch + { + } + } + } + + //播放 + public void play() + { + TemStr = ""; + TemStr = TemStr.PadLeft(127, Convert.ToChar(" ")); + APIClass.mciSendString("play media", TemStr, TemStr.Length, 0); + mc.state = State.mPlaying; + } + + //停止 + public void StopT() + { + TemStr = ""; + TemStr = TemStr.PadLeft(128, Convert.ToChar(" ")); + ilong = APIClass.mciSendString("close media", TemStr, 128, 0); + ilong = APIClass.mciSendString("close all", TemStr, 128, 0); + mc.state = State.mStop; + } + + public void Puase() + { + TemStr = ""; + TemStr = TemStr.PadLeft(128, Convert.ToChar(" ")); + ilong = APIClass.mciSendString("pause media", TemStr, TemStr.Length, 0); + mc.state = State.mPuase; + } + + private string GetCurrPath(string name) + { + if (name.Length < 1) return ""; + name = name.Trim(); + name = name.Substring(0, name.Length - 1); + return name; + } + + //总时间 + public int Duration + { + get + { + durLength = ""; + durLength = durLength.PadLeft(128, Convert.ToChar(" ")); + APIClass.mciSendString("status media length", durLength, durLength.Length, 0); + durLength = durLength.Trim(); + if (durLength == "") return 0; + return (int)(Convert.ToDouble(durLength) / 1000f); + } + } + + //当前时间 + public int CurrentPosition + { + get + { + durLength = ""; + durLength = durLength.PadLeft(128, Convert.ToChar(" ")); + APIClass.mciSendString("status media position", durLength, durLength.Length, 0); + mc.iPos = (int)(Convert.ToDouble(durLength) / 1000f); + return mc.iPos; + } + } + } + + public class APIClass + { + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + public static extern int GetShortPathName( + string lpszLongPath, + string shortFile, + int cchBuffer + ); + + [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)] + public static extern int mciSendString( + string lpstrCommand, + string lpstrReturnString, + int uReturnLength, + int hwndCallback + ); + } +} diff --git a/TheWorstEngine/TheWorstEngine.csproj b/TheWorstEngine/TheWorstEngine.csproj index 5331705..a9939ca 100644 --- a/TheWorstEngine/TheWorstEngine.csproj +++ b/TheWorstEngine/TheWorstEngine.csproj @@ -36,6 +36,9 @@ + + ..\packages\NAudio.1.10.0\lib\net35\NAudio.dll + @@ -49,7 +52,8 @@ - + + @@ -61,6 +65,7 @@ True Resources.resx + SettingsSingleFileGenerator Settings.Designer.cs diff --git a/TheWorstEngine/bin/Debug/NAudio.dll b/TheWorstEngine/bin/Debug/NAudio.dll new file mode 100644 index 0000000000000000000000000000000000000000..84643f17cb00c24bb19847a3188c7258473b581d GIT binary patch literal 513536 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

?`24U~?|j&u-j5UzX+Ahj9OVSw6(B5Bp== z@KLe`I}RKTuFJmls}PCdqh(`uxl(v*8n_MGsh=@&9>ux*W8`9v>-za$_!w!zam}fp zp5bGqB6IzWlR;=0kK*91cj4pY!(>ixoUDze{b!;%P8QJm{CvrHd70Oz_8u?)W>b5Q zm-pD`Og)}WkXAm`&kgWIa0vU-VR-AIIZ;+&{|%l9uF0nU@~W)IrvCD(Y>Ia3BU^T* zIF~7oZXs7&BWR-XI`uQUN2)s=X;&ssUJaBr; zT$zr}71>Yf@nou;L2=O$mWMm0@*9rFg5L?BDsQqULI0IOQ)LG@j_UFA@!hokcy{H_ z;jL+~{8@I%c#l{aK245-{Z@~M`get~0n_C~_DFDum@YqJ7Z>Z_W6Y36=p3~VJQn;V z$D92Rt``KpF1K<#8XVzyUG7FZ+dorYr{%GJMfgnFb}{AOxR);f8!{H1qr$->%r|5z z+FAci*$M3&|KF57Ij-A(Q}~-wkK4}vur2&88ARsx&yykONg}7cuFpLABsy17d*#U% zWN!aF8P4&|FkWYR^JF{rE^wePPo}fI)pdNf?96@;9O#=ZUm$aObL1d&3I3k;`|vq( z8CxG8kA%;aUz54K`EtvB>*vdzehv}&^0=Sx8uMlG`+EDKJ@3Nx`S1d{hfV#pKptgN ze=U%uY})<;d5ul&Q6R-qs!w`eqd- z|33H~`7{}ymwLc@M@HP2-#c<1$7%d}N50Fx3gg+I;qS-~*>wJ}P_ASr!1=^K;S1$D zGS~mRaxHMQ ~=WRy01nFR#(^+&=G1{WT+~Z%+Sx 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 z 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ℜ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 + + + NAudio + + + +

+ a-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts an a-law encoded byte to a 16 bit linear sample + + a-law encoded byte + Linear sample + + + + A-law encoder + + + + + Encodes a single 16 bit sample to a-law + + 16 bit PCM sample + a-law encoded byte + + + + SpanDSP - a series of DSP components for telephony + + g722_decode.c - The ITU G.722 codec, decode part. + + Written by Steve Underwood <steveu@coppice.org> + + Copyright (C) 2005 Steve Underwood + Ported to C# by Mark Heath 2011 + + Despite my general liking of the GPL, I place my own contributions + to this code in the public domain for the benefit of all mankind - + even the slimy ones who might try to proprietize my work and use it + to my detriment. + + Based in part on a single channel G.722 codec which is: + Copyright (c) CMU 1993 + Computer Science, Speech Group + Chengxiang Lu and Alex Hauptmann + + + + + hard limits to 16 bit samples + + + + + Decodes a buffer of G722 + + Codec state + Output buffer (to contain decompressed PCM samples) + + Number of bytes in input G722 data to decode + Number of samples written into output buffer + + + + Encodes a buffer of G722 + + Codec state + Output buffer (to contain encoded G722) + PCM 16 bit samples to encode + Number of samples in the input buffer to encode + Number of encoded bytes written into output buffer + + + + Stores state to be used between calls to Encode or Decode + + + + + ITU Test Mode + TRUE if the operating in the special ITU test mode, with the band split filters disabled. + + + + + TRUE if the G.722 data is packed + + + + + 8kHz Sampling + TRUE if encode from 8k samples/second + + + + + Bits Per Sample + 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. + + + + + Signal history for the QMF (x) + + + + + Band + + + + + In bit buffer + + + + + Number of bits in InBuffer + + + + + Out bit buffer + + + + + Number of bits in OutBuffer + + + + + Creates a new instance of G722 Codec State for a + new encode or decode session + + Bitrate (typically 64000) + Special options + + + + Band data for G722 Codec + + + + s + + + sp + + + sz + + + r + + + a + + + ap + + + p + + + d + + + b + + + bp + + + sg + + + nb + + + det + + + + G722 Flags + + + + + None + + + + + Using a G722 sample rate of 8000 + + + + + Packed + + + + + mu-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts a mu-law encoded byte to a 16 bit linear sample + + mu-law encoded byte + Linear sample + + + + mu-law encoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + Encodes a single 16 bit sample to mu-law + + 16 bit PCM sample + mu-law encoded byte + + + + Audio Capture Client + + + + + Gets a pointer to the buffer + + Pointer to the buffer + + + + Gets a pointer to the buffer + + Number of frames to read + Buffer flags + Pointer to the buffer + + + + Gets the size of the next packet + + + + + Release buffer + + Number of frames written + + + + Release the COM object + + + + + Windows CoreAudio AudioClient + + + + + Retrieves the stream format that the audio engine uses for its internal processing of shared-mode streams. + Can be called before initialize + + + + + Initializes the Audio Client + + Share Mode + Stream Flags + Buffer Duration + Periodicity + Wave Format + Audio Session GUID (can be null) + + + + Retrieves the size (maximum capacity) of the audio buffer associated with the endpoint. (must initialize first) + + + + + Retrieves the maximum latency for the current stream and can be called any time after the stream has been initialized. + + + + + Retrieves the number of frames of padding in the endpoint buffer (must initialize first) + + + + + Retrieves the length of the periodic interval separating successive processing passes by the audio engine on the data in the endpoint buffer. + (can be called before initialize) + + + + + Gets the minimum device period + (can be called before initialize) + + + + + Returns the AudioStreamVolume service for this AudioClient. + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Gets the AudioClockClient service + + + + + Gets the AudioRenderClient service + + + + + Gets the AudioCaptureClient service + + + + + Determines whether if the specified output format is supported + + The share mode. + The desired format. + True if the format is supported + + + + Determines if the specified output format is supported in shared mode + + Share Mode + Desired Format + Output The closest match format. + True if the format is supported + + + + Starts the audio stream + + + + + Stops the audio stream. + + + + + Set the Event Handle for buffer synchro. + + The Wait Handle to setup + + + + Resets the audio stream + Reset is a control method that the client calls to reset a stopped audio stream. + Resetting the stream flushes all pending data and resets the audio clock stream + position to 0. This method fails if it is called on a stream that is not stopped + + + + + Dispose + + + + + Audio Client Buffer Flags + + + + + None + + + + + AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY + + + + + AUDCLNT_BUFFERFLAGS_SILENT + + + + + AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR + + + + + The AudioClientProperties structure is used to set the parameters that describe the properties of the client's audio stream. + + http://msdn.microsoft.com/en-us/library/windows/desktop/hh968105(v=vs.85).aspx + + + + The size of the buffer for the audio stream. + + + + + Boolean value to indicate whether or not the audio stream is hardware-offloaded + + + + + An enumeration that is used to specify the category of the audio stream. + + + + + A bit-field describing the characteristics of the stream. Supported in Windows 8.1 and later. + + + + + AUDCLNT_SHAREMODE + + + + + AUDCLNT_SHAREMODE_SHARED, + + + + + AUDCLNT_SHAREMODE_EXCLUSIVE + + + + + AUDCLNT_STREAMFLAGS + + + + + None + + + + + AUDCLNT_STREAMFLAGS_CROSSPROCESS + + + + + AUDCLNT_STREAMFLAGS_LOOPBACK + + + + + AUDCLNT_STREAMFLAGS_EVENTCALLBACK + + + + + AUDCLNT_STREAMFLAGS_NOPERSIST + + + + + Defines values that describe the characteristics of an audio stream. + + + + + No stream options. + + + + + The audio stream is a 'raw' stream that bypasses all signal processing except for endpoint specific, always-on processing in the APO, driver, and hardware. + + + + + Audio Clock Client + + + + + Characteristics + + + + + Frequency + + + + + Get Position + + + + + Adjusted Position + + + + + Can Adjust Position + + + + + Dispose + + + + + Audio Endpoint Volume + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + On Volume Notification + + + + + Volume Range + + + + + Hardware Support + + + + + Step Information + + + + + Channels + + + + + Master Volume Level + + + + + Master Volume Level Scalar + + + + + Mute + + + + + Volume Step Up + + + + + Volume Step Down + + + + + Creates a new Audio endpoint volume + + IAudioEndpointVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Audio Endpoint Volume Channel + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + Volume Level + + + + + Volume Level Scalar + + + + + Audio Endpoint Volume Channels + + + + + Channel Count + + + + + Indexer - get a specific channel + + + + + Audio Endpoint Volume Notifiaction Delegate + + Audio Volume Notification Data + + + + Audio Endpoint Volume Step Information + + + + + Step + + + + + StepCount + + + + + Audio Endpoint Volume Volume Range + + + + + Minimum Decibels + + + + + Maximum Decibels + + + + + Increment Decibels + + + + + Audio Meter Information + + + + + Peak Values + + + + + Hardware Support + + + + + Master Peak Value + + + + + Audio Meter Information Channels + + + + + Metering Channel Count + + + + + Get Peak value + + Channel index + Peak value + + + + Audio Render Client + + + + + Gets a pointer to the buffer + + Number of frames requested + Pointer to the buffer + + + + Release buffer + + Number of frames written + Buffer flags + + + + Release the COM object + + + + + AudioSessionControl object for information + regarding an audio session + + + + + Constructor. + + + + + + Dispose + + + + + Finalizer + + + + + Audio meter information of the audio session. + + + + + Simple audio volume of the audio session (for volume and mute status). + + + + + The current state of the audio session. + + + + + The name of the audio session. + + + + + the path to the icon shown in the mixer. + + + + + The session identifier of the audio session. + + + + + The session instance identifier of the audio session. + + + + + The process identifier of the audio session. + + + + + Is the session a system sounds session. + + + + + the grouping param for an audio session grouping + + + + + + For chanigng the grouping param and supplying the context of said change + + + + + + + Registers an even client for callbacks + + + + + + Unregisters an event client from receiving callbacks + + + + + + AudioSessionEvents callback implementation + + + + + Constructor. + + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + AudioSessionManager + + Designed to manage audio sessions and in particuar the + SimpleAudioVolume interface to adjust a session volume + + + + + Session created delegate + + + + + Occurs when audio session has been added (for example run another program that use audio playback). + + + + + SimpleAudioVolume object + for adjusting the volume for the user session + + + + + AudioSessionControl object + for registring for callbacks and other session information + + + + + Refresh session of current device. + + + + + Returns list of sessions of current device. + + + + + Dispose. + + + + + Finalizer. + + + + + Specifies the category of an audio stream. + + + + + Other audio stream. + + + + + Media that will only stream when the app is in the foreground. + + + + + Media that can be streamed when the app is in the background. + + + + + Real-time communications, such as VOIP or chat. + + + + + Alert sounds. + + + + + Sound effects. + + + + + Game sound effects. + + + + + Background audio for games. + + + + + Manages the AudioStreamVolume for the . + + + + + Verify that the channel index is valid. + + + + + + + Return the current stream volumes for all channels + + An array of volume levels between 0.0 and 1.0 for each channel in the audio stream. + + + + Returns the current number of channels in this audio stream. + + + + + Return the current volume for the requested channel. + + The 0 based index into the channels. + The volume level for the channel between 0.0 and 1.0. + + + + Set the volume level for each channel of the audio stream. + + An array of volume levels (between 0.0 and 1.0) one for each channel. + + A volume level MUST be supplied for reach channel in the audio stream. + + + Thrown when does not contain elements. + + + + + Sets the volume level for one channel in the audio stream. + + The 0-based index into the channels to adjust the volume of. + The volume level between 0.0 and 1.0 for this channel of the audio stream. + + + + Dispose + + + + + Release/cleanup objects during Dispose/finalization. + + True if disposing and false if being finalized. + + + + Audio Volume Notification Data + + + + + Event Context + + + + + Muted + + + + + Guid that raised the event + + + + + Master Volume + + + + + Channels + + + + + Channel Volume + + + + + Audio Volume Notification Data + + + + + + + + + + Connector + + + + + Connects this connector to a connector in another device-topology object + + + + + Retreives the type of this connector + + + + + Retreives the data flow of this connector + + + + + Disconnects this connector from it's connected connector (if connected) + + + + + Indicates whether this connector is connected to another connector + + + + + Retreives the connector this connector is connected to (if connected) + + + + + Retreives the global ID of the connector this connector is connected to (if connected) + + + + + Retreives the device ID of the audio device this connector is connected to (if connected) + + + + + Connector Type + + + + + The connector is part of a connection of unknown type. + + + + + The connector is part of a physical connection to an auxiliary device that is installed inside the system chassis + + + + + The connector is part of a physical connection to an external device. + + + + + The connector is part of a software-configured I/O connection (typically a DMA channel) between system memory and an audio hardware device on an audio adapter. + + + + + The connector is part of a permanent connection that is fixed and cannot be configured under software control. + + + + + The connector is part of a connection to a network. + + + + + The EDataFlow enumeration defines constants that indicate the direction + in which audio data flows between an audio endpoint device and an application + + + + + Audio rendering stream. + Audio data flows from the application to the audio endpoint device, which renders the stream. + + + + + Audio capture stream. Audio data flows from the audio endpoint device that captures the stream, + to the application + + + + + Audio rendering or capture stream. Audio data can flow either from the application to the audio + endpoint device, or from the audio endpoint device to the application. + + + + + Device State + + + + + DEVICE_STATE_ACTIVE + + + + + DEVICE_STATE_DISABLED + + + + + DEVICE_STATE_NOTPRESENT + + + + + DEVICE_STATE_UNPLUGGED + + + + + DEVICE_STATEMASK_ALL + + + + + Windows CoreAudio DeviceTopology + + + + + Retrieves the number of connections associated with this device-topology object + + + + + Retrieves the connector at the supplied index + + + + + Retrieves the device id of the device represented by this device-topology object + + + + + Endpoint Hardware Support + + + + + Volume + + + + + Mute + + + + + Meter + + + + + Representation of binary large object container. + + + + + Length of binary object. + + + + + Pointer to buffer storing data. + + + + + is defined in WTypes.h + + + + + Audio Client WASAPI Error Codes (HResult) + + + + + AUDCLNT_E_NOT_INITIALIZED + + + + + AUDCLNT_E_UNSUPPORTED_FORMAT + + + + + AUDCLNT_E_DEVICE_IN_USE + + + + + AUDCLNT_E_RESOURCES_INVALIDATED + + + + + Windows CoreAudio IAudioClient interface + Defined in AudioClient.h + + + + + The GetBufferSize method retrieves the size (maximum capacity) of the endpoint buffer. + + + + + The GetService method accesses additional services from the audio client object. + + The interface ID for the requested service. + Pointer to a pointer variable into which the method writes the address of an instance of the requested interface. + + + + Defined in AudioClient.h + + + + + Defined in AudioClient.h + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier for the audio session. + + Receives the session identifier. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier of the audio session instance. + + Receives the identifier of a particular instance. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the process identifier of the audio session. + + Receives the process identifier of the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Indicates whether the session is a system sounds session. + + An HRESULT code indicating whether the operation succeeded of failed. + + + + Enables or disables the default stream attenuation experience (auto-ducking) provided by the system. + + A variable that enables or disables system auto-ducking. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Defines constants that indicate the current state of an audio session. + + + MSDN Reference: http://msdn.microsoft.com/en-us/library/dd370792.aspx + + + + + The audio session is inactive. + + + + + The audio session is active. + + + + + The audio session has expired. + + + + + Defines constants that indicate a reason for an audio session being disconnected. + + + MSDN Reference: Unknown + + + + + The user removed the audio endpoint device. + + + + + The Windows audio service has stopped. + + + + + The stream format changed for the device that the audio session is connected to. + + + + + The user logged off the WTS session that the audio session was running in. + + + + + The WTS session that the audio session was running in was disconnected. + + + + + The (shared-mode) audio session was disconnected to make the audio endpoint device available for an exclusive-mode connection. + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + interface to receive session related events + + + + + notification of volume changes including muting of audio session + + the current volume + the current mute state, true muted, false otherwise + + + + notification of display name changed + + the current display name + + + + notification of icon path changed + + the current icon path + + + + notification of the client that the volume level of an audio channel in the session submix has changed + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + + + + notification of the client that the grouping parameter for the session has changed + + >The new grouping parameter for the session. + + + + notification of the client that the stream-activity state of the session has changed + + The new session state. + + + + notification of the client that the session has been disconnected + + The reason that the audio session was disconnected. + + + + Windows CoreAudio IAudioSessionManager interface + Defined in AudioPolicy.h + + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionNotification interface + Defined in AudioPolicy.h + + + + + + + session being added + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IConnector interface + Defined in devicetopology.h + + + + + Windows CoreAudio IDeviceTopology interface + Defined in devicetopology.h + + + + + defined in MMDeviceAPI.h + + + + + IMMNotificationClient + + + + + Device State Changed + + + + + Device Added + + + + + Device Removed + + + + + Default Device Changed + + + + + Property Value Changed + + + + + + + Windows CoreAudio IPart interface + Defined in devicetopology.h + + + + + Windows CoreAudio IPartsList interface + Defined in devicetopology.h + + + + + is defined in propsys.h + + + + + Windows CoreAudio ISimpleAudioVolume interface + Defined in AudioClient.h + + + + + Sets the master volume level for the audio session. + + The new volume level expressed as a normalized value between 0.0 and 1.0. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the client volume level for the audio session. + + Receives the volume level expressed as a normalized value between 0.0 and 1.0. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Sets the muting state for the audio session. + + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the current muting state for the audio session. + + Receives the muting state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + implements IMMDeviceEnumerator + + + + + MMDevice STGM enumeration + + + + + Read-only access mode. + + + + + Write-only access mode. + + + + + Read-write access mode. + + + + + from Propidl.h. + http://msdn.microsoft.com/en-us/library/aa380072(VS.85).aspx + contains a union so we have to do an explicit layout + + + + + Value type tag. + + + + + Reserved1. + + + + + Reserved2. + + + + + Reserved3. + + + + + cVal. + + + + + bVal. + + + + + iVal. + + + + + uiVal. + + + + + lVal. + + + + + ulVal. + + + + + intVal. + + + + + uintVal. + + + + + hVal. + + + + + uhVal. + + + + + fltVal. + + + + + dblVal. + + + + + boolVal. + + + + + scode. + + + + + Date time. + + + + + Binary large object. + + + + + Pointer value. + + + + + Creates a new PropVariant containing a long value + + + + + Helper method to gets blob data + + + + + Interprets a blob as an array of structs + + + + + Gets the type of data in this PropVariant + + + + + Property value + + + + + allows freeing up memory, might turn this into a Dispose method? + + + + + Clears with a known pointer + + + + + MM Device + + + + + Initializes the device's property store. + + The storage-access mode to open store for. + Administrative client is required for Write and ReadWrite modes. + + + + Audio Client + Makes a new one each call to allow caller to manage when to dispose + n.b. should probably not be a property anymore + + + + + Audio Meter Information + + + + + Audio Endpoint Volume + + + + + AudioSessionManager instance + + + + + DeviceTopology instance + + + + + Properties + + + + + Friendly name for the endpoint + + + + + Friendly name of device + + + + + Icon path of device + + + + + Device Instance Id of Device + + + + + Device ID + + + + + Data Flow + + + + + Device State + + + + + To string + + + + + Dispose + + + + + Finalizer + + + + + Multimedia Device Collection + + + + + Device count + + + + + Get device by index + + Device index + Device at the specified index + + + + Get Enumerator + + Device enumerator + + + + MM Device Enumerator + + + + + Creates a new MM Device Enumerator + + + + + Enumerate Audio Endpoints + + Desired DataFlow + State Mask + Device Collection + + + + Get Default Endpoint + + Data Flow + Role + Device + + + + Check to see if a default audio end point exists without needing an exception. + + Data Flow + Role + True if one exists, and false if one does not exist. + + + + Get device by ID + + Device ID + Device + + + + Registers a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + Unregisters a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + + + + Called to dispose/finalize contained objects. + + True if disposing, false if called from a finalizer. + + + + PROPERTYKEY is defined in wtypes.h + + + + + Format ID + + + + + Property ID + + + + + + + + + + + Property Keys + + + + + PKEY_DeviceInterface_FriendlyName + + + + + PKEY_AudioEndpoint_FormFactor + + + + + PKEY_AudioEndpoint_ControlPanelPageProvider + + + + + PKEY_AudioEndpoint_Association + + + + + PKEY_AudioEndpoint_PhysicalSpeakers + + + + + PKEY_AudioEndpoint_GUID + + + + + PKEY_AudioEndpoint_Disable_SysFx + + + + + PKEY_AudioEndpoint_FullRangeSpeakers + + + + + PKEY_AudioEndpoint_Supports_EventDriven_Mode + + + + + PKEY_AudioEndpoint_JackSubType + + + + + PKEY_AudioEngine_DeviceFormat + + + + + PKEY_AudioEngine_OEMFormat + + + + + PKEY _Devie_FriendlyName + + + + + PKEY _Device_IconPath + + + + + Device description property. + + + + + Id of controller device for endpoint device property. + + + + + Device interface key property. + + + + + System-supplied device instance identification string, assigned by PnP manager, persistent across system restarts. + + + + + Property Store class, only supports reading properties at the moment. + + + + + Property Count + + + + + Gets property by index + + Property index + The property + + + + Contains property guid + + Looks for a specific key + True if found + + + + Indexer by guid + + Property Key + Property or null if not found + + + + Gets property key at sepecified index + + Index + Property key + + + + Gets property value at specified index + + Index + Property value + + + + Sets property value at specified key. + + Key of property to set. + Value to write. + + + + Saves a property change. + + + + + Creates a new property store + + IPropertyStore COM interface + + + + Property Store Property + + + + + Property Key + + + + + Property Value + + + + + The ERole enumeration defines constants that indicate the role + that the system has assigned to an audio endpoint device + + + + + Games, system notification sounds, and voice commands. + + + + + Music, movies, narration, and live music recording + + + + + Voice communications (talking to another person). + + + + + Collection of sessions. + + + + + Returns session at index. + + + + + + + Number of current sessions. + + + + + Windows CoreAudio SimpleAudioVolume + + + + + Creates a new Audio endpoint volume + + ISimpleAudioVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Allows the user to adjust the volume from + 0.0 to 1.0 + + + + + Mute + + + + + Represents state of a capture device + + + + + Not recording + + + + + Beginning to record + + + + + Recording in progress + + + + + Requesting stop + + + + + Audio Capture using Wasapi + See http://msdn.microsoft.com/en-us/library/dd370800%28VS.85%29.aspx + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Initializes a new instance of the class. + + The capture device. + true if sync is done with event. false use sleep. + + + + Initializes a new instance of the class. + + The capture device. + true if sync is done with event. false use sleep. + Length of the audio buffer in milliseconds. A lower value means lower latency but increased CPU usage. + + + + Share Mode - set before calling StartRecording + + + + + Current Capturing State + + + + + Capturing wave format + + + + + Gets the default audio capture device + + The default audio capture device + + + + To allow overrides to specify different flags (e.g. loopback) + + + + + Start Capturing + + + + + Stop Capturing (requests a stop, wait for RecordingStopped event to know it has finished) + + + + + Dispose + + + + + Contains the name and CLSID of a DirectX Media Object + + + + + Name + + + + + CLSID + + + + + Initializes a new instance of DmoDescriptor + + + + + DirectX Media Object Enumerator + + + + + Get audio effect names + + Audio effect names + + + + Get audio encoder names + + Audio encoder names + + + + Get audio decoder names + + Audio decoder names + + + + DMO Guids for use with DMOEnum + dmoreg.h + + + + + MediaErr.h + + + + + DMO Inplace Process Flags + + + + + DMO_INPLACE_NORMAL + + + + + DMO_INPLACE_ZERO + + + + + Return value when Process is executed with IMediaObjectInPlace + + + + + Success. There is no remaining data to process. + + + + + Success. There is still data to process. + + + + + DMO Input Data Buffer Flags + + + + + None + + + + + DMO_INPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_INPUT_DATA_BUFFERF_TIME + + + + + DMO_INPUT_DATA_BUFFERF_TIMELENGTH + + + + + http://msdn.microsoft.com/en-us/library/aa929922.aspx + DMO_MEDIA_TYPE + + + + + Major type + + + + + Major type name + + + + + Subtype + + + + + Subtype name + + + + + Fixed size samples + + + + + Sample size + + + + + Format type + + + + + Format type name + + + + + Gets the structure as a Wave format (if it is one) + + + + + Sets this object up to point to a wave format + + Wave format structure + + + + DMO Output Data Buffer + + + + + Creates a new DMO Output Data Buffer structure + + Maximum buffer size + + + + Dispose + + + + + Media Buffer + + + + + Length of data in buffer + + + + + Status Flags + + + + + Timestamp + + + + + Duration + + + + + Retrives the data in this buffer + + Buffer to receive data + Offset into buffer + + + + Is more data available + If true, ProcessOuput should be called again + + + + + DMO Output Data Buffer Flags + + + + + None + + + + + DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_OUTPUT_DATA_BUFFERF_TIME + + + + + DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH + + + + + DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE + + + + + DMO_PARTIAL_MEDIATYPE + + + + + DMO Process Output Flags + + + + + None + + + + + DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER + + + + + Chorus Phase + + + + + DSFXCHORUS_PHASE_NEG_180 + + + + + DSFXCHORUS_PHASE_NEG_90 + + + + + DSFXCHORUS_PHASE_ZERO + + + + + DSFXCHORUS_PHASE_90 + + + + + DSFXCHORUS_PHASE_180 + + + + + Chorus Wave Form + + + + + DSFXCHORUS_WAVE_TRIANGLE + + + + + DSFXCHORUS_WAVE_SIN + + + + + DMO Chorus Effect + + + + + DMO Chorus Params + + + + + DSFXCHORUS_WETDRYMIX_MIN + + + + + DSFXCHORUS_WETDRYMIX_MAX + + + + + DSFXCHORUS_WETDRYMIX_DEFAULT + + + + + DSFXCHORUS_DEPTH_MIN + + + + + DSFXCHORUS_DEPTH_MAX + + + + + DSFXCHORUS_DEPTH_DEFAULT + + + + + DSFXCHORUS_FEEDBACK_MIN + + + + + DSFXCHORUS_FEEDBACK_MAX + + + + + DSFXCHORUS_FEEDBACK_DEFAULT + + + + + DSFXCHORUS_FREQUENCY_MIN + + + + + DSFXCHORUS_FREQUENCY_MAX + + + + + DSFXCHORUS_FREQUENCY_DEFAULT + + + + + DSFXCHORUS_WAVE_DEFAULT + + + + + DSFXCHORUS_DELAY_MIN + + + + + DSFXCHORUS_DELAY_MAX + + + + + DSFXCHORUS_DELAY_DEFAULT + + + + + DSFXCHORUS_PHASE_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage by which the delay time is modulated by the low-frequency oscillator, + in hundredths of a percentage point. + + + + + Percentage of output signal to feed back into the effect's input. + + + + + Frequency of the LFO. + + + + + Waveform shape of the LFO. + + + + + Number of milliseconds the input is delayed before it is played back. + + + + + Phase differential between left and right LFOs. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Chorus + + + + + Dispose code + + + + + DMO Compressor Effect + + + + + DMO Compressor Params + + + + + DSFXCOMPRESSOR_GAIN_MIN + + + + + DSFXCOMPRESSOR_GAIN_MAX + + + + + DSFXCOMPRESSOR_GAIN_DEFAULT + + + + + DSFXCOMPRESSOR_ATTACK_MIN + + + + + DSFXCOMPRESSOR_ATTACK_MAX + + + + + DSFXCOMPRESSOR_ATTACK_DEFAULT + + + + + DSFXCOMPRESSOR_RELEASE_MIN + + + + + DSFXCOMPRESSOR_RELEASE_MAX + + + + + DSFXCOMPRESSOR_RELEASE_DEFAULT + + + + + DSFXCOMPRESSOR_THRESHOLD_MIN + + + + + DSFXCOMPRESSOR_THRESHOLD_MAX + + + + + DSFXCOMPRESSOR_THRESHOLD_DEFAULT + + + + + DSFXCOMPRESSOR_RATIO_MIN + + + + + DSFXCOMPRESSOR_RATIO_MAX + + + + + DSFXCOMPRESSOR_RATIO_DEFAULT + + + + + DSFXCOMPRESSOR_PREDELAY_MIN + + + + + DSFXCOMPRESSOR_PREDELAY_MAX + + + + + DSFXCOMPRESSOR_PREDELAY_DEFAULT + + + + + Output gain of signal after compression. + + + + + Time before compression reaches its full value. + + + + + Speed at which compression is stopped after input drops below Threshold. + + + + + Point at which compression begins, in decibels. + + + + + Compression ratio + + + + + Time after Threshold is reached before attack phase is started, in milliseconds. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Compressor + + + + + Dispose code + + + + + DMO Distortion Effect + + + + + DMO Distortion Params + + + + + DSFXDISTORTION_GAIN_MIN + + + + + DSFXDISTORTION_GAIN_MAX + + + + + DSFXDISTORTION_GAIN_DEFAULT + + + + + DSFXDISTORTION_EDGE_MIN + + + + + DSFXDISTORTION_EDGE_MAX + + + + + DSFXDISTORTION_EDGE_DEFAULT + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_DEFAULT + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_MIN + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_MAX + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_DEFAULT + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_MIN + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_MAX + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_DEFAULT + + + + + Amount of signal change after distortion. + + + + + Percentage of distortion intensity. + + + + + Center frequency of harmonic content addition. + + + + + Width of frequency band that determines range of harmonic content addition. + + + + + Filter cutoff for high-frequency harmonics attenuation. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Distortion + + + + + Dispose code + + + + + Dmo Echo Effect + + + + + DMO Echo Params + + + + + DSFXECHO_WETDRYMIX_MIN + + + + + DSFXECHO_WETDRYMIX_MAX + + + + + DSFXECHO_WETDRYMIX_DEFAULT + + + + + DSFXECHO_FEEDBACK_MIN + + + + + DSFXECHO_FEEDBACK_MAX + + + + + DSFXECHO_FEEDBACK_DEFAULT + + + + + DSFXECHO_LEFTDELAY_MIN + + + + + DSFXECHO_LEFTDELAY_MAX + + + + + DSFXECHO_LEFTDELAY_DEFAULT + + + + + DSFXECHO_RIGHTDELAY_MIN + + + + + DSFXECHO_RIGHTDELAY_MAX + + + + + DSFXECHO_RIGHTDELAY_DEFAULT + + + + + DSFXECHO_PANDELAY_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage of output fed back into input. + + + + + Delay for left channel, in milliseconds. + + + + + Delay for right channel, in milliseconds. + + + + + Value that specifies whether to swap left and right delays with each successive echo. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Echo + + + + + Dispose code + + + + + DMO Flanger Effect + + + + + DMO Flanger Params + + + + + DSFXFLANGER_WETDRYMIX_MIN + + + + + DSFXFLANGER_WETDRYMIX_MAX + + + + + DSFXFLANGER_WETDRYMIX_DEFAULT + + + + + DSFXFLANGER_DEPTH_MIN + + + + + DSFXFLANGER_DEPTH_MAX + + + + + DSFXFLANGER_DEPTH_DEFAULT + + + + + DSFXFLANGER_FEEDBACK_MIN + + + + + DSFXFLANGER_FEEDBACK_MAX + + + + + DSFXFLANGER_FEEDBACK_DEFAULT + + + + + DSFXFLANGER_FREQUENCY_MIN + + + + + DSFXFLANGER_FREQUENCY_MAX + + + + + DSFXFLANGER_FREQUENCY_DEFAULT + + + + + DSFXFLANGER_WAVE_DEFAULT + + + + + DSFXFLANGER_DELAY_MIN + + + + + DSFXFLANGER_DELAY_MAX + + + + + DSFXFLANGER_DELAY_DEFAULT + + + + + DSFXFLANGER_PHASE_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage by which the delay time is modulated by the low-frequency oscillator, + in hundredths of a percentage point. + + + + + Percentage of output signal to feed back into the effect's input. + + + + + Frequency of the LFO. + + + + + Waveform shape of the LFO. + + + + + Number of milliseconds the input is delayed before it is played back. + + + + + Phase differential between left and right LFOs. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Flanger + + + + + Dispose code + + + + + DMO Gargle Effect + + + + + DMO Gargle Params + + + + + DSFXGARGLE_RATEHZ_MIN + + + + + DSFXGARGLE_RATEHZ_MAX + + + + + DSFXGARGLE_RATEHZ_DEFAULT + + + + + DSFXGARGLE_WAVE_DEFAULT + + + + + Rate of modulation in hz + + + + + Gargle Wave Shape + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Gargle + + + + + Dispose code + + + + + DMO I3DL2Reverb Effect + + + + + DMO I3DL2Reverb Params + + + + + DSFX_I3DL2REVERB_ROOM_MIN + + + + + DSFX_I3DL2REVERB_ROOM_MAX + + + + + DSFX_I3DL2REVERB_ROOM_DEFAULT + + + + + DSFX_I3DL2REVERB_ROOMHF_MIN + + + + + DSFX_I3DL2REVERB_ROOMHF_MAX + + + + + DSFX_I3DL2REVERB_ROOMHF_DEFAULT + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT + + + + + DSFX_I3DL2REVERB_DECAYTIME_MIN + + + + + DSFX_I3DL2REVERB_DECAYTIME_MAX + + + + + DSFX_I3DL2REVERB_DECAYTIME_DEFAULT + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_MIN + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_MAX + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT + + + + + DSFX_I3DL2REVERB_REFLECTIONS_MIN + + + + + DSFX_I3DL2REVERB_REFLECTIONS_MAX + + + + + DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT + + + + + DSFX_I3DL2REVERB_REVERB_MIN + + + + + DSFX_I3DL2REVERB_REVERB_MAX + + + + + DSFX_I3DL2REVERB_REVERB_DEFAULT + + + + + DSFX_I3DL2REVERB_REVERBDELAY_MIN + + + + + DSFX_I3DL2REVERB_REVERBDELAY_MAX + + + + + DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT + + + + + DSFX_I3DL2REVERB_DIFFUSION_MIN + + + + + DSFX_I3DL2REVERB_DIFFUSION_MAX + + + + + DSFX_I3DL2REVERB_DIFFUSION_DEFAULT + + + + + DSFX_I3DL2REVERB_DENSITY_MIN + + + + + DSFX_I3DL2REVERB_DENSITY_MAX + + + + + DSFX_I3DL2REVERB_DENSITY_DEFAULT + + + + + DSFX_I3DL2REVERB_HFREFERENCE_MIN + + + + + DSFX_I3DL2REVERB_HFREFERENCE_MAX + + + + + DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT + + + + + DSFX_I3DL2REVERB_QUALITY_MIN + + + + + DSFX_I3DL2REVERB_QUALITY_MAX + + + + + DSFX_I3DL2REVERB_QUALITY_DEFAULT + + + + + Attenuation of the room effect, in millibels (mB) + + + + + Attenuation of the room high-frequency effect, in mB. + + + + + Rolloff factor for the reflected signals. + + + + + Decay time, in seconds. + + + + + Ratio of the decay time at high frequencies to the decay time at low frequencies. + + + + + Attenuation of early reflections relative to lRoom, in mB. + + + + + Delay time of the first reflection relative to the direct path, in seconds. + + + + + Attenuation of late reverberation relative to lRoom, in mB. + + + + + Time limit between the early reflections and the late reverberation relative to the time of the first reflection. + + + + + Echo density in the late reverberation decay, in percent. + + + + + Modal density in the late reverberation decay, in percent. + + + + + Reference high frequency, in hertz. + + + + + the quality of the environmental reverberation effect. Higher values produce better quality at the expense of processing time. + + + + + Sets standard reverberation parameters of a buffer. + + I3DL2EnvironmentPreset + + + + retrieves an identifier for standard reverberation parameters of a buffer. + + I3DL2EnvironmentPreset + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO I3DL2Reverb + + + + + Dispose code + + + + + DMO Parametric Equalizer Effect + + + + + DMO ParamEq Params + + + + + DSFXPARAMEQ_CENTER_MIN + + + + + DSFXPARAMEQ_CENTER_MAX + + + + + DSFXPARAMEQ_CENTER_DEFAULT + + + + + DSFXPARAMEQ_BANDWIDTH_MIN + + + + + DSFXPARAMEQ_BANDWIDTH_MAX + + + + + DSFXPARAMEQ_BANDWIDTH_DEFAULT + + + + + DSFXPARAMEQ_GAIN_MIN + + + + + DSFXPARAMEQ_GAIN_MAX + + + + + DSFXPARAMEQ_GAIN_DEFAULT + + + + + Center frequency, in hertz + + + + + Bandwidth, in semitones. + + + + + Gain + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO ParamEq + + + + + Dispose code + + + + + DMO Reverb Effect + + + + + DMO Reverb Params + + + + + DSFX_WAVESREVERB_INGAIN_MIN + + + + + DSFX_WAVESREVERB_INGAIN_MAX + + + + + DSFX_WAVESREVERB_INGAIN_DEFAULT + + + + + DSFX_WAVESREVERB_REVERBMIX_MIN + + + + + DSFX_WAVESREVERB_REVERBMIX_MAX + + + + + DSFX_WAVESREVERB_REVERBMIX_DEFAULT + + + + + DSFX_WAVESREVERB_REVERBTIME_MIN + + + + + DSFX_WAVESREVERB_REVERBTIME_MAX + + + + + DSFX_WAVESREVERB_REVERBTIME_DEFAULT + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT + + + + + Input gain of signal, in decibels (dB). + + + + + Reverb mix, in dB. + + + + + Reverb time, in milliseconds. + + + + + High-frequency reverb time ratio. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO WavesReverb + + + + + Dispose code + + + + + DSFXECHO_PANDELAY + + + + + DSFXECHO_PANDELAY_MIN + + + + + DSFXECHO_PANDELAY_MAX + + + + + Flanger Phase + + + + + DSFXFLANGER_PHASE_NEG_180 + + + + + DSFXFLANGER_PHASE_NEG_90 + + + + + DSFXFLANGER_PHASE_ZERO + + + + + DSFXFLANGER_PHASE_90 + + + + + DSFXFLANGER_PHASE_180 + + + + + Flanger Wave Form + + + + + DSFXFLANGER_WAVE_TRIANGLE + + + + + DSFXFLANGER_WAVE_SIN + + + + + Gargle Wave Shape + + + + + DSFXGARGLE_WAVE_TRIANGLE + + + + + DSFXGARGLE_WAVE_SQUARE + + + + + I3DL2 Reverberation Presets + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CITY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE + + + + + Interface of DMO Effectors + + Parameters of the effect to be used + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + IMediaBuffer Interface + + + + + Set Length + + Length + HRESULT + + + + Get Max Length + + Max Length + HRESULT + + + + Get Buffer and Length + + Pointer to variable into which to write the Buffer Pointer + Pointer to variable into which to write the Valid Data Length + HRESULT + + + + defined in mediaobj.h + + + + + defined in mediaobj.h + + + + + defined in Medparam.h + + + + + Windows Media Resampler Props + wmcodecdsp.h + + + + + Range is 1 to 60 + + + + + Specifies the channel matrix. + + + + + Attempting to implement the COM IMediaBuffer interface as a .NET object + Not sure what will happen when I pass this to an unmanaged object + + + + + Creates a new Media Buffer + + Maximum length in bytes + + + + Dispose and free memory for buffer + + + + + Finalizer + + + + + Set length of valid data in the buffer + + length + HRESULT + + + + Gets the maximum length of the buffer + + Max length (output parameter) + HRESULT + + + + Gets buffer and / or length + + Pointer to variable into which buffer pointer should be written + Pointer to variable into which valid data length should be written + HRESULT + + + + Length of data in the media buffer + + + + + Loads data into this buffer + + Data to load + Number of bytes to load + + + + Retrieves the data in the output buffer + + buffer to retrieve into + offset within that buffer + + + + Media Object + + + + + Creates a new Media Object + + Media Object COM interface + + + + Number of input streams + + + + + Number of output streams + + + + + Gets the input media type for the specified input stream + + Input stream index + Input type index + DMO Media Type or null if there are no more input types + + + + Gets the DMO Media Output type + + The output stream + Output type index + DMO Media Type or null if no more available + + + + retrieves the media type that was set for an output stream, if any + + Output stream index + DMO Media Type or null if no more available + + + + Enumerates the supported input types + + Input stream index + Enumeration of input types + + + + Enumerates the output types + + Output stream index + Enumeration of supported output types + + + + Querys whether a specified input type is supported + + Input stream index + Media type to check + true if supports + + + + Sets the input type helper method + + Input stream index + Media type + Flags (can be used to test rather than set) + + + + Sets the input type + + Input stream index + Media Type + + + + Sets the input type to the specified Wave format + + Input stream index + Wave format + + + + Requests whether the specified Wave format is supported as an input + + Input stream index + Wave format + true if supported + + + + Helper function to make a DMO Media Type to represent a particular WaveFormat + + + + + Checks if a specified output type is supported + n.b. you may need to set the input type first + + Output stream index + Media type + True if supported + + + + Tests if the specified Wave Format is supported for output + n.b. may need to set the input type first + + Output stream index + Wave format + True if supported + + + + Helper method to call SetOutputType + + + + + Sets the output type + n.b. may need to set the input type first + + Output stream index + Media type to set + + + + Set output type to the specified wave format + n.b. may need to set input type first + + Output stream index + Wave format + + + + Get Input Size Info + + Input Stream Index + Input Size Info + + + + Get Output Size Info + + Output Stream Index + Output Size Info + + + + Process Input + + Input Stream index + Media Buffer + Flags + Timestamp + Duration + + + + Process Output + + Flags + Output buffer count + Output buffers + + + + Gives the DMO a chance to allocate any resources needed for streaming + + + + + Tells the DMO to free any resources needed for streaming + + + + + Gets maximum input latency + + input stream index + Maximum input latency as a ref-time + + + + Flushes all buffered data + + + + + Report a discontinuity on the specified input stream + + Input Stream index + + + + Is this input stream accepting data? + + Input Stream index + true if accepting data + + + + Experimental code, not currently being called + Not sure if it is necessary anyway + + + + + Media Object InPlace + + + + + Creates a new Media Object InPlace + + Media Object InPlace COM Interface + + + + Processes a block of data. + The application supplies a pointer to a block of input data. The DMO processes the data in place. + + Size of the data, in bytes. + offset into buffer + In/Out Data Buffer + Start time of the data. + DmoInplaceProcessFlags + Return value when Process is executed with IMediaObjectInPlace + + + + Creates a copy of the DMO in its current state. + + Copyed MediaObjectInPlace + + + + Retrieves the latency introduced by this DMO. + + The latency, in 100-nanosecond units + + + + Get Media Object + + Media Object + + + + Dispose code + + + + + Media Object Size Info + + + + + Minimum Buffer Size, in bytes + + + + + Max Lookahead + + + + + Alignment + + + + + Media Object Size Info + + + + + ToString + + + + + MP_PARAMINFO + + + + + MP_TYPE + + + + + MPT_INT + + + + + MPT_FLOAT + + + + + MPT_BOOL + + + + + MPT_ENUM + + + + + MPT_MAX + + + + + MP_CURVE_TYPE + + + + + uuids.h, ksuuids.h + + + + + From wmcodecsdp.h + Implements: + - IMediaObject + - IMFTransform (Media foundation - we will leave this for now as there is loads of MF stuff) + - IPropertyStore + - IWMResamplerProps + Can resample PCM or IEEE + + + + + DMO Resampler + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + implements IMediaObject (DirectX Media Object) + implements IMFTransform (Media Foundation Transform) + On Windows XP, it is always an MM (if present at all) + + + + + Windows Media MP3 Decoder (as a DMO) + WORK IN PROGRESS - DO NOT USE! + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + BiQuad filter + + + + + Passes a single sample through the filter + + Input sample + Output sample + + + + Set this up as a low pass filter + + Sample Rate + Cut-off Frequency + Bandwidth + + + + Set this up as a peaking EQ + + Sample Rate + Centre Frequency + Bandwidth (Q) + Gain in decibels + + + + Set this as a high pass filter + + + + + Create a low pass filter + + + + + Create a High pass filter + + + + + Create a bandpass filter with constant skirt gain + + + + + Create a bandpass filter with constant peak gain + + + + + Creates a notch filter + + + + + Creaes an all pass filter + + + + + Create a Peaking EQ + + + + + H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) + + + + a "shelf slope" parameter (for shelving EQ only). + When S = 1, the shelf slope is as steep as it can be and remain monotonically + increasing or decreasing gain with frequency. The shelf slope, in dB/octave, + remains proportional to S for all other values for a fixed f0/Fs and dBgain. + Gain in decibels + + + + H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) + + + + + + + + + + Type to represent complex number + + + + + Real Part + + + + + Imaginary Part + + + + + Envelope generator (ADSR) + + + + + Envelope State + + + + + Idle + + + + + Attack + + + + + Decay + + + + + Sustain + + + + + Release + + + + + Creates and Initializes an Envelope Generator + + + + + Attack Rate (seconds * SamplesPerSecond) + + + + + Decay Rate (seconds * SamplesPerSecond) + + + + + Release Rate (seconds * SamplesPerSecond) + + + + + Sustain Level (1 = 100%) + + + + + Sets the attack curve + + + + + Sets the decay release curve + + + + + Read the next volume multiplier from the envelope generator + + A volume multiplier + + + + Trigger the gate + + If true, enter attack phase, if false enter release phase (unless already idle) + + + + Current envelope state + + + + + Reset to idle state + + + + + Get the current output level + + + + + Summary description for FastFourierTransform. + + + + + This computes an in-place complex-to-complex FFT + x and y are the real and imaginary arrays of 2^m points. + + + + + Applies a Hamming Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hamming window + + + + Applies a Hann Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hann window + + + + Applies a Blackman-Harris Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Blackmann-Harris window + + + + Summary description for ImpulseResponseConvolution. + + + + + A very simple mono convolution algorithm + + + This will be very slow + + + + + This is actually a downwards normalize for data that will clip + + + + + SMB Pitch Shifter + + + + + Pitch Shift + + + + + Pitch Shift + + + + + Short Time Fourier Transform + + + + + Fully managed resampler, based on Cockos WDL Resampler + + + + + Creates a new Resampler + + + + + sets the mode + if sinc set, it overrides interp or filtercnt + + + + + Sets the filter parameters + used for filtercnt>0 but not sinc + + + + + Set feed mode + + if true, that means the first parameter to ResamplePrepare will specify however much input you have, not how much you want + + + + Reset + + + + + Prepare + note that it is safe to call ResamplePrepare without calling ResampleOut (the next call of ResamplePrepare will function as normal) + nb inbuffer was WDL_ResampleSample **, returning a place to put the in buffer, so we return a buffer and offset + + req_samples is output samples desired if !wantInputDriven, or if wantInputDriven is input samples that we have + + + + returns number of samples desired (put these into *inbuffer) + + + + Channel Mode + + + + + Stereo + + + + + Joint Stereo + + + + + Dual Channel + + + + + Mono + + + + + An ID3v2 Tag + + + + + Reads an ID3v2 tag from a stream + + + + + Creates a new ID3v2 tag from a collection of key-value pairs. + + A collection of key-value pairs containing the tags to include in the ID3v2 tag. + A new ID3v2 tag + + + + Convert the frame size to a byte array. + + The frame body size. + + + + + Creates an ID3v2 frame for the given key-value pair. + + + + + + + + Gets the Id3v2 Header size. The size is encoded so that only 7 bits per byte are actually used. + + + + + + + Creates the Id3v2 tag header and returns is as a byte array. + + The Id3v2 frames that will be included in the file. This is used to calculate the ID3v2 tag size. + + + + + Creates the Id3v2 tag for the given key-value pairs and returns it in the a stream. + + + + + + + Raw data from this tag + + + + + Interface for MP3 frame by frame decoder + + + + + Decompress a single MP3 frame + + Frame to decompress + Output buffer + Offset within output buffer + Bytes written to output buffer + + + + Tell the decoder that we have repositioned + + + + + PCM format that we are converting into + + + + + Represents an MP3 Frame + + + + + Reads an MP3 frame from a stream + + input stream + A valid MP3 frame, or null if none found + + + Reads an MP3Frame from a stream + http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm has some good info + also see http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx + + A valid MP3 frame, or null if none found + + + + Constructs an MP3 frame + + + + + checks if the four bytes represent a valid header, + if they are, will parse the values into Mp3Frame + + + + + Sample rate of this frame + + + + + Frame length in bytes + + + + + Bit Rate + + + + + Raw frame data (includes header bytes) + + + + + MPEG Version + + + + + MPEG Layer + + + + + Channel Mode + + + + + The number of samples in this frame + + + + + The channel extension bits + + + + + The bitrate index (directly from the header) + + + + + Whether the Copyright bit is set + + + + + Whether a CRC is present + + + + + Not part of the MP3 frame itself - indicates where in the stream we found this header + + + + + MP3 Frame Decompressor using ACM + + + + + Creates a new ACM frame decompressor + + The MP3 source format + + + + Output format (PCM) + + + + + Decompresses a frame + + The MP3 frame + destination buffer + Offset within destination buffer + Bytes written into destination buffer + + + + Resets the MP3 Frame Decompressor after a reposition operation + + + + + Disposes of this MP3 frame decompressor + + + + + Finalizer ensuring that resources get released properly + + + + + MPEG Layer flags + + + + + Reserved + + + + + Layer 3 + + + + + Layer 2 + + + + + Layer 1 + + + + + MPEG Version Flags + + + + + Version 2.5 + + + + + Reserved + + + + + Version 2 + + + + + Version 1 + + + + + Represents a Xing VBR header + + + + + Load Xing Header + + Frame + Xing Header + + + + Sees if a frame contains a Xing header + + + + + Number of frames + + + + + Number of bytes + + + + + VBR Scale property + + + + + The MP3 frame + + + + + ASIO 64 bit value + Unfortunately the ASIO API was implemented it before compiler supported consistently 64 bit + integer types. By using the structure the data layout on a little-endian system like the + Intel x86 architecture will result in a "non native" storage of the 64 bit data. The most + significant 32 bit are stored first in memory, the least significant bits are stored in the + higher memory space. However each 32 bit is stored in the native little-endian fashion + + + + + most significant bits (Bits 32..63) + + + + + least significant bits (Bits 0..31) + + + + + ASIO Callbacks + + + + + ASIO Buffer Switch Callback + + + + + ASIO Sample Rate Did Change Callback + + + + + ASIO Message Callback + + + + + ASIO Buffer Switch Time Info Callback + + + + + Buffer switch callback + void (*bufferSwitch) (long doubleBufferIndex, AsioBool directProcess); + + + + + Sample Rate Changed callback + void (*sampleRateDidChange) (AsioSampleRate sRate); + + + + + ASIO Message callback + long (*asioMessage) (long selector, long value, void* message, double* opt); + + + + + ASIO Buffer Switch Time Info Callback + AsioTime* (*bufferSwitchTimeInfo) (AsioTime* params, long doubleBufferIndex, AsioBool directProcess); + + + + + ASIO Channel Info + + + + + on input, channel index + + + + + Is Input + + + + + Is Active + + + + + Channel Info + + + + + ASIO Sample Type + + + + + Name + + + + + Main AsioDriver Class. To use this class, you need to query first the GetAsioDriverNames() and + then use the GetAsioDriverByName to instantiate the correct AsioDriver. + This is the first AsioDriver binding fully implemented in C#! + + Contributor: Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Gets the ASIO driver names installed. + + a list of driver names. Use this name to GetAsioDriverByName + + + + Instantiate a AsioDriver given its name. + + The name of the driver + an AsioDriver instance + + + + Instantiate the ASIO driver by GUID. + + The GUID. + an AsioDriver instance + + + + Inits the AsioDriver.. + + The sys handle. + + + + + Gets the name of the driver. + + + + + + Gets the driver version. + + + + + + Gets the error message. + + + + + + Starts this instance. + + + + + Stops this instance. + + + + + Gets the number of channels. + + The num input channels. + The num output channels. + + + + Gets the latencies (n.b. does not throw an exception) + + The input latency. + The output latency. + + + + Gets the size of the buffer. + + Size of the min. + Size of the max. + Size of the preferred. + The granularity. + + + + Determines whether this instance can use the specified sample rate. + + The sample rate. + + true if this instance [can sample rate] the specified sample rate; otherwise, false. + + + + + Gets the sample rate. + + + + + + Sets the sample rate. + + The sample rate. + + + + Gets the clock sources. + + The clocks. + The num sources. + + + + Sets the clock source. + + The reference. + + + + Gets the sample position. + + The sample pos. + The time stamp. + + + + Gets the channel info. + + The channel number. + if set to true [true for input info]. + Channel Info + + + + Creates the buffers. + + The buffer infos. + The num channels. + Size of the buffer. + The callbacks. + + + + Disposes the buffers. + + + + + Controls the panel. + + + + + Futures the specified selector. + + The selector. + The opt. + + + + Notifies OutputReady to the AsioDriver. + + + + + + Releases this instance. + + + + + Handles the exception. Throws an exception based on the error. + + The error to check. + Method name + + + + Inits the vTable method from GUID. This is a tricky part of this class. + + The ASIO GUID. + + + + Internal VTable structure to store all the delegates to the C++ COM method. + + + + + ASIODriverCapability holds all the information from the AsioDriver. + Use ASIODriverExt to get the Capabilities + + + + + Drive Name + + + + + Number of Input Channels + + + + + Number of Output Channels + + + + + Input Latency + + + + + Output Latency + + + + + Buffer Minimum Size + + + + + Buffer Maximum Size + + + + + Buffer Preferred Size + + + + + Buffer Granularity + + + + + Sample Rate + + + + + Input Channel Info + + + + + Output Channel Info + + + + + Callback used by the AsioDriverExt to get wave data + + + + + AsioDriverExt is a simplified version of the AsioDriver. It provides an easier + way to access the capabilities of the Driver and implement the callbacks necessary + for feeding the driver. + Implementation inspired from Rob Philpot's with a managed C++ ASIO wrapper BlueWave.Interop.Asio + http://www.codeproject.com/KB/mcpp/Asio.Net.aspx + + Contributor: Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Initializes a new instance of the class based on an already + instantiated AsioDriver instance. + + A AsioDriver already instantiated. + + + + Allows adjustment of which is the first output channel we write to + + Output Channel offset + Input Channel offset + + + + Gets the driver used. + + The ASIOdriver. + + + + Starts playing the buffers. + + + + + Stops playing the buffers. + + + + + Shows the control panel. + + + + + Releases this instance. + + + + + Determines whether the specified sample rate is supported. + + The sample rate. + + true if [is sample rate supported]; otherwise, false. + + + + + Sets the sample rate. + + The sample rate. + + + + Gets or sets the fill buffer callback. + + The fill buffer callback. + + + + Gets the capabilities of the AsioDriver. + + The capabilities. + + + + Creates the buffers for playing. + + The number of outputs channels. + The number of input channel. + if set to true [use max buffer size] else use Prefered size + + + + Builds the capabilities internally. + + + + + Callback called by the AsioDriver on fill buffer demand. Redirect call to external callback. + + Index of the double buffer. + if set to true [direct process]. + + + + Callback called by the AsioDriver on event "Samples rate changed". + + The sample rate. + + + + Asio message call back. + + The selector. + The value. + The message. + The opt. + + + + + Buffers switch time info call back. + + The asio time param. + Index of the double buffer. + if set to true [direct process]. + + + + + ASIO Error Codes + + + + + This value will be returned whenever the call succeeded + + + + + unique success return value for ASIOFuture calls + + + + + hardware input or output is not present or available + + + + + hardware is malfunctioning (can be returned by any ASIO function) + + + + + input parameter invalid + + + + + hardware is in a bad mode or used in a bad mode + + + + + hardware is not running when sample position is inquired + + + + + sample clock or rate cannot be determined or is not present + + + + + not enough memory for completing the request + + + + + ASIO Message Selector + + + + + selector in <value>, returns 1L if supported, + + + + + returns engine (host) asio implementation version, + + + + + request driver reset. if accepted, this + + + + + not yet supported, will currently always return 0L. + + + + + the driver went out of sync, such that + + + + + the drivers latencies have changed. The engine + + + + + if host returns true here, it will expect the + + + + + supports timecode + + + + + unused - value: number of commands, message points to mmc commands + + + + + kAsioSupportsXXX return 1 if host supports this + + + + + unused and undefined + + + + + unused and undefined + + + + + unused and undefined + + + + + unused and undefined + + + + + driver detected an overload + + + + + This class stores convertors for different interleaved WaveFormat to ASIOSampleType separate channel + format. + + + + + Selects the sample convertor based on the input WaveFormat and the output ASIOSampleTtype. + + The wave format. + The type. + + + + + Optimized convertor for 2 channels SHORT + + + + + Generic convertor for SHORT + + + + + Optimized convertor for 2 channels FLOAT + + + + + Generic convertor Float to INT + + + + + Optimized convertor for 2 channels INT to INT + + + + + Generic convertor INT to INT + + + + + Optimized convertor for 2 channels INT to SHORT + + + + + Generic convertor INT to SHORT + + + + + Generic convertor INT to FLOAT + + + + + Optimized convertor for 2 channels SHORT + + + + + Generic convertor for SHORT + + + + + Optimized convertor for 2 channels FLOAT + + + + + Generic convertor SHORT + + + + + Generic converter 24 LSB + + + + + Generic convertor for float + + + + + ASIO Sample Type + + + + + Int 16 MSB + + + + + Int 24 MSB (used for 20 bits as well) + + + + + Int 32 MSB + + + + + IEEE 754 32 bit float + + + + + IEEE 754 64 bit double float + + + + + 32 bit data with 16 bit alignment + + + + + 32 bit data with 18 bit alignment + + + + + 32 bit data with 20 bit alignment + + + + + 32 bit data with 24 bit alignment + + + + + Int 16 LSB + + + + + Int 24 LSB + used for 20 bits as well + + + + + Int 32 LSB + + + + + IEEE 754 32 bit float, as found on Intel x86 architecture + + + + + IEEE 754 64 bit double float, as found on Intel x86 architecture + + + + + 32 bit data with 16 bit alignment + + + + + 32 bit data with 18 bit alignment + + + + + 32 bit data with 20 bit alignment + + + + + 32 bit data with 24 bit alignment + + + + + DSD 1 bit data, 8 samples per byte. First sample in Least significant bit. + + + + + DSD 1 bit data, 8 samples per byte. First sample in Most significant bit. + + + + + DSD 8 bit data, 1 sample per byte. No Endianness required. + + + + + ASIO common Exception. + + + + + Gets the name of the error. + + The error. + the name of the error + + + + Represents an installed ACM Driver + + + + + Helper function to determine whether a particular codec is installed + + The short name of the function + Whether the codec is installed + + + + Attempts to add a new ACM driver from a file + + Full path of the .acm or dll file containing the driver + Handle to the driver + + + + Removes a driver previously added using AddLocalDriver + + Local driver to remove + + + + Show Format Choose Dialog + + Owner window handle, can be null + Window title + Enumeration flags. None to get everything + Enumeration format. Only needed with certain enumeration flags + The selected format + Textual description of the selected format + Textual description of the selected format tag + True if a format was selected + + + + Gets the maximum size needed to store a WaveFormat for ACM interop functions + + + + + Finds a Driver by its short name + + Short Name + The driver, or null if not found + + + + Gets a list of the ACM Drivers installed + + + + + The callback for acmDriverEnum + + + + + Creates a new ACM Driver object + + Driver handle + + + + The short name of this driver + + + + + The full name of this driver + + + + + The driver ID + + + + + ToString + + + + + The list of FormatTags for this ACM Driver + + + + + Gets all the supported formats for a given format tag + + Format tag + Supported formats + + + + Opens this driver + + + + + Closes this driver + + + + + Dispose + + + + + Flags for use with acmDriverAdd + + + + + ACM_DRIVERADDF_LOCAL + + + + + ACM_DRIVERADDF_GLOBAL + + + + + ACM_DRIVERADDF_FUNCTION + + + + + ACM_DRIVERADDF_NOTIFYHWND + + + + + Interop structure for ACM driver details (ACMDRIVERDETAILS) + http://msdn.microsoft.com/en-us/library/dd742889%28VS.85%29.aspx + + + + + DWORD cbStruct + + + + + FOURCC fccType + + + + + FOURCC fccComp + + + + + WORD wMid; + + + + + WORD wPid + + + + + DWORD vdwACM + + + + + DWORD vdwDriver + + + + + DWORD fdwSupport; + + + + + DWORD cFormatTags + + + + + DWORD cFilterTags + + + + + HICON hicon + + + + + TCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]; + + + + + TCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]; + + + + + TCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]; + + + + + TCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]; + + + + + TCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]; + + + + + ACMDRIVERDETAILS_SHORTNAME_CHARS + + + + + ACMDRIVERDETAILS_LONGNAME_CHARS + + + + + ACMDRIVERDETAILS_COPYRIGHT_CHARS + + + + + ACMDRIVERDETAILS_LICENSING_CHARS + + + + + ACMDRIVERDETAILS_FEATURES_CHARS + + + + + Flags indicating what support a particular ACM driver has + + + + ACMDRIVERDETAILS_SUPPORTF_CODEC - Codec + + + ACMDRIVERDETAILS_SUPPORTF_CONVERTER - Converter + + + ACMDRIVERDETAILS_SUPPORTF_FILTER - Filter + + + ACMDRIVERDETAILS_SUPPORTF_HARDWARE - Hardware + + + ACMDRIVERDETAILS_SUPPORTF_ASYNC - Async + + + ACMDRIVERDETAILS_SUPPORTF_LOCAL - Local + + + ACMDRIVERDETAILS_SUPPORTF_DISABLED - Disabled + + + + ACM_DRIVERENUMF_NOLOCAL, Only global drivers should be included in the enumeration + + + + + ACM_DRIVERENUMF_DISABLED, Disabled ACM drivers should be included in the enumeration + + + + + ACM Format + + + + + Format Index + + + + + Format Tag + + + + + Support Flags + + + + + WaveFormat + + + + + WaveFormat Size + + + + + Format Description + + + + + ACMFORMATCHOOSE + http://msdn.microsoft.com/en-us/library/dd742911%28VS.85%29.aspx + + + + + DWORD cbStruct; + + + + + DWORD fdwStyle; + + + + + HWND hwndOwner; + + + + + LPWAVEFORMATEX pwfx; + + + + + DWORD cbwfx; + + + + + LPCTSTR pszTitle; + + + + + TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; + + + + + TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; + + + + + LPTSTR pszName; + n.b. can be written into + + + + + DWORD cchName + Should be at least 128 unless name is zero + + + + + DWORD fdwEnum; + + + + + LPWAVEFORMATEX pwfxEnum; + + + + + HINSTANCE hInstance; + + + + + LPCTSTR pszTemplateName; + + + + + LPARAM lCustData; + + + + + ACMFORMATCHOOSEHOOKPROC pfnHook; + + + + + None + + + + + ACMFORMATCHOOSE_STYLEF_SHOWHELP + + + + + ACMFORMATCHOOSE_STYLEF_ENABLEHOOK + + + + + ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE + + + + + ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE + + + + + ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT + + + + + ACMFORMATCHOOSE_STYLEF_CONTEXTHELP + + + + + ACMFORMATDETAILS + http://msdn.microsoft.com/en-us/library/dd742913%28VS.85%29.aspx + + + + + DWORD cbStruct; + + + + + DWORD dwFormatIndex; + + + + + DWORD dwFormatTag; + + + + + DWORD fdwSupport; + + + + + LPWAVEFORMATEX pwfx; + + + + + DWORD cbwfx; + + + + + TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; + + + + + ACMFORMATDETAILS_FORMAT_CHARS + + + + + Format Enumeration Flags + + + + + None + + + + + ACM_FORMATENUMF_CONVERT + The WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will only enumerate destination formats that can be converted from the given pwfx format. + + + + + ACM_FORMATENUMF_HARDWARE + The enumerator should only enumerate formats that are supported as native input or output formats on one or more of the installed waveform-audio devices. This flag provides a way for an application to choose only formats native to an installed waveform-audio device. This flag must be used with one or both of the ACM_FORMATENUMF_INPUT and ACM_FORMATENUMF_OUTPUT flags. Specifying both ACM_FORMATENUMF_INPUT and ACM_FORMATENUMF_OUTPUT will enumerate only formats that can be opened for input or output. This is true regardless of whether this flag is specified. + + + + + ACM_FORMATENUMF_INPUT + Enumerator should enumerate only formats that are supported for input (recording). + + + + + ACM_FORMATENUMF_NCHANNELS + The nChannels member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_NSAMPLESPERSEC + The nSamplesPerSec member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_OUTPUT + Enumerator should enumerate only formats that are supported for output (playback). + + + + + ACM_FORMATENUMF_SUGGEST + The WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate all suggested destination formats for the given pwfx format. This mechanism can be used instead of the acmFormatSuggest function to allow an application to choose the best suggested format for conversion. The dwFormatIndex member will always be set to zero on return. + + + + + ACM_FORMATENUMF_WBITSPERSAMPLE + The wBitsPerSample member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_WFORMATTAG + The wFormatTag member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. The dwFormatTag member of the ACMFORMATDETAILS structure must be equal to the wFormatTag member. + + + + + ACM_FORMATSUGGESTF_WFORMATTAG + + + + + ACM_FORMATSUGGESTF_NCHANNELS + + + + + ACM_FORMATSUGGESTF_NSAMPLESPERSEC + + + + + ACM_FORMATSUGGESTF_WBITSPERSAMPLE + + + + + ACM_FORMATSUGGESTF_TYPEMASK + + + + + ACM Format Tag + + + + + Format Tag Index + + + + + Format Tag + + + + + Format Size + + + + + Support Flags + + + + + Standard Formats Count + + + + + Format Description + + + + + DWORD cbStruct; + + + + + DWORD dwFormatTagIndex; + + + + + DWORD dwFormatTag; + + + + + DWORD cbFormatSize; + + + + + DWORD fdwSupport; + + + + + DWORD cStandardFormats; + + + + + TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; + + + + + ACMFORMATTAGDETAILS_FORMATTAG_CHARS + + + + + Interop definitions for Windows ACM (Audio Compression Manager) API + + + + + http://msdn.microsoft.com/en-us/library/dd742910%28VS.85%29.aspx + UINT ACMFORMATCHOOSEHOOKPROC acmFormatChooseHookProc( + HWND hwnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + + + + + http://msdn.microsoft.com/en-us/library/dd742916%28VS.85%29.aspx + MMRESULT acmFormatSuggest( + HACMDRIVER had, + LPWAVEFORMATEX pwfxSrc, + LPWAVEFORMATEX pwfxDst, + DWORD cbwfxDst, + DWORD fdwSuggest); + + + + + http://msdn.microsoft.com/en-us/library/dd742928%28VS.85%29.aspx + MMRESULT acmStreamOpen( + LPHACMSTREAM phas, + HACMDRIVER had, + LPWAVEFORMATEX pwfxSrc, + LPWAVEFORMATEX pwfxDst, + LPWAVEFILTER pwfltr, + DWORD_PTR dwCallback, + DWORD_PTR dwInstance, + DWORD fdwOpen + + + + + A version with pointers for troubleshooting + + + + + AcmStream encapsulates an Audio Compression Manager Stream + used to convert audio from one format to another + + + + + Creates a new ACM stream to convert one format to another. Note that + not all conversions can be done in one step + + The source audio format + The destination audio format + + + + Creates a new ACM stream to convert one format to another, using a + specified driver identifier and wave filter + + the driver identifier + the source format + the wave filter + + + + Returns the number of output bytes for a given number of input bytes + + Number of input bytes + Number of output bytes + + + + Returns the number of source bytes for a given number of destination bytes + + Number of destination bytes + Number of source bytes + + + + Suggests an appropriate PCM format that the compressed format can be converted + to in one step + + The compressed format + The PCM format + + + + Returns the Source Buffer. Fill this with data prior to calling convert + + + + + Returns the Destination buffer. This will contain the converted data + after a successful call to Convert + + + + + Report that we have repositioned in the source stream + + + + + Converts the contents of the SourceBuffer into the DestinationBuffer + + The number of bytes in the SourceBuffer + that need to be converted + The number of source bytes actually converted + The number of converted bytes in the DestinationBuffer + + + + Converts the contents of the SourceBuffer into the DestinationBuffer + + The number of bytes in the SourceBuffer + that need to be converted + The number of converted bytes in the DestinationBuffer + + + + Frees resources associated with this ACM Stream + + + + + Frees resources associated with this ACM Stream + + + + + Frees resources associated with this ACM Stream + + + + + ACMSTREAMHEADER_STATUSF_DONE + + + + + ACMSTREAMHEADER_STATUSF_PREPARED + + + + + ACMSTREAMHEADER_STATUSF_INQUEUE + + + + + Interop structure for ACM stream headers. + ACMSTREAMHEADER + http://msdn.microsoft.com/en-us/library/dd742926%28VS.85%29.aspx + + + + + ACM_STREAMOPENF_QUERY, ACM will be queried to determine whether it supports the given conversion. A conversion stream will not be opened, and no handle will be returned in the phas parameter. + + + + + ACM_STREAMOPENF_ASYNC, Stream conversion should be performed asynchronously. If this flag is specified, the application can use a callback function to be notified when the conversion stream is opened and closed and after each buffer is converted. In addition to using a callback function, an application can examine the fdwStatus member of the ACMSTREAMHEADER structure for the ACMSTREAMHEADER_STATUSF_DONE flag. + + + + + ACM_STREAMOPENF_NONREALTIME, ACM will not consider time constraints when converting the data. By default, the driver will attempt to convert the data in real time. For some formats, specifying this flag might improve the audio quality or other characteristics. + + + + + CALLBACK_TYPEMASK, callback type mask + + + + + CALLBACK_NULL, no callback + + + + + CALLBACK_WINDOW, dwCallback is a HWND + + + + + CALLBACK_TASK, dwCallback is a HTASK + + + + + CALLBACK_FUNCTION, dwCallback is a FARPROC + + + + + CALLBACK_THREAD, thread ID replaces 16 bit task + + + + + CALLBACK_EVENT, dwCallback is an EVENT Handle + + + + + ACM_STREAMSIZEF_SOURCE + + + + + ACM_STREAMSIZEF_DESTINATION + + + + + Summary description for WaveFilter. + + + + + cbStruct + + + + + dwFilterTag + + + + + fdwFilter + + + + + reserved + + + + ACM_METRIC_COUNT_DRIVERS + + + ACM_METRIC_COUNT_CODECS + + + ACM_METRIC_COUNT_CONVERTERS + + + ACM_METRIC_COUNT_FILTERS + + + ACM_METRIC_COUNT_DISABLED + + + ACM_METRIC_COUNT_HARDWARE + + + ACM_METRIC_COUNT_LOCAL_DRIVERS + + + ACM_METRIC_COUNT_LOCAL_CODECS + + + ACM_METRIC_COUNT_LOCAL_CONVERTERS + + + ACM_METRIC_COUNT_LOCAL_FILTERS + + + ACM_METRIC_COUNT_LOCAL_DISABLED + + + ACM_METRIC_HARDWARE_WAVE_INPUT + + + ACM_METRIC_HARDWARE_WAVE_OUTPUT + + + ACM_METRIC_MAX_SIZE_FORMAT + + + ACM_METRIC_MAX_SIZE_FILTER + + + ACM_METRIC_DRIVER_SUPPORT + + + ACM_METRIC_DRIVER_PRIORITY + + + + ACM_STREAMCONVERTF_BLOCKALIGN + + + + + ACM_STREAMCONVERTF_START + + + + + ACM_STREAMCONVERTF_END + + + + + Wave Callback Info + + + + + Callback Strategy + + + + + Window Handle (if applicable) + + + + + Sets up a new WaveCallbackInfo for function callbacks + + + + + Sets up a new WaveCallbackInfo to use a New Window + IMPORTANT: only use this on the GUI thread + + + + + Sets up a new WaveCallbackInfo to use an existing window + IMPORTANT: only use this on the GUI thread + + + + + Wave Callback Strategy + + + + + Use a function + + + + + Create a new window (should only be done if on GUI thread) + + + + + Use an existing window handle + + + + + Use an event handle + + + + + WaveHeader interop structure (WAVEHDR) + http://msdn.microsoft.com/en-us/library/dd743837%28VS.85%29.aspx + + + + pointer to locked data buffer (lpData) + + + length of data buffer (dwBufferLength) + + + used for input only (dwBytesRecorded) + + + for client's use (dwUser) + + + assorted flags (dwFlags) + + + loop control counter (dwLoops) + + + PWaveHdr, reserved for driver (lpNext) + + + reserved for driver + + + + Wave Header Flags enumeration + + + + + WHDR_BEGINLOOP + This buffer is the first buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_DONE + Set by the device driver to indicate that it is finished with the buffer and is returning it to the application. + + + + + WHDR_ENDLOOP + This buffer is the last buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_INQUEUE + Set by Windows to indicate that the buffer is queued for playback. + + + + + WHDR_PREPARED + Set by Windows to indicate that the buffer has been prepared with the waveInPrepareHeader or waveOutPrepareHeader function. + + + + + WaveInCapabilities structure (based on WAVEINCAPS2 from mmsystem.h) + http://msdn.microsoft.com/en-us/library/ms713726(VS.85).aspx + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Number of channels supported + + + + + The product name + + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + The device name from the registry if supported + + + + + Event Args for WaveInStream event + + + + + Creates new WaveInEventArgs + + + + + Buffer containing recorded data. Note that it might not be completely + full. + + + + + The number of recorded bytes in Buffer. + + + + + MME Wave function interop + + + + + CALLBACK_NULL + No callback + + + + + CALLBACK_FUNCTION + dwCallback is a FARPROC + + + + + CALLBACK_EVENT + dwCallback is an EVENT handle + + + + + CALLBACK_WINDOW + dwCallback is a HWND + + + + + CALLBACK_THREAD + callback is a thread ID + + + + + WIM_OPEN + + + + + WIM_CLOSE + + + + + WIM_DATA + + + + + WOM_CLOSE + + + + + WOM_DONE + + + + + WOM_OPEN + + + + + WaveOutCapabilities structure (based on WAVEOUTCAPS2 from mmsystem.h) + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_waveoutcaps_str.asp + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Optional functionality supported by the device + + + + + Number of channels supported + + + + + Whether playback control is supported + + + + + The product name + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Supported wave formats for WaveOutCapabilities + + + + + 11.025 kHz, Mono, 8-bit + + + + + 11.025 kHz, Stereo, 8-bit + + + + + 11.025 kHz, Mono, 16-bit + + + + + 11.025 kHz, Stereo, 16-bit + + + + + 22.05 kHz, Mono, 8-bit + + + + + 22.05 kHz, Stereo, 8-bit + + + + + 22.05 kHz, Mono, 16-bit + + + + + 22.05 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 48 kHz, Mono, 8-bit + + + + + 48 kHz, Stereo, 8-bit + + + + + 48 kHz, Mono, 16-bit + + + + + 48 kHz, Stereo, 16-bit + + + + + 96 kHz, Mono, 8-bit + + + + + 96 kHz, Stereo, 8-bit + + + + + 96 kHz, Mono, 16-bit + + + + + 96 kHz, Stereo, 16-bit + + + + + Flags indicating what features this WaveOut device supports + + + + supports pitch control (WAVECAPS_PITCH) + + + supports playback rate control (WAVECAPS_PLAYBACKRATE) + + + supports volume control (WAVECAPS_VOLUME) + + + supports separate left-right volume control (WAVECAPS_LRVOLUME) + + + (WAVECAPS_SYNC) + + + (WAVECAPS_SAMPLEACCURATE) + + + + Sample provider interface to make WaveChannel32 extensible + Still a bit ugly, hence internal at the moment - and might even make these into + bit depth converting WaveProviders + + + + + ADSR sample provider allowing you to specify attack, decay, sustain and release values + + + + + Creates a new AdsrSampleProvider with default values + + + + + Attack time in seconds + + + + + Release time in seconds + + + + + Reads audio from this sample provider + + + + + Enters the Release phase + + + + + The output WaveFormat + + + + + Sample Provider to concatenate multiple sample providers together + + + + + Creates a new ConcatenatingSampleProvider + + The source providers to play one after the other. Must all share the same sample rate and channel count + + + + The WaveFormat of this Sample Provider + + + + + Read Samples from this sample provider + + + + + Sample Provider to allow fading in and out + + + + + Creates a new FadeInOutSampleProvider + + The source stream with the audio to be faded in or out + If true, we start faded out + + + + Requests that a fade-in begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Requests that a fade-out begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Reads samples from this sample provider + + Buffer to read into + Offset within buffer to write to + Number of samples desired + Number of samples read + + + + WaveFormat of this SampleProvider + + + + + Simple SampleProvider that passes through audio unchanged and raises + an event every n samples with the maximum sample value from the period + for metering purposes + + + + + Number of Samples per notification + + + + + Raised periodically to inform the user of the max volume + + + + + Initialises a new instance of MeteringSampleProvider that raises 10 stream volume + events per second + + Source sample provider + + + + Initialises a new instance of MeteringSampleProvider + + source sampler provider + Number of samples between notifications + + + + The WaveFormat of this sample provider + + + + + Reads samples from this Sample Provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Event args for aggregated stream volume + + + + + Max sample values array (one for each channel) + + + + + A sample provider mixer, allowing inputs to be added and removed + + + + + Creates a new MixingSampleProvider, with no inputs, but a specified WaveFormat + + The WaveFormat of this mixer. All inputs must be in this format + + + + Creates a new MixingSampleProvider, based on the given inputs + + Mixer inputs - must all have the same waveformat, and must + all be of the same WaveFormat. There must be at least one input + + + + Returns the mixer inputs (read-only - use AddMixerInput to add an input + + + + + When set to true, the Read method always returns the number + of samples requested, even if there are no inputs, or if the + current inputs reach their end. Setting this to true effectively + makes this a never-ending sample provider, so take care if you plan + to write it out to a file. + + + + + Adds a WaveProvider as a Mixer input. + Must be PCM or IEEE float already + + IWaveProvider mixer input + + + + Adds a new mixer input + + Mixer input + + + + Raised when a mixer input has been removed because it has ended + + + + + Removes a mixer input + + Mixer input to remove + + + + Removes all mixer inputs + + + + + The output WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + SampleProvider event args + + + + + Constructs a new SampleProviderEventArgs + + + + + The Sample Provider + + + + + No nonsense mono to stereo provider, no volume adjustment, + just copies input to left and right. + + + + + Initializes a new instance of MonoToStereoSampleProvider + + Source sample provider + + + + WaveFormat of this provider + + + + + Reads samples from this provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Multiplier for left channel (default is 1.0) + + + + + Multiplier for right channel (default is 1.0) + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing sample provider, allowing re-patching of input channels to different + output channels + + Input sample providers. Must all be of the same sample rate, but can have any number of channels + Desired number of output channels. + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads samples from this sample provider + + Buffer to be filled with sample data + Offset into buffer to start writing to, usually 0 + Number of samples required + Number of samples read + + + + The output WaveFormat for this SampleProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Simple class that raises an event on every sample + + + + + Initializes a new instance of NotifyingSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Sample notifier + + + + + Allows you to: + 1. insert a pre-delay of silence before the source begins + 2. skip over a certain amount of the beginning of the source + 3. only play a set amount from the source + 4. insert silence at the end after the source is complete + + + + + Number of samples of silence to insert before playing source + + + + + Amount of silence to insert before playing + + + + + Number of samples in source to discard + + + + + Amount of audio to skip over from the source before beginning playback + + + + + Number of samples to read from source (if 0, then read it all) + + + + + Amount of audio to take from the source (TimeSpan.Zero means play to end) + + + + + Number of samples of silence to insert after playing source + + + + + Amount of silence to insert after playing source + + + + + Creates a new instance of offsetSampleProvider + + The Source Sample Provider to read from + + + + The WaveFormat of this SampleProvider + + + + + Reads from this sample provider + + Sample buffer + Offset within sample buffer to read to + Number of samples required + Number of samples read + + + + Converts a mono sample provider to stereo, with a customisable pan strategy + + + + + Initialises a new instance of the PanningSampleProvider + + Source sample provider, must be mono + + + + Pan value, must be between -1 (left) and 1 (right) + + + + + The pan strategy currently in use + + + + + The WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Pair of floating point values, representing samples or multipliers + + + + + Left value + + + + + Right value + + + + + Required Interface for a Panning Strategy + + + + + Gets the left and right multipliers for a given pan value + + Pan value from -1 to 1 + Left and right multipliers in a stereo sample pair + + + + Simplistic "balance" control - treating the mono input as if it was stereo + In the centre, both channels full volume. Opposite channel decays linearly + as balance is turned to to one side + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Square Root Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Sinus Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Linear Pan + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Converts an IWaveProvider containing 16 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm16BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Samples required + Number of samples read + + + + Converts an IWaveProvider containing 24 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm24BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 32 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm32BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 8 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm8BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples to read + Number of samples read + + + + Utility class that takes an IWaveProvider input at any bit depth + and exposes it as an ISampleProvider. Can turn mono inputs into stereo, + and allows adjusting of volume + (The eventual successor to WaveChannel32) + This class also serves as an example of how you can link together several simple + Sample Providers to form a more useful class. + + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + force mono inputs to become stereo + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + The WaveFormat of this Sample Provider + + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Raised periodically to inform the user of the max volume + (before the volume meter) + + + + + Helper base class for classes converting to ISampleProvider + + + + + Source Wave Provider + + + + + Source buffer (to avoid constantly creating small buffers during playback) + + + + + Initialises a new instance of SampleProviderConverterBase + + Source Wave provider + + + + Wave format of this wave provider + + + + + Reads samples from the source wave provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Ensure the source buffer exists and is big enough + + Bytes required + + + + Utility class for converting to SampleProvider + + + + + Helper function to go from IWaveProvider to a SampleProvider + Must already be PCM or IEEE float + + The WaveProvider to convert + A sample provider + + + + Helper class for when you need to convert back to an IWaveProvider from + an ISampleProvider. Keeps it as IEEE float + + + + + Initializes a new instance of the WaveProviderFloatToWaveProvider class + + Source wave provider + + + + Reads from this provider + + + + + The waveformat of this WaveProvider (same as the source) + + + + + Converts a sample provider to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts a sample provider to 24 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream, clipping if necessary + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + The Format of this IWaveProvider + + + + + + Volume of this channel. 1.0 = full scale, 0.0 to mute + + + + + Signal Generator + Sin, Square, Triangle, SawTooth, White Noise, Pink Noise, Sweep. + + + Posibility to change ISampleProvider + Example : + --------- + WaveOut _waveOutGene = new WaveOut(); + WaveGenerator wg = new SignalGenerator(); + wg.Type = ... + wg.Frequency = ... + wg ... + _waveOutGene.Init(wg); + _waveOutGene.Play(); + + + + + Initializes a new instance for the Generator (Default :: 44.1Khz, 2 channels, Sinus, Frequency = 440, Gain = 1) + + + + + Initializes a new instance for the Generator (UserDef SampleRate & Channels) + + Desired sample rate + Number of channels + + + + The waveformat of this WaveProvider (same as the source) + + + + + Frequency for the Generator. (20.0 - 20000.0 Hz) + Sin, Square, Triangle, SawTooth, Sweep (Start Frequency). + + + + + Return Log of Frequency Start (Read only) + + + + + End Frequency for the Sweep Generator. (Start Frequency in Frequency) + + + + + Return Log of Frequency End (Read only) + + + + + Gain for the Generator. (0.0 to 1.0) + + + + + Channel PhaseReverse + + + + + Type of Generator. + + + + + Length Seconds for the Sweep Generator. + + + + + Reads from this provider. + + + + + Private :: Random for WhiteNoise & Pink Noise (Value form -1 to 1) + + Random value from -1 to +1 + + + + Signal Generator type + + + + + Pink noise + + + + + White noise + + + + + Sweep + + + + + Sine wave + + + + + Square wave + + + + + Triangle Wave + + + + + Sawtooth wave + + + + + Author: Freefall + Date: 05.08.16 + Based on: the port of Stephan M. Bernsee´s pitch shifting class + Port site: https://sites.google.com/site/mikescoderama/pitch-shifting + Test application and github site: https://github.com/Freefall63/NAudio-Pitchshifter + + NOTE: I strongly advice to add a Limiter for post-processing. + For my needs the FastAttackCompressor1175 provides acceptable results: + https://github.com/Jiyuu/SkypeFX/blob/master/JSNet/FastAttackCompressor1175.cs + + UPDATE: Added a simple Limiter based on the pydirac implementation. + https://github.com/echonest/remix/blob/master/external/pydirac225/source/Dirac_LE.cpp + + + + + + Creates a new SMB Pitch Shifting Sample Provider with default settings + + Source provider + + + + Creates a new SMB Pitch Shifting Sample Provider with custom settings + + Source provider + FFT Size (any power of two <= 4096: 4096, 2048, 1024, 512, ...) + Oversampling (number of overlapping windows) + Initial pitch (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + Read from this sample provider + + + + + WaveFormat + + + + + Pitch Factor (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + + Takes a stereo input and turns it to mono + + + + + Creates a new mono ISampleProvider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this SampleProvider + + + + + Very simple sample provider supporting adjustable gain + + + + + Initializes a new instance of VolumeSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Helper class turning an already 32 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Helper class turning an already 64 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Fully managed resampling sample provider, based on the WDL Resampler + + + + + Constructs a new resampler + + Source to resample + Desired output sample rate + + + + Reads from this sample provider + + + + + Output WaveFormat + + + + + Useful extension methods to make switching between WaveAndSampleProvider easier + + + + + Converts a WaveProvider into a SampleProvider (only works for PCM) + + WaveProvider to convert + + + + + Allows sending a SampleProvider directly to an IWavePlayer without needing to convert + back to an IWaveProvider + + The WavePlayer + + + + + + Turns WaveFormatExtensible into a standard waveformat if possible + + Input wave format + A standard PCM or IEEE waveformat, or the original waveformat + + + + Converts a ISampleProvider to a IWaveProvider but still 32 bit float + + SampleProvider to convert + An IWaveProvider + + + + Converts a ISampleProvider to a IWaveProvider but and convert to 16 bit + + SampleProvider to convert + A 16 bit IWaveProvider + + + + Concatenates one Sample Provider on the end of another + + The sample provider to play first + The sample provider to play next + A single sampleprovider to play one after the other + + + + Concatenates one Sample Provider on the end of another with silence inserted + + The sample provider to play first + Silence duration to insert between the two + The sample provider to play next + A single sample provider + + + + Skips over a specified amount of time (by consuming source stream) + + Source sample provider + Duration to skip over + A sample provider that skips over the specified amount of time + + + + Takes a specified amount of time from the source stream + + Source sample provider + Duration to take + A sample provider that reads up to the specified amount of time + + + + Converts a Stereo Sample Provider to mono, allowing mixing of channel volume + + Stereo Source Provider + Amount of left channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + Amount of right channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + A mono SampleProvider + + + + Converts a Mono ISampleProvider to stereo + + Mono Source Provider + Amount to mix to left channel (1.0 is full volume) + Amount to mix to right channel (1.0 is full volume) + + + + + Microsoft ADPCM + See http://icculus.org/SDL_sound/downloads/external_documentation/wavecomp.htm + + + + + Empty constructor needed for marshalling from a pointer + + + + + Samples per block + + + + + Number of coefficients + + + + + Coefficients + + + + + Microsoft ADPCM + + Sample Rate + Channels + + + + Serializes this wave format + + Binary writer + + + + String Description of this WaveFormat + + + + + GSM 610 + + + + + Creates a GSM 610 WaveFormat + For now hardcoded to 13kbps + + + + + Samples per block + + + + + Writes this structure to a BinaryWriter + + + + + IMA/DVI ADPCM Wave Format + Work in progress + + + + + parameterless constructor for Marshalling + + + + + Creates a new IMA / DVI ADPCM Wave Format + + Sample Rate + Number of channels + Bits Per Sample + + + + MP3 WaveFormat, MPEGLAYER3WAVEFORMAT from mmreg.h + + + + + Wave format ID (wID) + + + + + Padding flags (fdwFlags) + + + + + Block Size (nBlockSize) + + + + + Frames per block (nFramesPerBlock) + + + + + Codec Delay (nCodecDelay) + + + + + Creates a new MP3 WaveFormat + + + + + Wave Format Padding Flags + + + + + MPEGLAYER3_FLAG_PADDING_ISO + + + + + MPEGLAYER3_FLAG_PADDING_ON + + + + + MPEGLAYER3_FLAG_PADDING_OFF + + + + + Wave Format ID + + + + MPEGLAYER3_ID_UNKNOWN + + + MPEGLAYER3_ID_MPEG + + + MPEGLAYER3_ID_CONSTANTFRAMESIZE + + + + DSP Group TrueSpeech + + + + + DSP Group TrueSpeech WaveFormat + + + + + Writes this structure to a BinaryWriter + + + + + Represents a Wave file format + + + + format type + + + number of channels + + + sample rate + + + for buffer estimation + + + block size of data + + + number of bits per sample of mono data + + + number of following bytes + + + + Creates a new PCM 44.1Khz stereo 16 bit format + + + + + Creates a new 16 bit wave format with the specified sample + rate and channel count + + Sample Rate + Number of channels + + + + Gets the size of a wave buffer equivalent to the latency in milliseconds. + + The milliseconds. + + + + + Creates a WaveFormat with custom members + + The encoding + Sample Rate + Number of channels + Average Bytes Per Second + Block Align + Bits Per Sample + + + + + Creates an A-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a Mu-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a new PCM format with the specified sample rate, bit depth and channels + + + + + Creates a new 32 bit IEEE floating point wave format + + sample rate + number of channels + + + + Helper function to retrieve a WaveFormat structure from a pointer + + WaveFormat structure + + + + + Helper function to marshal WaveFormat to an IntPtr + + WaveFormat + IntPtr to WaveFormat structure (needs to be freed by callee) + + + + Reads in a WaveFormat (with extra data) from a fmt chunk (chunk identifier and + length should already have been read) + + Binary reader + Format chunk length + A WaveFormatExtraData + + + + Reads a new WaveFormat object from a stream + + A binary reader that wraps the stream + + + + Reports this WaveFormat as a string + + String describing the wave format + + + + Compares with another WaveFormat object + + Object to compare to + True if the objects are the same + + + + Provides a Hashcode for this WaveFormat + + A hashcode + + + + Returns the encoding type used + + + + + Writes this WaveFormat object to a stream + + the output stream + + + + Returns the number of channels (1=mono,2=stereo etc) + + + + + Returns the sample rate (samples per second) + + + + + Returns the average number of bytes used per second + + + + + Returns the block alignment + + + + + Returns the number of bits per sample (usually 16 or 32, sometimes 24 or 8) + Can be 0 for some codecs + + + + + Returns the number of extra bytes used by this waveformat. Often 0, + except for compressed formats which store extra data after the WAVEFORMATEX header + + + + + Custom marshaller for WaveFormat structures + + + + + Gets the instance of this marshaller + + + + + + + Clean up managed data + + + + + Clean up native data + + + + + + Get native data size + + + + + Marshal managed to native + + + + + Marshal Native to Managed + + + + + Summary description for WaveFormatEncoding. + + + + WAVE_FORMAT_UNKNOWN, Microsoft Corporation + + + WAVE_FORMAT_PCM Microsoft Corporation + + + WAVE_FORMAT_ADPCM Microsoft Corporation + + + WAVE_FORMAT_IEEE_FLOAT Microsoft Corporation + + + WAVE_FORMAT_VSELP Compaq Computer Corp. + + + WAVE_FORMAT_IBM_CVSD IBM Corporation + + + WAVE_FORMAT_ALAW Microsoft Corporation + + + WAVE_FORMAT_MULAW Microsoft Corporation + + + WAVE_FORMAT_DTS Microsoft Corporation + + + WAVE_FORMAT_DRM Microsoft Corporation + + + WAVE_FORMAT_WMAVOICE9 + + + WAVE_FORMAT_OKI_ADPCM OKI + + + WAVE_FORMAT_DVI_ADPCM Intel Corporation + + + WAVE_FORMAT_IMA_ADPCM Intel Corporation + + + WAVE_FORMAT_MEDIASPACE_ADPCM Videologic + + + WAVE_FORMAT_SIERRA_ADPCM Sierra Semiconductor Corp + + + WAVE_FORMAT_G723_ADPCM Antex Electronics Corporation + + + WAVE_FORMAT_DIGISTD DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIFIX DSP Solutions, Inc. + + + WAVE_FORMAT_DIALOGIC_OKI_ADPCM Dialogic Corporation + + + WAVE_FORMAT_MEDIAVISION_ADPCM Media Vision, Inc. + + + WAVE_FORMAT_CU_CODEC Hewlett-Packard Company + + + WAVE_FORMAT_YAMAHA_ADPCM Yamaha Corporation of America + + + WAVE_FORMAT_SONARC Speech Compression + + + WAVE_FORMAT_DSPGROUP_TRUESPEECH DSP Group, Inc + + + WAVE_FORMAT_ECHOSC1 Echo Speech Corporation + + + WAVE_FORMAT_AUDIOFILE_AF36, Virtual Music, Inc. + + + WAVE_FORMAT_APTX Audio Processing Technology + + + WAVE_FORMAT_AUDIOFILE_AF10, Virtual Music, Inc. + + + WAVE_FORMAT_PROSODY_1612, Aculab plc + + + WAVE_FORMAT_LRC, Merging Technologies S.A. + + + WAVE_FORMAT_DOLBY_AC2, Dolby Laboratories + + + WAVE_FORMAT_GSM610, Microsoft Corporation + + + WAVE_FORMAT_MSNAUDIO, Microsoft Corporation + + + WAVE_FORMAT_ANTEX_ADPCME, Antex Electronics Corporation + + + WAVE_FORMAT_CONTROL_RES_VQLPC, Control Resources Limited + + + WAVE_FORMAT_DIGIREAL, DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIADPCM, DSP Solutions, Inc. + + + WAVE_FORMAT_CONTROL_RES_CR10, Control Resources Limited + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_MPEG, Microsoft Corporation + + + + + + + + + WAVE_FORMAT_MPEGLAYER3, ISO/MPEG Layer3 Format Tag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_GSM + + + WAVE_FORMAT_G729 + + + WAVE_FORMAT_G723 + + + WAVE_FORMAT_ACELP + + + + WAVE_FORMAT_RAW_AAC1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Windows Media Audio, WAVE_FORMAT_WMAUDIO2, Microsoft Corporation + + + + + Windows Media Audio Professional WAVE_FORMAT_WMAUDIO3, Microsoft Corporation + + + + + Windows Media Audio Lossless, WAVE_FORMAT_WMAUDIO_LOSSLESS + + + + + Windows Media Audio Professional over SPDIF WAVE_FORMAT_WMASPDIF (0x0164) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Advanced Audio Coding (AAC) audio in Audio Data Transport Stream (ADTS) format. + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_ADTS_AAC. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral band replication (SBR) or parametric stereo (PS) tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + + Source wmCodec.h + + + + MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_LOAS. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral SBR or PS tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + NOKIA_MPEG_ADTS_AAC + Source wmCodec.h + + + NOKIA_MPEG_RAW_AAC + Source wmCodec.h + + + VODAFONE_MPEG_ADTS_AAC + Source wmCodec.h + + + VODAFONE_MPEG_RAW_AAC + Source wmCodec.h + + + + High-Efficiency Advanced Audio Coding (HE-AAC) stream. + The format block is an HEAACWAVEFORMAT structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + WAVE_FORMAT_DVM + + + WAVE_FORMAT_VORBIS1 "Og" Original stream compatible + + + WAVE_FORMAT_VORBIS2 "Pg" Have independent header + + + WAVE_FORMAT_VORBIS3 "Qg" Have no codebook header + + + WAVE_FORMAT_VORBIS1P "og" Original stream compatible + + + WAVE_FORMAT_VORBIS2P "pg" Have independent headere + + + WAVE_FORMAT_VORBIS3P "qg" Have no codebook header + + + WAVE_FORMAT_EXTENSIBLE + + + + + + + WaveFormatExtensible + http://www.microsoft.com/whdc/device/audio/multichaud.mspx + + + + + Parameterless constructor for marshalling + + + + + Creates a new WaveFormatExtensible for PCM or IEEE + + + + + WaveFormatExtensible for PCM or floating point can be awkward to work with + This creates a regular WaveFormat structure representing the same audio format + Returns the WaveFormat unchanged for non PCM or IEEE float + + + + + + SubFormat (may be one of AudioMediaSubtypes) + + + + + Serialize + + + + + + String representation + + + + + This class used for marshalling from unmanaged code + + + + + Allows the extra data to be read + + + + + parameterless constructor for marshalling + + + + + Reads this structure from a BinaryReader + + + + + Writes this structure to a BinaryWriter + + + + + The WMA wave format. + May not be much use because WMA codec is a DirectShow DMO not an ACM + + + + + Generic interface for wave recording + + + + + Recording WaveFormat + + + + + Start Recording + + + + + Stop Recording + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + WASAPI Loopback Capture + based on a contribution from "Pygmy" - http://naudio.codeplex.com/discussions/203605 + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Gets the default audio loopback capture device + + The default audio loopback capture device + + + + Capturing wave format + + + + + Specify loopback + + + + + Allows recording using the Windows waveIn APIs + Events are raised as recorded buffers are made available + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Prepares a Wave input device for recording + + + + + Creates a WaveIn device using the specified window handle for callbacks + + A valid window handle + + + + Prepares a Wave input device for recording + + + + + Returns the number of Wave In devices available in the system + + + + + Retrieves the capabilities of a waveIn device + + Device to test + The WaveIn device capabilities + + + + Milliseconds for the buffer. Recommended value is 100ms + + + + + Number of Buffers to use (usually 2 or 3) + + + + + The device number to use + + + + + Called when we get a new buffer of recorded data + + + + + Start recording + + + + + Stop recording + + + + + Gets the current position in bytes from the wave input device. + it calls directly into waveInGetPosition) + + Position in bytes + + + + WaveFormat we are recording in + + + + + Dispose pattern + + + + + Microphone Level + + + + + Dispose method + + + + + Recording using waveIn api with event callbacks. + Use this for recording in non-gui applications + Events are raised as recorded buffers are made available + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Prepares a Wave input device for recording + + + + + Returns the number of Wave In devices available in the system + + + + + Retrieves the capabilities of a waveIn device + + Device to test + The WaveIn device capabilities + + + + Milliseconds for the buffer. Recommended value is 100ms + + + + + Number of Buffers to use (usually 2 or 3) + + + + + The device number to use + + + + + Start recording + + + + + Stop recording + + + + + Gets the current position in bytes from the wave input device. + it calls directly into waveInGetPosition) + + Position in bytes + + + + WaveFormat we are recording in + + + + + Dispose pattern + + + + + Microphone Level + + + + + Dispose method + + + + + This class writes audio data to a .aif file on disk + + + + + Creates an Aiff file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Aiff File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + AiffFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new AiffFileWriter + + The filename to write to + The Wave Format of the output data + + + + The aiff file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + WaveFormat of this aiff file + + + + + Returns false: Cannot read from a AiffFileWriter + + + + + Returns true: Can write to a AiffFileWriter + + + + + Returns false: Cannot seek within a AiffFileWriter + + + + + Read is not supported for a AiffFileWriter + + + + + Seek is not supported for a AiffFileWriter + + + + + SetLength is not supported for AiffFileWriter + + + + + + Gets the Position in the AiffFile (i.e. number of bytes written so far) + + + + + Appends bytes to the AiffFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Aiff file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Aiff file + They will be converted to the appropriate bit depth depending on the WaveFormat of the AIF file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Aiff file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this AiffFileWriter + + + + + Raised when ASIO data has been recorded. + It is important to handle this as quickly as possible as it is in the buffer callback + + + + + Initialises a new instance of AsioAudioAvailableEventArgs + + Pointers to the ASIO buffers for each channel + Pointers to the ASIO buffers for each channel + Number of samples in each buffer + Audio format within each buffer + + + + Pointer to a buffer per input channel + + + + + Pointer to a buffer per output channel + Allows you to write directly to the output buffers + If you do so, set SamplesPerBuffer = true, + and make sure all buffers are written to with valid data + + + + + Set to true if you have written to the output buffers + If so, AsioOut will not read from its source + + + + + Number of samples in each buffer + + + + + Converts all the recorded audio into a buffer of 32 bit floating point samples, interleaved by channel + + The samples as 32 bit floating point, interleaved + + + + Audio format within each buffer + Most commonly this will be one of, Int32LSB, Int16LSB, Int24LSB or Float32LSB + + + + + Gets as interleaved samples, allocating a float array + + The samples as 32 bit floating point values + + + + ASIO Out Player. New implementation using an internal C# binding. + + This implementation is only supporting Short16Bit and Float32Bit formats and is optimized + for 2 outputs channels . + SampleRate is supported only if AsioDriver is supporting it + + This implementation is probably the first AsioDriver binding fully implemented in C#! + + Original Contributor: Mark Heath + New Contributor to C# binding : Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Playback Stopped + + + + + When recording, fires whenever recorded audio is available + + + + + Initializes a new instance of the class with the first + available ASIO Driver. + + + + + Initializes a new instance of the class with the driver name. + + Name of the device. + + + + Opens an ASIO output device + + Device number (zero based) + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Dispose + + + + + Gets the names of the installed ASIO Driver. + + an array of driver names + + + + Determines whether ASIO is supported. + + + true if ASIO is supported; otherwise, false. + + + + + Inits the driver from the asio driver name. + + Name of the driver. + + + + Shows the control panel + + + + + Starts playback + + + + + Stops playback + + + + + Pauses playback + + + + + Initialises to play + + Source wave provider + + + + Initialises to play, with optional recording + + Source wave provider - set to null for record only + Number of channels to record + Specify sample rate here if only recording, ignored otherwise + + + + driver buffer update callback to fill the wave buffer. + + The input channels. + The output channels. + + + + Gets the latency (in ms) of the playback driver + + + + + Automatically stop when the end of the input stream is reached + Disable this if auto-stop is causing hanging issues + + + + + A flag to let you know that we have reached the end of the input file + Useful if AutoStop is set to false + You can monitor this yourself and call Stop when it is true + + + + + Playback State + + + + + Driver Name + + + + + The number of output channels we are currently using for playback + (Must be less than or equal to DriverOutputChannelCount) + + + + + The number of input channels we are currently recording from + (Must be less than or equal to DriverInputChannelCount) + + + + + The maximum number of input channels this ASIO driver supports + + + + + The maximum number of output channels this ASIO driver supports + + + + + The number of samples per channel, per buffer. + + + + + By default the first channel on the input WaveProvider is sent to the first ASIO output. + This option sends it to the specified channel number. + Warning: make sure you don't set it higher than the number of available output channels - + the number of source channels. + n.b. Future NAudio may modify this + + + + + Input channel offset (used when recording), allowing you to choose to record from just one + specific input rather than them all + + + + + Sets the volume (1.0 is unity gain) + Not supported for ASIO Out. Set the volume on the input stream instead + + + + + Get the input channel name + + channel index (zero based) + channel name + + + + Get the output channel name + + channel index (zero based) + channel name + + + + https://tech.ebu.ch/docs/tech/tech3285.pdf + + + + + Constructs a new BextChunkInfo + + + + + Description (max 256 chars) + + + + + Originator (max 32 chars) + + + + + Originator Reference (max 32 chars) + + + + + Originator Date Time + + + + + Origination Date as string + + + + + Origination as time + + + + + Time reference (first sample count since midnight) + + + + + version 2 has loudness stuff which we don't know so using version 1 + + + + + 64 bytes http://en.wikipedia.org/wiki/UMID + + + + + for version 2 = 180 bytes (10 before are loudness values), using version 1 = 190 bytes + + + + + Coding history arbitrary length string at end of structure + http://www.ebu.ch/CMSimages/fr/tec_text_r98-1999_tcm7-4709.pdf + A=PCM,F=48000,W=16,M=stereo,T=original,CR/LF + + + + + Broadcast WAVE File Writer + + + + + Createa a new BwfWriter + + Rarget filename + WaveFormat + Chunk information + + + + Write audio data to this BWF + + + + + Flush writer, and fix up header sizes + + + + + Disposes this writer + + + + + A wave file writer that adds cue support + + + + + Writes a wave file, including a cues chunk + + + + + Adds a cue to the Wave file + + Sample position + Label text + + + + Updates the header, and writes the cues out + + + + + NativeDirectSoundOut using DirectSound COM interop. + Contact author: Alexandre Mutel - alexandre_mutel at yahoo.fr + Modified by: Graham "Gee" Plumb + + + + + Playback Stopped + + + + + Gets the DirectSound output devices in the system + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + (40ms seems to work under Vista). + + The latency. + Selected device + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream) + + Position in bytes + + + + Gets the current position from the wave output device. + + + + + Initialise playback + + The waveprovider to be played + + + + Current playback state + + + + + + The volume 1.0 is full scale + + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Determines whether the SecondaryBuffer is lost. + + + true if [is buffer lost]; otherwise, false. + + + + + Convert ms to bytes size according to WaveFormat + + The ms + number of byttes + + + + Processes the samples in a separate thread. + + + + + Stop playback + + + + + Clean up the SecondaryBuffer + + + + In DirectSound, when playback is started, + the rest of the sound that was played last time is played back as noise. + This happens even if the secondary buffer is completely silenced, + so it seems that the buffer in the primary buffer or higher is not cleared. + + + To solve this problem fill the secondary buffer with silence data when stop playback. + + + + + + Feeds the SecondaryBuffer with the WaveStream + + number of bytes to feed + + + + IDirectSound interface + + + + + IDirectSoundBuffer interface + + + + + IDirectSoundNotify interface + + + + + Instanciate DirectSound from the DLL + + The GUID. + The direct sound. + The p unk outer. + + + + DirectSound default playback device GUID + + + + + DirectSound default capture device GUID + + + + + DirectSound default device for voice playback + + + + + DirectSound default device for voice capture + + + + + The DSEnumCallback function is an application-defined callback function that enumerates the DirectSound drivers. + The system calls this function in response to the application's call to the DirectSoundEnumerate or DirectSoundCaptureEnumerate function. + + Address of the GUID that identifies the device being enumerated, or NULL for the primary device. This value can be passed to the DirectSoundCreate8 or DirectSoundCaptureCreate8 function to create a device object for that driver. + Address of a null-terminated string that provides a textual description of the DirectSound device. + Address of a null-terminated string that specifies the module name of the DirectSound driver corresponding to this device. + Address of application-defined data. This is the pointer passed to DirectSoundEnumerate or DirectSoundCaptureEnumerate as the lpContext parameter. + Returns TRUE to continue enumerating drivers, or FALSE to stop. + + + + The DirectSoundEnumerate function enumerates the DirectSound drivers installed in the system. + + callback function + User context + + + + Gets the HANDLE of the desktop window. + + HANDLE of the Desktop window + + + + Class for enumerating DirectSound devices + + + + + The device identifier + + + + + Device description + + + + + Device module name + + + + + IWaveBuffer interface use to store wave datas. + Data can be manipulated with arrays (,, + , ) that are pointing to the same memory buffer. + This is a requirement for all subclasses. + + Use the associated Count property based on the type of buffer to get the number of data in the + buffer. + + for the standard implementation using C# unions. + + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets the byte buffer count. + + The byte buffer count. + + + + Gets the float buffer count. + + The float buffer count. + + + + Gets the short buffer count. + + The short buffer count. + + + + Gets the int buffer count. + + The int buffer count. + + + + Represents the interface to a device that can play a WaveFile + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Initialise playback + + The waveprovider to be played + + + + The volume + 1.0f is full scale + Note that not all implementations necessarily support volume changes + + + + + Current playback state + + + + + Indicates that playback has gone into a stopped state due to + reaching the end of the input stream or an error has been encountered during playback + + + + + Interface for IWavePlayers that can report position + + + + + Position (in terms of bytes played - does not necessarily translate directly to the position within the source audio file) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Generic interface for all WaveProviders. + + + + + Gets the WaveFormat of this WaveProvider. + + The wave format. + + + + Fill the specified buffer with wave data. + + The buffer to fill of wave data. + Offset into buffer + The number of bytes to read + the number of bytes written to the buffer. + + + + Like IWaveProvider, but makes it much simpler to put together a 32 bit floating + point mixing engine + + + + + Gets the WaveFormat of this Sample Provider. + + The wave format. + + + + Fill the specified buffer with 32 bit floating point samples + + The buffer to fill with samples. + Offset into buffer + The number of samples to read + the number of samples written to the buffer. + + + + Media Foundation Encoder class allows you to use Media Foundation to encode an IWaveProvider + to any supported encoding format + + + + + Queries the available bitrates for a given encoding output type, sample rate and number of channels + + Audio subtype - a value from the AudioSubtypes class + The sample rate of the PCM to encode + The number of channels of the PCM to encode + An array of available bitrates in average bits per second + + + + Gets all the available media types for a particular + + Audio subtype - a value from the AudioSubtypes class + An array of available media types that can be encoded with this subtype + + + + Helper function to simplify encoding Window Media Audio + Should be supported on Vista and above (not tested) + + Input provider, must be PCM + Output file path, should end with .wma + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Helper function to simplify encoding to MP3 + By default, will only be available on Windows 8 and above + + Input provider, must be PCM + Output file path, should end with .mp3 + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Helper function to simplify encoding to AAC + By default, will only be available on Windows 7 and above + + Input provider, must be PCM + Output file path, should end with .mp4 (or .aac on Windows 8) + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Tries to find the encoding media type with the closest bitrate to that specified + + Audio subtype, a value from AudioSubtypes + Your encoder input format (used to check sample rate and channel count) + Your desired bitrate + The closest media type, or null if none available + + + + Creates a new encoder that encodes to the specified output media type + + Desired output media type + + + + Encodes a file + + Output filename (container type is deduced from the filename) + Input provider (should be PCM, some encoders will also allow IEEE float) + + + + Disposes this instance + + + + + + Disposes this instance + + + + + Finalizer + + + + + Playback State + + + + + Stopped + + + + + Playing + + + + + Paused + + + + + Stopped Event Args + + + + + Initializes a new instance of StoppedEventArgs + + An exception to report (null if no exception) + + + + An exception. Will be null if the playback or record operation stopped due to + the user requesting stop or reached the end of the input audio + + + + + Support for playback using Wasapi + + + + + Playback Stopped + + + + + WASAPI Out shared mode, default + + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + Desired latency in milliseconds + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + true if sync is done with event. false use sleep. + Desired latency in milliseconds + + + + Creates a new WASAPI Output + + Device to use + + true if sync is done with event. false use sleep. + Desired latency in milliseconds + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Begin Playback + + + + + Stop playback and flush buffers + + + + + Stop playback without flushing buffers + + + + + Initialize for playing the specified wave stream + + IWaveProvider to play + + + + Playback State + + + + + Volume + + + + + Retrieve the AudioStreamVolume object for this audio stream + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Dispose + + + + + WaveBuffer class use to store wave datas. Data can be manipulated with arrays + (,,, ) that are pointing to the + same memory buffer. Use the associated Count property based on the type of buffer to get the number of + data in the buffer. + Implicit casting is now supported to float[], byte[], int[], short[]. + You must not use Length on returned arrays. + + n.b. FieldOffset is 8 now to allow it to work natively on 64 bit + + + + + Number of Bytes + + + + + Initializes a new instance of the class. + + The number of bytes. The size of the final buffer will be aligned on 4 Bytes (upper bound) + + + + Initializes a new instance of the class binded to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Binds this WaveBuffer instance to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets or sets the byte buffer count. + + The byte buffer count. + + + + Gets or sets the float buffer count. + + The float buffer count. + + + + Gets or sets the short buffer count. + + The short buffer count. + + + + Gets or sets the int buffer count. + + The int buffer count. + + + + Clears the associated buffer. + + + + + Copy this WaveBuffer to a destination buffer up to ByteBufferCount bytes. + + + + + Checks the validity of the count parameters. + + Name of the arg. + The value. + The size of value. + + + + This class writes WAV data to a .wav file on disk + + + + + Creates a 16 bit Wave File from an ISampleProvider + BEWARE: the source provider must not return data indefinitely + + The filename to write to + The source sample provider + + + + Creates a Wave file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + Writes to a stream by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The stream the method will output to + The source WaveProvider + + + + WaveFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new WaveFileWriter + + The filename to write to + The Wave Format of the output data + + + + The wave file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + Total time (calculated from Length and average bytes per second) + + + + + WaveFormat of this wave file + + + + + Returns false: Cannot read from a WaveFileWriter + + + + + Returns true: Can write to a WaveFileWriter + + + + + Returns false: Cannot seek within a WaveFileWriter + + + + + Read is not supported for a WaveFileWriter + + + + + Seek is not supported for a WaveFileWriter + + + + + SetLength is not supported for WaveFileWriter + + + + + + Gets the Position in the WaveFile (i.e. number of bytes written so far) + + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Wave file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Wave file + They will be converted to the appropriate bit depth depending on the WaveFormat of the WAV file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + Also updates header, so that WAV file will be valid up to the point currently written + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this WaveFileWriter + + + + + Represents a wave out device + + + + + Indicates playback has stopped automatically + + + + + Retrieves the capabilities of a waveOut device + + Device to test + The WaveOut device capabilities + + + + Returns the number of Wave Out devices available in the system + + + + + Gets or sets the desired latency in milliseconds + Should be set before a call to Init + + + + + Gets or sets the number of buffers used + Should be set before a call to Init + + + + + Gets or sets the device number + Should be set before a call to Init + This must be between -1 and DeviceCount - 1. + -1 means stick to default device even default device is changed + + + + + Creates a default WaveOut device + Will use window callbacks if called from a GUI thread, otherwise function + callbacks + + + + + Creates a WaveOut device using the specified window handle for callbacks + + A valid window handle + + + + Opens a WaveOut device + + + + + Initialises the WaveOut device + + WaveProvider to play + + + + Start playing the audio from the WaveStream + + + + + Pause the audio + + + + + Resume playing after a pause from the same position + + + + + Stop and reset the WaveOut device + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream - it calls directly into waveOutGetPosition) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Playback State + + + + + Volume for this device 1.0 is full scale + + + + + Closes this WaveOut device + + + + + Closes the WaveOut device and disposes of buffers + + True if called from Dispose + + + + Finalizer. Only called when user forgets to call Dispose + + + + + Alternative WaveOut class, making use of the Event callback + + + + + Indicates playback has stopped automatically + + + + + Gets or sets the desired latency in milliseconds + Should be set before a call to Init + + + + + Gets or sets the number of buffers used + Should be set before a call to Init + + + + + Gets or sets the device number + Should be set before a call to Init + This must be between -1 and DeviceCount - 1. + -1 means stick to default device even default device is changed + + + + + Opens a WaveOut device + + + + + Initialises the WaveOut device + + WaveProvider to play + + + + Start playing the audio from the WaveStream + + + + + Pause the audio + + + + + Resume playing after a pause from the same position + + + + + Stop and reset the WaveOut device + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream - it calls directly into waveOutGetPosition) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Playback State + + + + + Volume for this device 1.0 is full scale + + + + + Closes this WaveOut device + + + + + Closes the WaveOut device and disposes of buffers + + True if called from Dispose + + + + Finalizer. Only called when user forgets to call Dispose + + + + + Provides a buffered store of samples + Read method will return queued samples or fill buffer with zeroes + Now backed by a circular buffer + + + + + Creates a new buffered WaveProvider + + WaveFormat + + + + If true, always read the amount of data requested, padding with zeroes if necessary + By default is set to true + + + + + Buffer length in bytes + + + + + Buffer duration + + + + + If true, when the buffer is full, start throwing away data + if false, AddSamples will throw an exception when buffer is full + + + + + The number of buffered bytes + + + + + Buffered Duration + + + + + Gets the WaveFormat + + + + + Adds samples. Takes a copy of buffer, so that buffer can be reused if necessary + + + + + Reads from this WaveProvider + Will always return count bytes, since we will zero-fill the buffer if not enough available + + + + + Discards all audio from the buffer + + + + + Provide WaveProvider that can apply effects in real time using DMO. + + If the audio thread is running on the STA thread, please generate and operate from the same thread. + If the audio thread is running on the MTA thread, please operate on any MTA thread. + + Types of DMO effectors to use + Parameters of the effect to be used + + + + Create a new DmoEffectWaveProvider + + Input Stream + + + + Stream Wave Format + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Get Effector Parameters + + + + + Dispose + + + + + The Media Foundation Resampler Transform + + + + + Creates the Media Foundation Resampler, allowing modifying of sample rate, bit depth and channel count + + Source provider, must be PCM + Output format, must also be PCM + + + + Creates a resampler with a specified target output sample rate + + Source provider + Output sample rate + + + + Creates and configures the actual Resampler transform + + A newly created and configured resampler MFT + + + + Gets or sets the Resampler quality. n.b. set the quality before starting to resample. + 1 is lowest quality (linear interpolation) and 60 is best quality + + + + + Disposes this resampler + + + + + WaveProvider that can mix together multiple 32 bit floating point input provider + All channels must have the same number of inputs and same sample rate + n.b. Work in Progress - not tested yet + + + + + Creates a new MixingWaveProvider32 + + + + + Creates a new 32 bit MixingWaveProvider32 + + inputs - must all have the same format. + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove an input from the mixer + + waveProvider to remove + + + + The number of inputs to this mixer + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Converts from mono to stereo, allowing freedom to route all, some, or none of the incoming signal to left or right channels + + + + + Creates a new stereo waveprovider based on a mono input + + Mono 16 bit PCM input + + + + 1.0 to copy the mono stream to the left channel without adjusting volume + + + + + 1.0 to copy the mono stream to the right channel without adjusting volume + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels. Number of outputs is equal to total number of channels in inputs + + Input wave providers. Must all be of the same format, but can have any number of channels + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels + + Input wave providers. Must all be of the same format, but can have any number of channels + Desired number of output channels. (-1 means use total number of input channels) + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads data from this WaveProvider + + Buffer to be filled with sample data + Offset to write to within buffer, usually 0 + Number of bytes required + Number of bytes read + + + + The WaveFormat of this WaveProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Silence producing wave provider + Useful for playing silence when doing a WASAPI Loopback Capture + + + + + Creates a new silence producing wave provider + + Desired WaveFormat (should be PCM / IEE float + + + + Read silence from into the buffer + + + + + WaveFormat of this silence producing wave provider + + + + + Takes a stereo 16 bit input and turns it mono, allowing you to select left or right channel only or mix them together + + + + + Creates a new mono waveprovider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Helper class allowing us to modify the volume of a 16 bit stream without converting to IEEE float + + + + + Constructs a new VolumeWaveProvider16 + + Source provider, must be 16 bit PCM + + + + Gets or sets volume. + 1.0 is full scale, 0.0 is silence, anything over 1.0 will amplify but potentially clip + + + + + WaveFormat of this WaveProvider + + + + + Read bytes from this WaveProvider + + Buffer to read into + Offset within buffer to read to + Bytes desired + Bytes read + + + + Converts 16 bit PCM to IEEE float, optionally adjusting volume along the way + + + + + Creates a new Wave16toFloatProvider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts IEEE float to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Creates a new WaveFloatTo16Provider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Buffered WaveProvider taking source data from WaveIn + + + + + Creates a new WaveInProvider + n.b. Should make sure the WaveFormat is set correctly on IWaveIn before calling + + The source of wave data + + + + Reads data from the WaveInProvider + + + + + The WaveFormat + + + + + Base class for creating a 16 bit wave provider + + + + + Initializes a new instance of the WaveProvider16 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider16 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a short array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Base class for creating a 32 bit floating point wave provider + Can also be used as a base class for an ISampleProvider that can + be plugged straight into anything requiring an IWaveProvider + + + + + Initializes a new instance of the WaveProvider32 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider32 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a float array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Utility class to intercept audio from an IWaveProvider and + save it to disk + + + + + Constructs a new WaveRecorder + + The location to write the WAV file to + The Source Wave Provider + + + + Read simply returns what the source returns, but writes to disk along the way + + + + + The WaveFormat + + + + + Closes the WAV file + + + + A read-only stream of AIFF data based on an aiff file + with an associated WaveFormat + originally contributed to NAudio by Giawa + + + + Supports opening a AIF file + The AIF is of similar nastiness to the WAV format. + This supports basic reading of uncompressed PCM AIF files, + with 8, 16, 24 and 32 bit PCM data. + + + + + Creates an Aiff File Reader based on an input stream + + The input stream containing a AIF file including header + + + + Ensures valid AIFF header and then finds data offset. + + The stream, positioned at the start of audio data + The format found + The position of the data chunk + The length of the data chunk + Additional chunks found + + + + Cleans up the resources associated with this AiffFileReader + + + + + + + + + + + + + + + Number of Samples (if possible to calculate) + + + + + Position in the AIFF file + + + + + + Reads bytes from the AIFF File + + + + + + AIFF Chunk + + + + + Chunk Name + + + + + Chunk Length + + + + + Chunk start + + + + + Creates a new AIFF Chunk + + + + + AudioFileReader simplifies opening an audio file in NAudio + Simply pass in the filename, and it will attempt to open the + file and set up a conversion path that turns into PCM IEEE float. + ACM codecs will be used for conversion. + It provides a volume property and implements both WaveStream and + ISampleProvider, making it possibly the only stage in your audio + pipeline necessary for simple playback scenarios + + + + + Initializes a new instance of AudioFileReader + + The file to open + + + + Creates the reader stream, supporting all filetypes in the core NAudio library, + and ensuring we are in PCM format + + File Name + + + + File Name + + + + + WaveFormat of this stream + + + + + Length of this stream (in bytes) + + + + + Position of this stream (in bytes) + + + + + Reads from this wave stream + + Audio buffer + Offset into buffer + Number of bytes required + Number of bytes read + + + + Reads audio from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Gets or Sets the Volume of this AudioFileReader. 1.0f is full volume + + + + + Helper to convert source to dest bytes + + + + + Helper to convert dest to source bytes + + + + + Disposes this AudioFileReader + + True if called from Dispose + + + + Helper stream that lets us read from compressed audio files with large block alignment + as though we could read any amount and reposition anywhere + + + + + Creates a new BlockAlignReductionStream + + the input stream + + + + Block alignment of this stream + + + + + Wave Format + + + + + Length of this Stream + + + + + Current position within stream + + + + + Disposes this WaveStream + + + + + Reads data from this stream + + + + + + + + + Implementation of Com IStream + + + + + Holds information on a cue: a labeled position within a Wave file + + + + + Cue position in samples + + + + + Label of the cue + + + + + Creates a Cue based on a sample position and label + + + + + + + Holds a list of cues + + + The specs for reading and writing cues from the cue and list RIFF chunks + are from http://www.sonicspot.com/guide/wavefiles.html and http://www.wotsit.org/ + ------------------------------ + The cues are stored like this: + ------------------------------ + struct CuePoint + { + Int32 dwIdentifier; + Int32 dwPosition; + Int32 fccChunk; + Int32 dwChunkStart; + Int32 dwBlockStart; + Int32 dwSampleOffset; + } + + struct CueChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwCuePoints; + CuePoint[] points; + } + ------------------------------ + Labels look like this: + ------------------------------ + struct ListHeader + { + Int32 listID; /* 'list' */ + Int32 chunkSize; /* includes the Type ID below */ + Int32 typeID; /* 'adtl' */ + } + + struct LabelChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwIdentifier; + Char[] dwText; /* Encoded with extended ASCII */ + } LabelChunk; + + + + + Creates an empty cue list + + + + + Adds an item to the list + + Cue + + + + Gets sample positions for the embedded cues + + Array containing the cue positions + + + + Gets labels for the embedded cues + + Array containing the labels + + + + Creates a cue list from the cue RIFF chunk and the list RIFF chunk + + The data contained in the cue chunk + The data contained in the list chunk + + + + Gets the cues as the concatenated cue and list RIFF chunks. + + RIFF chunks containing the cue data + + + + Number of cues + + + + + Accesses the cue at the specified index + + + + + + + Checks if the cue and list chunks exist and if so, creates a cue list + + + + + A wave file reader supporting cue reading + + + + + Loads a wavefile and supports reading cues + + + + + + Loads a wave from a stream and supports reading cues + + + + + + Cue List (can be null if cues not present) + + + + + An interface for WaveStreams which can report notification of individual samples + + + + + A sample has been detected + + + + + Sample event arguments + + + + + Left sample + + + + + Right sample + + + + + Constructor + + + + + Class for reading any file that Media Foundation can play + Will only work in Windows Vista and above + Automatically converts to PCM + If it is a video file with multiple audio streams, it will pick out the first audio stream + + + + + Allows customisation of this reader class + + + + + Sets up the default settings for MediaFoundationReader + + + + + Allows us to request IEEE float output (n.b. no guarantee this will be accepted) + + + + + If true, the reader object created in the constructor is used in Read + Should only be set to true if you are working entirely on an STA thread, or + entirely with MTA threads. + + + + + If true, the reposition does not happen immediately, but waits until the + next call to read to be processed. + + + + + Default constructor + + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename (can also be a URL e.g. http:// mms:// file://) + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename + Advanced settings + + + + Initializes + + + + + Creates the reader (overridable by ) + + + + + Reads from this wave stream + + Buffer to read into + Offset in buffer + Bytes required + Number of bytes read; 0 indicates end of stream + + + + WaveFormat of this stream (n.b. this is after converting to PCM) + + + + + The bytesRequired of this stream in bytes (n.b may not be accurate) + + + + + Current position within this stream + + + + + Cleans up after finishing with this reader + + true if called from Dispose + + + + WaveFormat has changed + + + + + Class for reading from MP3 files + + + + + The MP3 wave format (n.b. NOT the output format of this stream - see the WaveFormat property) + + + + Supports opening a MP3 file + + + Supports opening a MP3 file + MP3 File name + Factory method to build a frame decompressor + + + + Opens MP3 from a stream rather than a file + Will not dispose of this stream itself + + The incoming stream containing MP3 data + + + + Opens MP3 from a stream rather than a file + Will not dispose of this stream itself + + The incoming stream containing MP3 data + Factory method to build a frame decompressor + + + + Function that can create an MP3 Frame decompressor + + A WaveFormat object describing the MP3 file format + An MP3 Frame decompressor + + + + Creates an ACM MP3 Frame decompressor. This is the default with NAudio + + A WaveFormat object based + + + + + Gets the total length of this file in milliseconds. + + + + + ID3v2 tag if present + + + + + ID3v1 tag if present + + + + + Reads the next mp3 frame + + Next mp3 frame, or null if EOF + + + + Reads the next mp3 frame + + Next mp3 frame, or null if EOF + + + + This is the length in bytes of data available to be read out from the Read method + (i.e. the decompressed MP3 length) + n.b. this may return 0 for files whose length is unknown + + + + + + + + + + + + + + + Reads decompressed PCM data from our MP3 file. + + + + + Xing header if present + + + + + Disposes this WaveStream + + + + + WaveStream that simply passes on data from its source stream + (e.g. a MemoryStream) + + + + + Initialises a new instance of RawSourceWaveStream + + The source stream containing raw audio + The waveformat of the audio in the source stream + + + + Initialises a new instance of RawSourceWaveStream + + The buffer containing raw audio + Offset in the source buffer to read from + Number of bytes to read in the buffer + The waveformat of the audio in the source stream + + + + The WaveFormat of this stream + + + + + The length in bytes of this stream (if supported) + + + + + The current position in this stream + + + + + Reads data from the stream + + + + + Wave Stream for converting between sample rates + + + + + WaveStream to resample using the DMO Resampler + + Input Stream + Desired Output Format + + + + Stream Wave Format + + + + + Stream length in bytes + + + + + Stream position in bytes + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Dispose + + True if disposing (not from finalizer) + + + + Holds information about a RIFF file chunk + + + + + Creates a RiffChunk object + + + + + The chunk identifier + + + + + The chunk identifier converted to a string + + + + + The chunk length + + + + + The stream position this chunk is located at + + + + + A simple compressor + + + + + Create a new simple compressor stream + + Source stream + + + + Make-up Gain + + + + + Threshold + + + + + Ratio + + + + + Attack time + + + + + Release time + + + + + Turns gain on or off + + + + + Gets the WaveFormat of this stream + + + + + Reads bytes from this stream + + Buffer to read into + Offset in array to read into + Number of bytes to read + Number of bytes read + + + + MediaFoundationReader supporting reading from a stream + + + + + Constructs a new media foundation reader from a stream + + + + + Creates the reader + + + + + WaveStream that converts 32 bit audio back down to 16 bit, clipping if necessary + + + + + The method reuses the same buffer to prevent + unnecessary allocations. + + + + + Creates a new Wave32To16Stream + + the source stream + + + + Sets the volume for this stream. 1.0f is full scale + + + + + + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + Destination buffer + Offset into destination buffer + + Number of bytes read. + + + + Conversion to 16 bit and clipping + + + + + + + + + + Clip indicator. Can be reset. + + + + + Disposes this WaveStream + + + + + Represents Channel for the WaveMixerStream + 32 bit output and 16 bit input + It's output is always stereo + The input stream can be panned + + + + + Creates a new WaveChannel32 + + the source stream + stream volume (1 is 0dB) + pan control (-1 to 1) + + + + Creates a WaveChannel32 with default settings + + The source stream + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + If true, Read always returns the number of bytes requested + + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Pan of this channel (from -1 to 1) + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + Sample + + + + + Raise the sample event (no check for null because it has already been done) + + + + This class supports the reading of WAV files, + providing a repositionable WaveStream that returns the raw data + contained in the WAV file + + + + Supports opening a WAV file + The WAV file format is a real mess, but we will only + support the basic WAV file format which actually covers the vast + majority of WAV files out there. For more WAV file format information + visit www.wotsit.org. If you have a WAV file that can't be read by + this class, email it to the NAudio project and we will probably + fix this reader to support it + + + + + Creates a Wave File Reader based on an input stream + + The input stream containing a WAV file including header + + + + Gets a list of the additional chunks found in this file + + + + + Gets the data for the specified chunk + + + + + Cleans up the resources associated with this WaveFileReader + + + + + + + + + + This is the length of audio data contained in this WAV file, in bytes + (i.e. the byte length of the data chunk, not the length of the WAV file itself) + + + + + + Number of Sample Frames (if possible to calculate) + This currently does not take into account number of channels + Multiply number of channels if you want the total number of samples + + + + + Position in the WAV data chunk. + + + + + + Reads bytes from the Wave File + + + + + + Attempts to read the next sample or group of samples as floating point normalised into the range -1.0f to 1.0f + + An array of samples, 1 for mono, 2 for stereo etc. Null indicates end of file reached + + + + + Attempts to read a sample into a float. n.b. only applicable for uncompressed formats + Will normalise the value read into the range -1.0f to 1.0f if it comes from a PCM encoding + + False if the end of the WAV data chunk was reached + + + + IWaveProvider that passes through an ACM Codec + + + + + Create a new WaveFormat conversion stream + + Desired output format + Source Provider + + + + Gets the WaveFormat of this stream + + + + + Indicates that a reposition has taken place, and internal buffers should be reset + + + + + Reads bytes from this stream + + Buffer to read into + Offset in buffer to read into + Number of bytes to read + Number of bytes read + + + + Disposes this stream + + true if the user called this + + + + Disposes this resource + + + + + Finalizer + + + + + WaveStream that passes through an ACM Codec + + + + + Create a new WaveFormat conversion stream + + Desired output format + Source stream + + + + Creates a stream that can convert to PCM + + The source stream + A PCM stream + + + + Gets or sets the current position in the stream + + + + + Converts source bytes to destination bytes + + + + + Converts destination bytes to source bytes + + + + + Returns the stream length + + + + + Gets the WaveFormat of this stream + + + + + + + Buffer to read into + Offset within buffer to write to + Number of bytes to read + Bytes read + + + + Disposes this stream + + true if the user called this + + + + A buffer of Wave samples + + + + + creates a new wavebuffer + + WaveIn device to write to + Buffer size in bytes + + + + Place this buffer back to record more audio + + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + + Provides access to the actual record buffer (for reading only) + + + + + Indicates whether the Done flag is set on this buffer + + + + + Indicates whether the InQueue flag is set on this buffer + + + + + Number of bytes recorded + + + + + The buffer size in bytes + + + + + WaveStream that can mix together multiple 32 bit input streams + (Normally used with stereo input channels) + All channels must have the same number of inputs + + + + + Creates a new 32 bit WaveMixerStream + + + + + Creates a new 32 bit WaveMixerStream + + An Array of WaveStreams - must all have the same format. + Use WaveChannel is designed for this purpose. + Automatically stop when all inputs have been read + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove a WaveStream from the mixer + + waveStream to remove + + + + The number of inputs to this mixer + + + + + Automatically stop when all inputs have been read + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Length of this Wave Stream (in bytes) + + + + + + Position within this Wave Stream (in bytes) + + + + + + + + + + + Disposes this WaveStream + + + + + Simply shifts the input stream in time, optionally + clipping its start and end. + (n.b. may include looping in the future) + + + + + Creates a new WaveOffsetStream + + the source stream + the time at which we should start reading from the source stream + amount to trim off the front of the source stream + length of time to play from source stream + + + + Creates a WaveOffsetStream with default settings (no offset or pre-delay, + and whole length of source stream) + + The source stream + + + + The length of time before which no audio will be played + + + + + An offset into the source stream from which to start playing + + + + + Length of time to read from the source stream + + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + A buffer of Wave samples for streaming to a Wave Output device + + + + + creates a new wavebuffer + + WaveOut device to write to + Buffer size in bytes + Stream to provide more data + Lock to protect WaveOut API's from being called on >1 thread + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + this is called by the WAVE callback and should be used to refill the buffer + + + + Whether the header's in queue flag is set + + + + + The buffer size in bytes + + + + + Base class for all WaveStream classes. Derives from stream. + + + + + Retrieves the WaveFormat for this stream + + + + + We can read from this stream + + + + + We can seek within this stream + + + + + We can't write to this stream + + + + + Flush does not need to do anything + See + + + + + An alternative way of repositioning. + See + + + + + Sets the length of the WaveStream. Not Supported. + + + + + + Writes to the WaveStream. Not Supported. + + + + + The block alignment for this wavestream. Do not modify the Position + to anything that is not a whole multiple of this value + + + + + Moves forward or backwards the specified number of seconds in the stream + + Number of seconds to move, can be negative + + + + The current position in the stream in Time format + + + + + Total length in real-time of the stream (may be an estimate for compressed files) + + + + + Whether the WaveStream has non-zero sample data at the current position for the + specified count + + Number of bytes to read + + + + MP3 Frame decompressor using the Windows Media MP3 Decoder DMO object + + + + + Initializes a new instance of the DMO MP3 Frame decompressor + + + + + + Converted PCM WaveFormat + + + + + Decompress a single frame of MP3 + + + + + Alerts us that a reposition has occured so the MP3 decoder needs to reset its state + + + + + Dispose of this obejct and clean up resources + + + + + http://tech.ebu.ch/docs/tech/tech3306-2009.pdf + + + + + WaveFormat + + + + + Data Chunk Position + + + + + Data Chunk Length + + + + + Riff Chunks + + + + + Soundfont generator + + + + + Gets the generator type + + + + + Generator amount as an unsigned short + + + + + Generator amount as a signed short + + + + + Low byte amount + + + + + High byte amount + + + + + Instrument + + + + + Sample Header + + + + + + + + + + Generator types + + + + Start address offset + + + End address offset + + + Start loop address offset + + + End loop address offset + + + Start address coarse offset + + + Modulation LFO to pitch + + + Vibrato LFO to pitch + + + Modulation envelope to pitch + + + Initial filter cutoff frequency + + + Initial filter Q + + + Modulation LFO to filter Cutoff frequency + + + Modulation envelope to filter cutoff frequency + + + End address coarse offset + + + Modulation LFO to volume + + + Unused + + + Chorus effects send + + + Reverb effects send + + + Pan + + + Unused + + + Unused + + + Unused + + + Delay modulation LFO + + + Frequency modulation LFO + + + Delay vibrato LFO + + + Frequency vibrato LFO + + + Delay modulation envelope + + + Attack modulation envelope + + + Hold modulation envelope + + + Decay modulation envelope + + + Sustain modulation envelop + + + Release modulation envelope + + + Key number to modulation envelope hold + + + Key number to modulation envelope decay + + + Delay volume envelope + + + Attack volume envelope + + + Hold volume envelope + + + Decay volume envelope + + + Sustain volume envelope + + + Release volume envelope + + + Key number to volume envelope hold + + + Key number to volume envelope decay + + + Instrument + + + Reserved + + + Key range + + + Velocity range + + + Start loop address coarse offset + + + Key number + + + Velocity + + + Initial attenuation + + + Reserved + + + End loop address coarse offset + + + Coarse tune + + + Fine tune + + + Sample ID + + + Sample modes + + + Reserved + + + Scale tuning + + + Exclusive class + + + Overriding root key + + + Unused + + + Unused + + + + A soundfont info chunk + + + + + SoundFont Version + + + + + WaveTable sound engine + + + + + Bank name + + + + + Data ROM + + + + + Creation Date + + + + + Author + + + + + Target Product + + + + + Copyright + + + + + Comments + + + + + Tools + + + + + ROM Version + + + + + + + + + + SoundFont instrument + + + + + instrument name + + + + + Zones + + + + + + + + + + Instrument Builder + + + + + Transform Types + + + + + Linear + + + + + Modulator + + + + + Source Modulation data type + + + + + Destination generator type + + + + + Amount + + + + + Source Modulation Amount Type + + + + + Source Transform Type + + + + + + + + + + Controller Sources + + + + + No Controller + + + + + Note On Velocity + + + + + Note On Key Number + + + + + Poly Pressure + + + + + Channel Pressure + + + + + Pitch Wheel + + + + + Pitch Wheel Sensitivity + + + + + Source Types + + + + + Linear + + + + + Concave + + + + + Convex + + + + + Switch + + + + + Modulator Type + + + + + + + + + + + A SoundFont Preset + + + + + Preset name + + + + + Patch Number + + + + + Bank number + 0 - 127, GM percussion bank is 128 + + + + + Zones + + + + + + + + + + Class to read the SoundFont file presets chunk + + + + + The Presets contained in this chunk + + + + + The instruments contained in this chunk + + + + + The sample headers contained in this chunk + + + + + + + + + + just reads a chunk ID at the current position + + chunk ID + + + + reads a chunk at the current position + + + + + creates a new riffchunk from current position checking that we're not + at the end of this chunk first + + the new chunk + + + + useful for chunks that just contain a string + + chunk as string + + + + A SoundFont Sample Header + + + + + The sample name + + + + + Start offset + + + + + End offset + + + + + Start loop point + + + + + End loop point + + + + + Sample Rate + + + + + Original pitch + + + + + Pitch correction + + + + + Sample Link + + + + + SoundFont Sample Link Type + + + + + + + + + + SoundFont sample modes + + + + + No loop + + + + + Loop Continuously + + + + + Reserved no loop + + + + + Loop and continue + + + + + Sample Link Type + + + + + Mono Sample + + + + + Right Sample + + + + + Left Sample + + + + + Linked Sample + + + + + ROM Mono Sample + + + + + ROM Right Sample + + + + + ROM Left Sample + + + + + ROM Linked Sample + + + + + SoundFont Version Structure + + + + + Major Version + + + + + Minor Version + + + + + Builds a SoundFont version + + + + + Reads a SoundFont Version structure + + + + + Writes a SoundFont Version structure + + + + + Gets the length of this structure + + + + + Represents a SoundFont + + + + + Loads a SoundFont from a file + + Filename of the SoundFont + + + + Loads a SoundFont from a stream + + stream + + + + The File Info Chunk + + + + + The Presets + + + + + The Instruments + + + + + The Sample Headers + + + + + The Sample Data + + + + + + + + + + base class for structures that can read themselves + + + + + A SoundFont zone + + + + + + + + + + Modulators for this Zone + + + + + Generators for this Zone + + + + + Summary description for Fader. + + + + + Required designer variable. + + + + + Creates a new Fader control + + + + + Clean up any resources being used. + + + + + + + + + + + + + + + + + + + + + + + + + Minimum value of this fader + + + + + Maximum value of this fader + + + + + Current value of this fader + + + + + Fader orientation + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Pan slider control + + + + + Required designer variable. + + + + + True when pan value changed + + + + + Creates a new PanSlider control + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + + The current Pan setting + + + + + Control that represents a potentiometer + TODO list: + Optional Log scale + Optional reverse scale + Keyboard control + Optional bitmap mode + Optional complete draw mode + Tooltip support + + + + + Value changed event + + + + + Creates a new pot control + + + + + Minimum Value of the Pot + + + + + Maximum Value of the Pot + + + + + The current value of the pot + + + + + Draws the control + + + + + Handles the mouse down event to allow changing value by dragging + + + + + Handles the mouse up event to allow changing value by dragging + + + + + Handles the mouse down event to allow changing value by dragging + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Implements a rudimentary volume meter + + + + + Basic volume meter + + + + + On Fore Color Changed + + + + + Current Value + + + + + Minimum decibels + + + + + Maximum decibels + + + + + Meter orientation + + + + + Paints the volume meter + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + VolumeSlider control + + + + + Required designer variable. + + + + + Volume changed event + + + + + Creates a new VolumeSlider control + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + The volume for this control + + + + + Windows Forms control for painting audio waveforms + + + + + Constructs a new instance of the WaveFormPainter class + + + + + On Resize + + + + + On ForeColor Changed + + + + + + Add Max Value + + + + + + On Paint + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Control for viewing waveforms + + + + + Required designer variable. + + + + + Creates a new WaveViewer control + + + + + sets the associated wavestream + + + + + The zoom level, in samples per pixel + + + + + Start position (currently in bytes) + + + + + Clean up any resources being used. + + + + + + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Audio Subtype GUIDs + http://msdn.microsoft.com/en-us/library/windows/desktop/aa372553%28v=vs.85%29.aspx + + + + + Advanced Audio Coding (AAC). + + + + + Not used + + + + + Dolby AC-3 audio over Sony/Philips Digital Interface (S/PDIF). + + + + + Encrypted audio data used with secure audio path. + + + + + Digital Theater Systems (DTS) audio. + + + + + Uncompressed IEEE floating-point audio. + + + + + MPEG Audio Layer-3 (MP3). + + + + + MPEG-1 audio payload. + + + + + Windows Media Audio 9 Voice codec. + + + + + Uncompressed PCM audio. + + + + + Windows Media Audio 9 Professional codec over S/PDIF. + + + + + Windows Media Audio 9 Lossless codec or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 8 codec, Windows Media Audio 9 codec, or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 9 Professional codec or Windows Media Audio 9.1 Professional codec. + + + + + Dolby Digital (AC-3). + + + + + MPEG-4 and AAC Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + μ-law coding + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Adaptive delta pulse code modulation (ADPCM) + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Dolby Digital Plus formatted for HDMI output. + http://msdn.microsoft.com/en-us/library/windows/hardware/ff538392(v=vs.85).aspx + Reference : internet + + + + + MSAudio1 - unknown meaning + Reference : wmcodecdsp.h + + + + + IMA ADPCM ACM Wrapper + + + + + WMSP2 - unknown meaning + Reference: wmsdkidl.h + + + + + IMFActivate, defined in mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Creates the object associated with this activation object. + + + + + Shuts down the created object. + + + + + Detaches the created object from the activation object. + + + + + Provides a generic way to store key/value pairs on an object. + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms704598%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + IMFByteStream + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms698720%28v=vs.85%29.aspx + + + + + Retrieves the characteristics of the byte stream. + virtual HRESULT STDMETHODCALLTYPE GetCapabilities(/*[out]*/ __RPC__out DWORD *pdwCapabilities) = 0; + + + + + Retrieves the length of the stream. + virtual HRESULT STDMETHODCALLTYPE GetLength(/*[out]*/ __RPC__out QWORD *pqwLength) = 0; + + + + + Sets the length of the stream. + virtual HRESULT STDMETHODCALLTYPE SetLength(/*[in]*/ QWORD qwLength) = 0; + + + + + Retrieves the current read or write position in the stream. + virtual HRESULT STDMETHODCALLTYPE GetCurrentPosition(/*[out]*/ __RPC__out QWORD *pqwPosition) = 0; + + + + + Sets the current read or write position. + virtual HRESULT STDMETHODCALLTYPE SetCurrentPosition(/*[in]*/ QWORD qwPosition) = 0; + + + + + Queries whether the current position has reached the end of the stream. + virtual HRESULT STDMETHODCALLTYPE IsEndOfStream(/*[out]*/ __RPC__out BOOL *pfEndOfStream) = 0; + + + + + Reads data from the stream. + virtual HRESULT STDMETHODCALLTYPE Read(/*[size_is][out]*/ __RPC__out_ecount_full(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbRead) = 0; + + + + + Begins an asynchronous read operation from the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginRead(/*[out]*/ _Out_writes_bytes_(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous read operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndRead(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbRead) = 0; + + + + + Writes data to the stream. + virtual HRESULT STDMETHODCALLTYPE Write(/*[size_is][in]*/ __RPC__in_ecount_full(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbWritten) = 0; + + + + + Begins an asynchronous write operation to the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginWrite(/*[in]*/ _In_reads_bytes_(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous write operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndWrite(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbWritten) = 0; + + + + + Moves the current position in the stream by a specified offset. + virtual HRESULT STDMETHODCALLTYPE Seek(/*[in]*/ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, /*[in]*/ LONGLONG llSeekOffset, /*[in]*/ DWORD dwSeekFlags, /*[out]*/ __RPC__out QWORD *pqwCurrentPosition) = 0; + + + + + Clears any internal buffers used by the stream. + virtual HRESULT STDMETHODCALLTYPE Flush( void) = 0; + + + + + Closes the stream and releases any resources associated with the stream. + virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; + + + + + Represents a generic collection of IUnknown pointers. + + + + + Retrieves the number of objects in the collection. + + + + + Retrieves an object in the collection. + + + + + Adds an object to the collection. + + + + + Removes an object from the collection. + + + + + Removes an object from the collection. + + + + + Removes all items from the collection. + + + + + IMFMediaBuffer + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms696261%28v=vs.85%29.aspx + + + + + Gives the caller access to the memory in the buffer. + + + + + Unlocks a buffer that was previously locked. + + + + + Retrieves the length of the valid data in the buffer. + + + + + Sets the length of the valid data in the buffer. + + + + + Retrieves the allocated size of the buffer. + + + + + IMFMediaEvent - Represents an event generated by a Media Foundation object. Use this interface to get information about the event. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms702249%28v=vs.85%29.aspx + Mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the event type. + + + virtual HRESULT STDMETHODCALLTYPE GetType( + /* [out] */ __RPC__out MediaEventType *pmet) = 0; + + + + + Retrieves the extended type of the event. + + + virtual HRESULT STDMETHODCALLTYPE GetExtendedType( + /* [out] */ __RPC__out GUID *pguidExtendedType) = 0; + + + + + Retrieves an HRESULT that specifies the event status. + + + virtual HRESULT STDMETHODCALLTYPE GetStatus( + /* [out] */ __RPC__out HRESULT *phrStatus) = 0; + + + + + Retrieves the value associated with the event, if any. + + + virtual HRESULT STDMETHODCALLTYPE GetValue( + /* [out] */ __RPC__out PROPVARIANT *pvValue) = 0; + + + + + Represents a description of a media format. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms704850%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the major type of the format. + + + + + Queries whether the media type is a compressed format. + + + + + Compares two media types and determines whether they are identical. + + + + + Retrieves an alternative representation of the media type. + + + + + Frees memory that was allocated by the GetRepresentation method. + + + + + Creates an instance of either the sink writer or the source reader. + + + + + Creates an instance of the sink writer or source reader, given a URL. + + + + + Creates an instance of the sink writer or source reader, given an IUnknown pointer. + + + + + CLSID_MFReadWriteClassFactory + + + + + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms702192%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves flags associated with the sample. + + + + + Sets flags associated with the sample. + + + + + Retrieves the presentation time of the sample. + + + + + Sets the presentation time of the sample. + + + + + Retrieves the duration of the sample. + + + + + Sets the duration of the sample. + + + + + Retrieves the number of buffers in the sample. + + + + + Retrieves a buffer from the sample. + + + + + Converts a sample with multiple buffers into a sample with a single buffer. + + + + + Adds a buffer to the end of the list of buffers in the sample. + + + + + Removes a buffer at a specified index from the sample. + + + + + Removes all buffers from the sample. + + + + + Retrieves the total length of the valid data in all of the buffers in the sample. + + + + + Copies the sample data to a buffer. + + + + + Implemented by the Microsoft Media Foundation sink writer object. + + + + + Adds a stream to the sink writer. + + + + + Sets the input format for a stream on the sink writer. + + + + + Initializes the sink writer for writing. + + + + + Delivers a sample to the sink writer. + + + + + Indicates a gap in an input stream. + + + + + Places a marker in the specified stream. + + + + + Notifies the media sink that a stream has reached the end of a segment. + + + + + Flushes one or more streams. + + + + + (Finalize) Completes all writing operations on the sink writer. + + + + + Queries the underlying media sink or encoder for an interface. + + + + + Gets statistics about the performance of the sink writer. + + + + + IMFSourceReader interface + http://msdn.microsoft.com/en-us/library/windows/desktop/dd374655%28v=vs.85%29.aspx + + + + + Queries whether a stream is selected. + + + + + Selects or deselects one or more streams. + + + + + Gets a format that is supported natively by the media source. + + + + + Gets the current media type for a stream. + + + + + Sets the media type for a stream. + + + + + Seeks to a new position in the media source. + + + + + Reads the next sample from the media source. + + + + + Flushes one or more streams. + + + + + Queries the underlying media source or decoder for an interface. + + + + + Gets an attribute from the underlying media source. + + + + + Contains flags that indicate the status of the IMFSourceReader::ReadSample method + http://msdn.microsoft.com/en-us/library/windows/desktop/dd375773(v=vs.85).aspx + + + + + No Error + + + + + An error occurred. If you receive this flag, do not make any further calls to IMFSourceReader methods. + + + + + The source reader reached the end of the stream. + + + + + One or more new streams were created + + + + + The native format has changed for one or more streams. The native format is the format delivered by the media source before any decoders are inserted. + + + + + The current media has type changed for one or more streams. To get the current media type, call the IMFSourceReader::GetCurrentMediaType method. + + + + + There is a gap in the stream. This flag corresponds to an MEStreamTick event from the media source. + + + + + All transforms inserted by the application have been removed for a particular stream. + + + + + IMFTransform, defined in mftransform.h + + + + + Retrieves the minimum and maximum number of input and output streams. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamLimits( + /* [out] */ __RPC__out DWORD *pdwInputMinimum, + /* [out] */ __RPC__out DWORD *pdwInputMaximum, + /* [out] */ __RPC__out DWORD *pdwOutputMinimum, + /* [out] */ __RPC__out DWORD *pdwOutputMaximum) = 0; + + + + + Retrieves the current number of input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamCount( + /* [out] */ __RPC__out DWORD *pcInputStreams, + /* [out] */ __RPC__out DWORD *pcOutputStreams) = 0; + + + + + Retrieves the stream identifiers for the input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamIDs( + DWORD dwInputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwInputIDArraySize) DWORD *pdwInputIDs, + DWORD dwOutputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwOutputIDArraySize) DWORD *pdwOutputIDs) = 0; + + + + + Gets the buffer requirements and other information for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamInfo( + DWORD dwInputStreamID, + /* [out] */ __RPC__out MFT_INPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the buffer requirements and other information for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamInfo( + DWORD dwOutputStreamID, + /* [out] */ __RPC__out MFT_OUTPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the global attribute store for this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetAttributes( + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an input stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamAttributes( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamAttributes( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Removes an input stream from this MFT. + + + virtual HRESULT STDMETHODCALLTYPE DeleteInputStream( + DWORD dwStreamID) = 0; + + + + + Adds one or more new input streams to this MFT. + + + virtual HRESULT STDMETHODCALLTYPE AddInputStreams( + DWORD cStreams, + /* [in] */ __RPC__in DWORD *adwStreamIDs) = 0; + + + + + Gets an available media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputAvailableType( + DWORD dwInputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Retrieves an available media type for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputAvailableType( + DWORD dwOutputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Sets, tests, or clears the media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetInputType( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Sets, tests, or clears the media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetOutputType( + DWORD dwOutputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Gets the current media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputCurrentType( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Gets the current media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputCurrentType( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Queries whether an input stream on this Media Foundation transform (MFT) can accept more data. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStatus( + DWORD dwInputStreamID, + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Queries whether the Media Foundation transform (MFT) is ready to produce output data. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStatus( + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Sets the range of time stamps the client needs for output. + + + virtual HRESULT STDMETHODCALLTYPE SetOutputBounds( + LONGLONG hnsLowerBound, + LONGLONG hnsUpperBound) = 0; + + + + + Sends an event to an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessEvent( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaEvent *pEvent) = 0; + + + + + Sends a message to the Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessMessage( + MFT_MESSAGE_TYPE eMessage, + ULONG_PTR ulParam) = 0; + + + + + Delivers data to an input stream on this Media Foundation transform (MFT). + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessInput( + DWORD dwInputStreamID, + IMFSample *pSample, + DWORD dwFlags) = 0; + + + + + Generates output from the current input data. + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessOutput( + DWORD dwFlags, + DWORD cOutputBufferCount, + /* [size_is][out][in] */ MFT_OUTPUT_DATA_BUFFER *pOutputSamples, + /* [out] */ DWORD *pdwStatus) = 0; + + + + + See mfobjects.h + + + + + Unknown event type. + + + + + Signals a serious error. + + + + + Custom event type. + + + + + A non-fatal error occurred during streaming. + + + + + Session Unknown + + + + + Raised after the IMFMediaSession::SetTopology method completes asynchronously + + + + + Raised by the Media Session when the IMFMediaSession::ClearTopologies method completes asynchronously. + + + + + Raised when the IMFMediaSession::Start method completes asynchronously. + + + + + Raised when the IMFMediaSession::Pause method completes asynchronously. + + + + + Raised when the IMFMediaSession::Stop method completes asynchronously. + + + + + Raised when the IMFMediaSession::Close method completes asynchronously. + + + + + Raised by the Media Session when it has finished playing the last presentation in the playback queue. + + + + + Raised by the Media Session when the playback rate changes. + + + + + Raised by the Media Session when it completes a scrubbing request. + + + + + Raised by the Media Session when the session capabilities change. + + + + + Raised by the Media Session when the status of a topology changes. + + + + + Raised by the Media Session when a new presentation starts. + + + + + Raised by a media source a new presentation is ready. + + + + + License acquisition is about to begin. + + + + + License acquisition is complete. + + + + + Individualization is about to begin. + + + + + Individualization is complete. + + + + + Signals the progress of a content enabler object. + + + + + A content enabler object's action is complete. + + + + + Raised by a trusted output if an error occurs while enforcing the output policy. + + + + + Contains status information about the enforcement of an output policy. + + + + + A media source started to buffer data. + + + + + A media source stopped buffering data. + + + + + The network source started opening a URL. + + + + + The network source finished opening a URL. + + + + + Raised by a media source at the start of a reconnection attempt. + + + + + Raised by a media source at the end of a reconnection attempt. + + + + + Raised by the enhanced video renderer (EVR) when it receives a user event from the presenter. + + + + + Raised by the Media Session when the format changes on a media sink. + + + + + Source Unknown + + + + + Raised when a media source starts without seeking. + + + + + Raised by a media stream when the source starts without seeking. + + + + + Raised when a media source seeks to a new position. + + + + + Raised by a media stream after a call to IMFMediaSource::Start causes a seek in the stream. + + + + + Raised by a media source when it starts a new stream. + + + + + Raised by a media source when it restarts or seeks a stream that is already active. + + + + + Raised by a media source when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media source when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media source when a presentation ends. + + + + + Raised by a media stream when the stream ends. + + + + + Raised when a media stream delivers a new sample. + + + + + Signals that a media stream does not have data available at a specified time. + + + + + Raised by a media stream when it starts or stops thinning the stream. + + + + + Raised by a media stream when the media type of the stream changes. + + + + + Raised by a media source when the playback rate changes. + + + + + Raised by the sequencer source when a segment is completed and is followed by another segment. + + + + + Raised by a media source when the source's characteristics change. + + + + + Raised by a media source to request a new playback rate. + + + + + Raised by a media source when it updates its metadata. + + + + + Raised by the sequencer source when the IMFSequencerSource::UpdateTopology method completes asynchronously. + + + + + Sink Unknown + + + + + Raised by a stream sink when it completes the transition to the running state. + + + + + Raised by a stream sink when it completes the transition to the stopped state. + + + + + Raised by a stream sink when it completes the transition to the paused state. + + + + + Raised by a stream sink when the rate has changed. + + + + + Raised by a stream sink to request a new media sample from the pipeline. + + + + + Raised by a stream sink after the IMFStreamSink::PlaceMarker method is called. + + + + + Raised by a stream sink when the stream has received enough preroll data to begin rendering. + + + + + Raised by a stream sink when it completes a scrubbing request. + + + + + Raised by a stream sink when the sink's media type is no longer valid. + + + + + Raised by the stream sinks of the EVR if the video device changes. + + + + + Provides feedback about playback quality to the quality manager. + + + + + Raised when a media sink becomes invalid. + + + + + The audio session display name changed. + + + + + The volume or mute state of the audio session changed + + + + + The audio device was removed. + + + + + The Windows audio server system was shut down. + + + + + The grouping parameters changed for the audio session. + + + + + The audio session icon changed. + + + + + The default audio format for the audio device changed. + + + + + The audio session was disconnected from a Windows Terminal Services session + + + + + The audio session was preempted by an exclusive-mode connection. + + + + + Trust Unknown + + + + + The output policy for a stream changed. + + + + + Content protection message + + + + + The IMFOutputTrustAuthority::SetPolicy method completed. + + + + + DRM License Backup Completed + + + + + DRM License Backup Progress + + + + + DRM License Restore Completed + + + + + DRM License Restore Progress + + + + + DRM License Acquisition Completed + + + + + DRM Individualization Completed + + + + + DRM Individualization Progress + + + + + DRM Proximity Completed + + + + + DRM License Store Cleaned + + + + + DRM Revocation Download Completed + + + + + Transform Unknown + + + + + Sent by an asynchronous MFT to request a new input sample. + + + + + Sent by an asynchronous MFT when new output data is available from the MFT. + + + + + Sent by an asynchronous Media Foundation transform (MFT) when a drain operation is complete. + + + + + Sent by an asynchronous MFT in response to an MFT_MESSAGE_COMMAND_MARKER message. + + + + + Media Foundation attribute guids + http://msdn.microsoft.com/en-us/library/windows/desktop/ms696989%28v=vs.85%29.aspx + + + + + Specifies whether an MFT performs asynchronous processing. + + + + + Enables the use of an asynchronous MFT. + + + + + Contains flags for an MFT activation object. + + + + + Specifies the category for an MFT. + + + + + Contains the class identifier (CLSID) of an MFT. + + + + + Contains the registered input types for a Media Foundation transform (MFT). + + + + + Contains the registered output types for a Media Foundation transform (MFT). + + + + + Contains the symbolic link for a hardware-based MFT. + + + + + Contains the display name for a hardware-based MFT. + + + + + Contains a pointer to the stream attributes of the connected stream on a hardware-based MFT. + + + + + Specifies whether a hardware-based MFT is connected to another hardware-based MFT. + + + + + Specifies the preferred output format for an encoder. + + + + + Specifies whether an MFT is registered only in the application's process. + + + + + Contains configuration properties for an encoder. + + + + + Specifies whether a hardware device source uses the system time for time stamps. + + + + + Contains an IMFFieldOfUseMFTUnlock pointer, which can be used to unlock the MFT. + + + + + Contains the merit value of a hardware codec. + + + + + Specifies whether a decoder is optimized for transcoding rather than for playback. + + + + + Contains a pointer to the proxy object for the application's presentation descriptor. + + + + + Contains a pointer to the presentation descriptor from the protected media path (PMP). + + + + + Specifies the duration of a presentation, in 100-nanosecond units. + + + + + Specifies the total size of the source file, in bytes. + + + + + Specifies the audio encoding bit rate for the presentation, in bits per second. + + + + + Specifies the video encoding bit rate for the presentation, in bits per second. + + + + + Specifies the MIME type of the content. + + + + + Specifies when a presentation was last modified. + + + + + The identifier of the playlist element in the presentation. + + + + + Contains the preferred RFC 1766 language of the media source. + + + + + The time at which the presentation must begin, relative to the start of the media source. + + + + + Specifies whether the audio streams in the presentation have a variable bit rate. + + + + + Media type Major Type + + + + + Media Type subtype + + + + + Audio block alignment + + + + + Audio average bytes per second + + + + + Audio number of channels + + + + + Audio samples per second + + + + + Audio bits per sample + + + + + Enables the source reader or sink writer to use hardware-based Media Foundation transforms (MFTs). + + + + + Contains additional format data for a media type. + + + + + Specifies for a media type whether each sample is independent of the other samples in the stream. + + + + + Specifies for a media type whether the samples have a fixed size. + + + + + Contains a DirectShow format GUID for a media type. + + + + + Specifies the preferred legacy format structure to use when converting an audio media type. + + + + + Specifies for a media type whether the media data is compressed. + + + + + Approximate data rate of the video stream, in bits per second, for a video media type. + + + + + Specifies the payload type of an Advanced Audio Coding (AAC) stream. + 0 - The stream contains raw_data_block elements only + 1 - Audio Data Transport Stream (ADTS). The stream contains an adts_sequence, as defined by MPEG-2. + 2 - Audio Data Interchange Format (ADIF). The stream contains an adif_sequence, as defined by MPEG-2. + 3 - The stream contains an MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + + + + + Specifies the audio profile and level of an Advanced Audio Coding (AAC) stream, as defined by ISO/IEC 14496-3. + + + + + Media Foundation Errors + + + + RANGES + 14000 - 14999 = General Media Foundation errors + 15000 - 15999 = ASF parsing errors + 16000 - 16999 = Media Source errors + 17000 - 17999 = MEDIAFOUNDATION Network Error Events + 18000 - 18999 = MEDIAFOUNDATION WMContainer Error Events + 19000 - 19999 = MEDIAFOUNDATION Media Sink Error Events + 20000 - 20999 = Renderer errors + 21000 - 21999 = Topology Errors + 25000 - 25999 = Timeline Errors + 26000 - 26999 = Unused + 28000 - 28999 = Transform errors + 29000 - 29999 = Content Protection errors + 40000 - 40999 = Clock errors + 41000 - 41999 = MF Quality Management Errors + 42000 - 42999 = MF Transcode API Errors + + + + + MessageId: MF_E_PLATFORM_NOT_INITIALIZED + + MessageText: + + Platform not initialized. Please call MFStartup().%0 + + + + + MessageId: MF_E_BUFFERTOOSMALL + + MessageText: + + The buffer was too small to carry out the requested action.%0 + + + + + MessageId: MF_E_INVALIDREQUEST + + MessageText: + + The request is invalid in the current state.%0 + + + + + MessageId: MF_E_INVALIDSTREAMNUMBER + + MessageText: + + The stream number provided was invalid.%0 + + + + + MessageId: MF_E_INVALIDMEDIATYPE + + MessageText: + + The data specified for the media type is invalid, inconsistent, or not supported by this object.%0 + + + + + MessageId: MF_E_NOTACCEPTING + + MessageText: + + The callee is currently not accepting further input.%0 + + + + + MessageId: MF_E_NOT_INITIALIZED + + MessageText: + + This object needs to be initialized before the requested operation can be carried out.%0 + + + + + MessageId: MF_E_UNSUPPORTED_REPRESENTATION + + MessageText: + + The requested representation is not supported by this object.%0 + + + + + MessageId: MF_E_NO_MORE_TYPES + + MessageText: + + An object ran out of media types to suggest therefore the requested chain of streaming objects cannot be completed.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SERVICE + + MessageText: + + The object does not support the specified service.%0 + + + + + MessageId: MF_E_UNEXPECTED + + MessageText: + + An unexpected error has occurred in the operation requested.%0 + + + + + MessageId: MF_E_INVALIDNAME + + MessageText: + + Invalid name.%0 + + + + + MessageId: MF_E_INVALIDTYPE + + MessageText: + + Invalid type.%0 + + + + + MessageId: MF_E_INVALID_FILE_FORMAT + + MessageText: + + The file does not conform to the relevant file format specification. + + + + + MessageId: MF_E_INVALIDINDEX + + MessageText: + + Invalid index.%0 + + + + + MessageId: MF_E_INVALID_TIMESTAMP + + MessageText: + + An invalid timestamp was given.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SCHEME + + MessageText: + + The scheme of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_BYTESTREAM_TYPE + + MessageText: + + The byte stream type of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_TIME_FORMAT + + MessageText: + + The given time format is unsupported.%0 + + + + + MessageId: MF_E_NO_SAMPLE_TIMESTAMP + + MessageText: + + The Media Sample does not have a timestamp.%0 + + + + + MessageId: MF_E_NO_SAMPLE_DURATION + + MessageText: + + The Media Sample does not have a duration.%0 + + + + + MessageId: MF_E_INVALID_STREAM_DATA + + MessageText: + + The request failed because the data in the stream is corrupt.%0\n. + + + + + MessageId: MF_E_RT_UNAVAILABLE + + MessageText: + + Real time services are not available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE + + MessageText: + + The specified rate is not supported.%0 + + + + + MessageId: MF_E_THINNING_UNSUPPORTED + + MessageText: + + This component does not support stream-thinning.%0 + + + + + MessageId: MF_E_REVERSE_UNSUPPORTED + + MessageText: + + The call failed because no reverse playback rates are available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE_TRANSITION + + MessageText: + + The requested rate transition cannot occur in the current state.%0 + + + + + MessageId: MF_E_RATE_CHANGE_PREEMPTED + + MessageText: + + The requested rate change has been pre-empted and will not occur.%0 + + + + + MessageId: MF_E_NOT_FOUND + + MessageText: + + The specified object or value does not exist.%0 + + + + + MessageId: MF_E_NOT_AVAILABLE + + MessageText: + + The requested value is not available.%0 + + + + + MessageId: MF_E_NO_CLOCK + + MessageText: + + The specified operation requires a clock and no clock is available.%0 + + + + + MessageId: MF_S_MULTIPLE_BEGIN + + MessageText: + + This callback and state had already been passed in to this event generator earlier.%0 + + + + + MessageId: MF_E_MULTIPLE_BEGIN + + MessageText: + + This callback has already been passed in to this event generator.%0 + + + + + MessageId: MF_E_MULTIPLE_SUBSCRIBERS + + MessageText: + + Some component is already listening to events on this event generator.%0 + + + + + MessageId: MF_E_TIMER_ORPHANED + + MessageText: + + This timer was orphaned before its callback time arrived.%0 + + + + + MessageId: MF_E_STATE_TRANSITION_PENDING + + MessageText: + + A state transition is already pending.%0 + + + + + MessageId: MF_E_UNSUPPORTED_STATE_TRANSITION + + MessageText: + + The requested state transition is unsupported.%0 + + + + + MessageId: MF_E_UNRECOVERABLE_ERROR_OCCURRED + + MessageText: + + An unrecoverable error has occurred.%0 + + + + + MessageId: MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS + + MessageText: + + The provided sample has too many buffers.%0 + + + + + MessageId: MF_E_SAMPLE_NOT_WRITABLE + + MessageText: + + The provided sample is not writable.%0 + + + + + MessageId: MF_E_INVALID_KEY + + MessageText: + + The specified key is not valid. + + + + + MessageId: MF_E_BAD_STARTUP_VERSION + + MessageText: + + You are calling MFStartup with the wrong MF_VERSION. Mismatched bits? + + + + + MessageId: MF_E_UNSUPPORTED_CAPTION + + MessageText: + + The caption of the given URL is unsupported.%0 + + + + + MessageId: MF_E_INVALID_POSITION + + MessageText: + + The operation on the current offset is not permitted.%0 + + + + + MessageId: MF_E_ATTRIBUTENOTFOUND + + MessageText: + + The requested attribute was not found.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_ALLOWED + + MessageText: + + The specified property type is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_SUPPORTED + + MessageText: + + The specified property type is not supported.%0 + + + + + MessageId: MF_E_PROPERTY_EMPTY + + MessageText: + + The specified property is empty.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_EMPTY + + MessageText: + + The specified property is not empty.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_NOT_ALLOWED + + MessageText: + + The vector property specified is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_REQUIRED + + MessageText: + + A vector property is required in this context.%0 + + + + + MessageId: MF_E_OPERATION_CANCELLED + + MessageText: + + The operation is cancelled.%0 + + + + + MessageId: MF_E_BYTESTREAM_NOT_SEEKABLE + + MessageText: + + The provided bytestream was expected to be seekable and it is not.%0 + + + + + MessageId: MF_E_DISABLED_IN_SAFEMODE + + MessageText: + + The Media Foundation platform is disabled when the system is running in Safe Mode.%0 + + + + + MessageId: MF_E_CANNOT_PARSE_BYTESTREAM + + MessageText: + + The Media Source could not parse the byte stream.%0 + + + + + MessageId: MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS + + MessageText: + + Mutually exclusive flags have been specified to source resolver. This flag combination is invalid.%0 + + + + + MessageId: MF_E_MEDIAPROC_WRONGSTATE + + MessageText: + + MediaProc is in the wrong state%0 + + + + + MessageId: MF_E_RT_THROUGHPUT_NOT_AVAILABLE + + MessageText: + + Real time I/O service can not provide requested throughput.%0 + + + + + MessageId: MF_E_RT_TOO_MANY_CLASSES + + MessageText: + + The workqueue cannot be registered with more classes.%0 + + + + + MessageId: MF_E_RT_WOULDBLOCK + + MessageText: + + This operation cannot succeed because another thread owns this object.%0 + + + + + MessageId: MF_E_NO_BITPUMP + + MessageText: + + Internal. Bitpump not found.%0 + + + + + MessageId: MF_E_RT_OUTOFMEMORY + + MessageText: + + No more RT memory available.%0 + + + + + MessageId: MF_E_RT_WORKQUEUE_CLASS_NOT_SPECIFIED + + MessageText: + + An MMCSS class has not been set for this work queue.%0 + + + + + MessageId: MF_E_INSUFFICIENT_BUFFER + + MessageText: + + Insufficient memory for response.%0 + + + + + MessageId: MF_E_CANNOT_CREATE_SINK + + MessageText: + + Activate failed to create mediasink. Call OutputNode::GetUINT32(MF_TOPONODE_MAJORTYPE) for more information. %0 + + + + + MessageId: MF_E_BYTESTREAM_UNKNOWN_LENGTH + + MessageText: + + The length of the provided bytestream is unknown.%0 + + + + + MessageId: MF_E_SESSION_PAUSEWHILESTOPPED + + MessageText: + + The media session cannot pause from a stopped state.%0 + + + + + MessageId: MF_S_ACTIVATE_REPLACED + + MessageText: + + The activate could not be created in the remote process for some reason it was replaced with empty one.%0 + + + + + MessageId: MF_E_FORMAT_CHANGE_NOT_SUPPORTED + + MessageText: + + The data specified for the media type is supported, but would require a format change, which is not supported by this object.%0 + + + + + MessageId: MF_E_INVALID_WORKQUEUE + + MessageText: + + The operation failed because an invalid combination of workqueue ID and flags was specified.%0 + + + + + MessageId: MF_E_DRM_UNSUPPORTED + + MessageText: + + No DRM support is available.%0 + + + + + MessageId: MF_E_UNAUTHORIZED + + MessageText: + + This operation is not authorized.%0 + + + + + MessageId: MF_E_OUT_OF_RANGE + + MessageText: + + The value is not in the specified or valid range.%0 + + + + + MessageId: MF_E_INVALID_CODEC_MERIT + + MessageText: + + The registered codec merit is not valid.%0 + + + + + MessageId: MF_E_HW_MFT_FAILED_START_STREAMING + + MessageText: + + Hardware MFT failed to start streaming due to lack of hardware resources.%0 + + + + + MessageId: MF_S_ASF_PARSEINPROGRESS + + MessageText: + + Parsing is still in progress and is not yet complete.%0 + + + + + MessageId: MF_E_ASF_PARSINGINCOMPLETE + + MessageText: + + Not enough data have been parsed to carry out the requested action.%0 + + + + + MessageId: MF_E_ASF_MISSINGDATA + + MessageText: + + There is a gap in the ASF data provided.%0 + + + + + MessageId: MF_E_ASF_INVALIDDATA + + MessageText: + + The data provided are not valid ASF.%0 + + + + + MessageId: MF_E_ASF_OPAQUEPACKET + + MessageText: + + The packet is opaque, so the requested information cannot be returned.%0 + + + + + MessageId: MF_E_ASF_NOINDEX + + MessageText: + + The requested operation failed since there is no appropriate ASF index.%0 + + + + + MessageId: MF_E_ASF_OUTOFRANGE + + MessageText: + + The value supplied is out of range for this operation.%0 + + + + + MessageId: MF_E_ASF_INDEXNOTLOADED + + MessageText: + + The index entry requested needs to be loaded before it can be available.%0 + + + + + MessageId: MF_E_ASF_TOO_MANY_PAYLOADS + + MessageText: + + The packet has reached the maximum number of payloads.%0 + + + + + MessageId: MF_E_ASF_UNSUPPORTED_STREAM_TYPE + + MessageText: + + Stream type is not supported.%0 + + + + + MessageId: MF_E_ASF_DROPPED_PACKET + + MessageText: + + One or more ASF packets were dropped.%0 + + + + + MessageId: MF_E_NO_EVENTS_AVAILABLE + + MessageText: + + There are no events available in the queue.%0 + + + + + MessageId: MF_E_INVALID_STATE_TRANSITION + + MessageText: + + A media source cannot go from the stopped state to the paused state.%0 + + + + + MessageId: MF_E_END_OF_STREAM + + MessageText: + + The media stream cannot process any more samples because there are no more samples in the stream.%0 + + + + + MessageId: MF_E_SHUTDOWN + + MessageText: + + The request is invalid because Shutdown() has been called.%0 + + + + + MessageId: MF_E_MP3_NOTFOUND + + MessageText: + + The MP3 object was not found.%0 + + + + + MessageId: MF_E_MP3_OUTOFDATA + + MessageText: + + The MP3 parser ran out of data before finding the MP3 object.%0 + + + + + MessageId: MF_E_MP3_NOTMP3 + + MessageText: + + The file is not really a MP3 file.%0 + + + + + MessageId: MF_E_MP3_NOTSUPPORTED + + MessageText: + + The MP3 file is not supported.%0 + + + + + MessageId: MF_E_NO_DURATION + + MessageText: + + The Media stream has no duration.%0 + + + + + MessageId: MF_E_INVALID_FORMAT + + MessageText: + + The Media format is recognized but is invalid.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_FOUND + + MessageText: + + The property requested was not found.%0 + + + + + MessageId: MF_E_PROPERTY_READ_ONLY + + MessageText: + + The property is read only.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_ALLOWED + + MessageText: + + The specified property is not allowed in this context.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NOT_STARTED + + MessageText: + + The media source is not started.%0 + + + + + MessageId: MF_E_UNSUPPORTED_FORMAT + + MessageText: + + The Media format is recognized but not supported.%0 + + + + + MessageId: MF_E_MP3_BAD_CRC + + MessageText: + + The MPEG frame has bad CRC.%0 + + + + + MessageId: MF_E_NOT_PROTECTED + + MessageText: + + The file is not protected.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_WRONGSTATE + + MessageText: + + The media source is in the wrong state%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED + + MessageText: + + No streams are selected in source presentation descriptor.%0 + + + + + MessageId: MF_E_CANNOT_FIND_KEYFRAME_SAMPLE + + MessageText: + + No key frame sample was found.%0 + + + + + MessageId: MF_E_NETWORK_RESOURCE_FAILURE + + MessageText: + + An attempt to acquire a network resource failed.%0 + + + + + MessageId: MF_E_NET_WRITE + + MessageText: + + Error writing to the network.%0 + + + + + MessageId: MF_E_NET_READ + + MessageText: + + Error reading from the network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_NETWORK + + MessageText: + + Internal. Entry cannot complete operation without network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_ASYNC + + MessageText: + + Internal. Async op is required.%0 + + + + + MessageId: MF_E_NET_BWLEVEL_NOT_SUPPORTED + + MessageText: + + Internal. Bandwidth levels are not supported.%0 + + + + + MessageId: MF_E_NET_STREAMGROUPS_NOT_SUPPORTED + + MessageText: + + Internal. Stream groups are not supported.%0 + + + + + MessageId: MF_E_NET_MANUALSS_NOT_SUPPORTED + + MessageText: + + Manual stream selection is not supported.%0 + + + + + MessageId: MF_E_NET_INVALID_PRESENTATION_DESCRIPTOR + + MessageText: + + Invalid presentation descriptor.%0 + + + + + MessageId: MF_E_NET_CACHESTREAM_NOT_FOUND + + MessageText: + + Cannot find cache stream.%0 + + + + + MessageId: MF_I_MANUAL_PROXY + + MessageText: + + The proxy setting is manual.%0 + + + + duplicate removed + MessageId=17011 Severity=Informational Facility=MEDIAFOUNDATION SymbolicName=MF_E_INVALID_REQUEST + Language=English + The request is invalid in the current state.%0 + . + + MessageId: MF_E_NET_REQUIRE_INPUT + + MessageText: + + Internal. Entry cannot complete operation without input.%0 + + + + + MessageId: MF_E_NET_REDIRECT + + MessageText: + + The client redirected to another server.%0 + + + + + MessageId: MF_E_NET_REDIRECT_TO_PROXY + + MessageText: + + The client is redirected to a proxy server.%0 + + + + + MessageId: MF_E_NET_TOO_MANY_REDIRECTS + + MessageText: + + The client reached maximum redirection limit.%0 + + + + + MessageId: MF_E_NET_TIMEOUT + + MessageText: + + The server, a computer set up to offer multimedia content to other computers, could not handle your request for multimedia content in a timely manner. Please try again later.%0 + + + + + MessageId: MF_E_NET_CLIENT_CLOSE + + MessageText: + + The control socket is closed by the client.%0 + + + + + MessageId: MF_E_NET_BAD_CONTROL_DATA + + MessageText: + + The server received invalid data from the client on the control connection.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_SERVER + + MessageText: + + The server is not a compatible streaming media server.%0 + + + + + MessageId: MF_E_NET_UNSAFE_URL + + MessageText: + + Url.%0 + + + + + MessageId: MF_E_NET_CACHE_NO_DATA + + MessageText: + + Data is not available.%0 + + + + + MessageId: MF_E_NET_EOL + + MessageText: + + End of line.%0 + + + + + MessageId: MF_E_NET_BAD_REQUEST + + MessageText: + + The request could not be understood by the server.%0 + + + + + MessageId: MF_E_NET_INTERNAL_SERVER_ERROR + + MessageText: + + The server encountered an unexpected condition which prevented it from fulfilling the request.%0 + + + + + MessageId: MF_E_NET_SESSION_NOT_FOUND + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_NET_NOCONNECTION + + MessageText: + + There is no connection established with the Windows Media server. The operation failed.%0 + + + + + MessageId: MF_E_NET_CONNECTION_FAILURE + + MessageText: + + The network connection has failed.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_PUSHSERVER + + MessageText: + + The Server service that received the HTTP push request is not a compatible version of Windows Media Services (WMS). This error may indicate the push request was received by IIS instead of WMS. Ensure WMS is started and has the HTTP Server control protocol properly enabled and try again.%0 + + + + + MessageId: MF_E_NET_SERVER_ACCESSDENIED + + MessageText: + + The Windows Media server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_PROXY_ACCESSDENIED + + MessageText: + + The proxy server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_CANNOTCONNECT + + MessageText: + + Unable to establish a connection to the server.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_TEMPLATE + + MessageText: + + The specified push template is invalid.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_PUBLISHING_POINT + + MessageText: + + The specified push publishing point is invalid.%0 + + + + + MessageId: MF_E_NET_BUSY + + MessageText: + + The requested resource is in use.%0 + + + + + MessageId: MF_E_NET_RESOURCE_GONE + + MessageText: + + The Publishing Point or file on the Windows Media Server is no longer available.%0 + + + + + MessageId: MF_E_NET_ERROR_FROM_PROXY + + MessageText: + + The proxy experienced an error while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_PROXY_TIMEOUT + + MessageText: + + The proxy did not receive a timely response while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_SERVER_UNAVAILABLE + + MessageText: + + The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.%0 + + + + + MessageId: MF_E_NET_TOO_MUCH_DATA + + MessageText: + + The encoding process was unable to keep up with the amount of supplied data.%0 + + + + + MessageId: MF_E_NET_SESSION_INVALID + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_OFFLINE_MODE + + MessageText: + + The requested URL is not available in offline mode.%0 + + + + + MessageId: MF_E_NET_UDP_BLOCKED + + MessageText: + + A device in the network is blocking UDP traffic.%0 + + + + + MessageId: MF_E_NET_UNSUPPORTED_CONFIGURATION + + MessageText: + + The specified configuration value is not supported.%0 + + + + + MessageId: MF_E_NET_PROTOCOL_DISABLED + + MessageText: + + The networking protocol is disabled.%0 + + + + + MessageId: MF_E_ALREADY_INITIALIZED + + MessageText: + + This object has already been initialized and cannot be re-initialized at this time.%0 + + + + + MessageId: MF_E_BANDWIDTH_OVERRUN + + MessageText: + + The amount of data passed in exceeds the given bitrate and buffer window.%0 + + + + + MessageId: MF_E_LATE_SAMPLE + + MessageText: + + The sample was passed in too late to be correctly processed.%0 + + + + + MessageId: MF_E_FLUSH_NEEDED + + MessageText: + + The requested action cannot be carried out until the object is flushed and the queue is emptied.%0 + + + + + MessageId: MF_E_INVALID_PROFILE + + MessageText: + + The profile is invalid.%0 + + + + + MessageId: MF_E_INDEX_NOT_COMMITTED + + MessageText: + + The index that is being generated needs to be committed before the requested action can be carried out.%0 + + + + + MessageId: MF_E_NO_INDEX + + MessageText: + + The index that is necessary for the requested action is not found.%0 + + + + + MessageId: MF_E_CANNOT_INDEX_IN_PLACE + + MessageText: + + The requested index cannot be added in-place to the specified ASF content.%0 + + + + + MessageId: MF_E_MISSING_ASF_LEAKYBUCKET + + MessageText: + + The ASF leaky bucket parameters must be specified in order to carry out this request.%0 + + + + + MessageId: MF_E_INVALID_ASF_STREAMID + + MessageText: + + The stream id is invalid. The valid range for ASF stream id is from 1 to 127.%0 + + + + + MessageId: MF_E_STREAMSINK_REMOVED + + MessageText: + + The requested Stream Sink has been removed and cannot be used.%0 + + + + + MessageId: MF_E_STREAMSINKS_OUT_OF_SYNC + + MessageText: + + The various Stream Sinks in this Media Sink are too far out of sync for the requested action to take place.%0 + + + + + MessageId: MF_E_STREAMSINKS_FIXED + + MessageText: + + Stream Sinks cannot be added to or removed from this Media Sink because its set of streams is fixed.%0 + + + + + MessageId: MF_E_STREAMSINK_EXISTS + + MessageText: + + The given Stream Sink already exists.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_CANCELED + + MessageText: + + Sample allocations have been canceled.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_EMPTY + + MessageText: + + The sample allocator is currently empty, due to outstanding requests.%0 + + + + + MessageId: MF_E_SINK_ALREADYSTOPPED + + MessageText: + + When we try to sopt a stream sink, it is already stopped %0 + + + + + MessageId: MF_E_ASF_FILESINK_BITRATE_UNKNOWN + + MessageText: + + The ASF file sink could not reserve AVIO because the bitrate is unknown.%0 + + + + + MessageId: MF_E_SINK_NO_STREAMS + + MessageText: + + No streams are selected in sink presentation descriptor.%0 + + + + + MessageId: MF_S_SINK_NOT_FINALIZED + + MessageText: + + The sink has not been finalized before shut down. This may cause sink generate a corrupted content.%0 + + + + + MessageId: MF_E_METADATA_TOO_LONG + + MessageText: + + A metadata item was too long to write to the output container.%0 + + + + + MessageId: MF_E_SINK_NO_SAMPLES_PROCESSED + + MessageText: + + The operation failed because no samples were processed by the sink.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_PROCAMP_HW + + MessageText: + + There is no available procamp hardware with which to perform color correction.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_DEINTERLACE_HW + + MessageText: + + There is no available deinterlacing hardware with which to deinterlace the video stream.%0 + + + + + MessageId: MF_E_VIDEO_REN_COPYPROT_FAILED + + MessageText: + + A video stream requires copy protection to be enabled, but there was a failure in attempting to enable copy protection.%0 + + + + + MessageId: MF_E_VIDEO_REN_SURFACE_NOT_SHARED + + MessageText: + + A component is attempting to access a surface for sharing that is not shared.%0 + + + + + MessageId: MF_E_VIDEO_DEVICE_LOCKED + + MessageText: + + A component is attempting to access a shared device that is already locked by another component.%0 + + + + + MessageId: MF_E_NEW_VIDEO_DEVICE + + MessageText: + + The device is no longer available. The handle should be closed and a new one opened.%0 + + + + + MessageId: MF_E_NO_VIDEO_SAMPLE_AVAILABLE + + MessageText: + + A video sample is not currently queued on a stream that is required for mixing.%0 + + + + + MessageId: MF_E_NO_AUDIO_PLAYBACK_DEVICE + + MessageText: + + No audio playback device was found.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_IN_USE + + MessageText: + + The requested audio playback device is currently in use.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_INVALIDATED + + MessageText: + + The audio playback device is no longer present.%0 + + + + + MessageId: MF_E_AUDIO_SERVICE_NOT_RUNNING + + MessageText: + + The audio service is not running.%0 + + + + + MessageId: MF_E_TOPO_INVALID_OPTIONAL_NODE + + MessageText: + + The topology contains an invalid optional node. Possible reasons are incorrect number of outputs and inputs or optional node is at the beginning or end of a segment. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_FIND_DECRYPTOR + + MessageText: + + No suitable transform was found to decrypt the content. %0 + + + + + MessageId: MF_E_TOPO_CODEC_NOT_FOUND + + MessageText: + + No suitable transform was found to encode or decode the content. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_CONNECT + + MessageText: + + Unable to find a way to connect nodes%0 + + + + + MessageId: MF_E_TOPO_UNSUPPORTED + + MessageText: + + Unsupported operations in topoloader%0 + + + + + MessageId: MF_E_TOPO_INVALID_TIME_ATTRIBUTES + + MessageText: + + The topology or its nodes contain incorrectly set time attributes%0 + + + + + MessageId: MF_E_TOPO_LOOPS_IN_TOPOLOGY + + MessageText: + + The topology contains loops, which are unsupported in media foundation topologies%0 + + + + + MessageId: MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_STREAM_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a stream descriptor%0 + + + + + MessageId: MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED + + MessageText: + + A stream descriptor was set on a source stream node but it was not selected on the presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_SOURCE + + MessageText: + + A source stream node in the topology does not have a source%0 + + + + + MessageId: MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED + + MessageText: + + The topology loader does not support sink activates on output nodes.%0 + + + + + MessageId: MF_E_SEQUENCER_UNKNOWN_SEGMENT_ID + + MessageText: + + The sequencer cannot find a segment with the given ID.%0\n. + + + + + MessageId: MF_S_SEQUENCER_CONTEXT_CANCELED + + MessageText: + + The context was canceled.%0\n. + + + + + MessageId: MF_E_NO_SOURCE_IN_CACHE + + MessageText: + + Cannot find source in source cache.%0\n. + + + + + MessageId: MF_S_SEQUENCER_SEGMENT_AT_END_OF_STREAM + + MessageText: + + Cannot update topology flags.%0\n. + + + + + MessageId: MF_E_TRANSFORM_TYPE_NOT_SET + + MessageText: + + A valid type has not been set for this stream or a stream that it depends on.%0 + + + + + MessageId: MF_E_TRANSFORM_STREAM_CHANGE + + MessageText: + + A stream change has occurred. Output cannot be produced until the streams have been renegotiated.%0 + + + + + MessageId: MF_E_TRANSFORM_INPUT_REMAINING + + MessageText: + + The transform cannot take the requested action until all of the input data it currently holds is processed or flushed.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_MISSING + + MessageText: + + The transform requires a profile but no profile was supplied or found.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_INVALID_OR_CORRUPT + + MessageText: + + The transform requires a profile but the supplied profile was invalid or corrupt.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_TRUNCATED + + MessageText: + + The transform requires a profile but the supplied profile ended unexpectedly while parsing.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_PID_NOT_RECOGNIZED + + MessageText: + + The property ID does not match any property supported by the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VARIANT_TYPE_WRONG + + MessageText: + + The variant does not have the type expected for this property ID.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_NOT_WRITEABLE + + MessageText: + + An attempt was made to set the value on a read-only property.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_ARRAY_VALUE_WRONG_NUM_DIM + + MessageText: + + The array property value has an unexpected number of dimensions.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_SIZE_WRONG + + MessageText: + + The array or blob property value has an unexpected size.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_OUT_OF_RANGE + + MessageText: + + The property value is out of range for this transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_INCOMPATIBLE + + MessageText: + + The property value is incompatible with some other property or mediatype set on the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_OUTPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set output mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_INPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set input mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION + + MessageText: + + The requested operation is not supported for the currently set combination of mediatypes.%0 + + + + + MessageId: MF_E_TRANSFORM_CONFLICTS_WITH_OTHER_CURRENTLY_ENABLED_FEATURES + + MessageText: + + The requested feature is not supported in combination with some other currently enabled feature.%0 + + + + + MessageId: MF_E_TRANSFORM_NEED_MORE_INPUT + + MessageText: + + The transform cannot produce output until it gets more input samples.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_SPKR_CONFIG + + MessageText: + + The requested operation is not supported for the current speaker configuration.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING + + MessageText: + + The transform cannot accept mediatype changes in the middle of processing.%0 + + + + + MessageId: MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT + + MessageText: + + The caller should not propagate this event to downstream components.%0 + + + + + MessageId: MF_E_UNSUPPORTED_D3D_TYPE + + MessageText: + + The input type is not supported for D3D device.%0 + + + + + MessageId: MF_E_TRANSFORM_ASYNC_LOCKED + + MessageText: + + The caller does not appear to support this transform's asynchronous capabilities.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_INITIALIZE_ACM_DRIVER + + MessageText: + + An audio compression manager driver could not be initialized by the transform.%0 + + + + + MessageId: MF_E_LICENSE_INCORRECT_RIGHTS + + MessageText: + + You are not allowed to open this file. Contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_OUTOFDATE + + MessageText: + + The license for this media file has expired. Get a new license or contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_REQUIRED + + MessageText: + + You need a license to perform the requested operation on this media file.%0 + + + + + MessageId: MF_E_DRM_HARDWARE_INCONSISTENT + + MessageText: + + The licenses for your media files are corrupted. Contact Microsoft product support.%0 + + + + + MessageId: MF_E_NO_CONTENT_PROTECTION_MANAGER + + MessageText: + + The APP needs to provide IMFContentProtectionManager callback to access the protected media file.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NO_RIGHTS + + MessageText: + + Client does not have rights to restore licenses.%0 + + + + + MessageId: MF_E_BACKUP_RESTRICTED_LICENSE + + MessageText: + + Licenses are restricted and hence can not be backed up.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NEEDS_INDIVIDUALIZATION + + MessageText: + + License restore requires machine to be individualized.%0 + + + + + MessageId: MF_S_PROTECTION_NOT_REQUIRED + + MessageText: + + Protection for stream is not required.%0 + + + + + MessageId: MF_E_COMPONENT_REVOKED + + MessageText: + + Component is revoked.%0 + + + + + MessageId: MF_E_TRUST_DISABLED + + MessageText: + + Trusted functionality is currently disabled on this component.%0 + + + + + MessageId: MF_E_WMDRMOTA_NO_ACTION + + MessageText: + + No Action is set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_ALREADY_SET + + MessageText: + + Action is already set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_HEADER_NOT_AVAILABLE + + MessageText: + + DRM Heaader is not available.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_ENCRYPTION_SCHEME_NOT_SUPPORTED + + MessageText: + + Current encryption scheme is not supported.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_MISMATCH + + MessageText: + + Action does not match with current configuration.%0 + + + + + MessageId: MF_E_WMDRMOTA_INVALID_POLICY + + MessageText: + + Invalid policy for WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_POLICY_UNSUPPORTED + + MessageText: + + The policies that the Input Trust Authority requires to be enforced are unsupported by the outputs.%0 + + + + + MessageId: MF_E_OPL_NOT_SUPPORTED + + MessageText: + + The OPL that the license requires to be enforced are not supported by the Input Trust Authority.%0 + + + + + MessageId: MF_E_TOPOLOGY_VERIFICATION_FAILED + + MessageText: + + The topology could not be successfully verified.%0 + + + + + MessageId: MF_E_SIGNATURE_VERIFICATION_FAILED + + MessageText: + + Signature verification could not be completed successfully for this component.%0 + + + + + MessageId: MF_E_DEBUGGING_NOT_ALLOWED + + MessageText: + + Running this process under a debugger while using protected content is not allowed.%0 + + + + + MessageId: MF_E_CODE_EXPIRED + + MessageText: + + MF component has expired.%0 + + + + + MessageId: MF_E_GRL_VERSION_TOO_LOW + + MessageText: + + The current GRL on the machine does not meet the minimum version requirements.%0 + + + + + MessageId: MF_E_GRL_RENEWAL_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any renewal entries for the specified revocation.%0 + + + + + MessageId: MF_E_GRL_EXTENSIBLE_ENTRY_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any extensible entries for the specified extension GUID.%0 + + + + + MessageId: MF_E_KERNEL_UNTRUSTED + + MessageText: + + The kernel isn't secure for high security level content.%0 + + + + + MessageId: MF_E_PEAUTH_UNTRUSTED + + MessageText: + + The response from protected environment driver isn't valid.%0 + + + + + MessageId: MF_E_NON_PE_PROCESS + + MessageText: + + A non-PE process tried to talk to PEAuth.%0 + + + + + MessageId: MF_E_REBOOT_REQUIRED + + MessageText: + + We need to reboot the machine.%0 + + + + + MessageId: MF_S_WAIT_FOR_POLICY_SET + + MessageText: + + Protection for this stream is not guaranteed to be enforced until the MEPolicySet event is fired.%0 + + + + + MessageId: MF_S_VIDEO_DISABLED_WITH_UNKNOWN_SOFTWARE_OUTPUT + + MessageText: + + This video stream is disabled because it is being sent to an unknown software output.%0 + + + + + MessageId: MF_E_GRL_INVALID_FORMAT + + MessageText: + + The GRL file is not correctly formed, it may have been corrupted or overwritten.%0 + + + + + MessageId: MF_E_GRL_UNRECOGNIZED_FORMAT + + MessageText: + + The GRL file is in a format newer than those recognized by this GRL Reader.%0 + + + + + MessageId: MF_E_ALL_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and required all processes that can run protected media to restart.%0 + + + + + MessageId: MF_E_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and the current process needs to restart.%0 + + + + + MessageId: MF_E_USERMODE_UNTRUSTED + + MessageText: + + The user space is untrusted for protected content play.%0 + + + + + MessageId: MF_E_PEAUTH_SESSION_NOT_STARTED + + MessageText: + + PEAuth communication session hasn't been started.%0 + + + + + MessageId: MF_E_PEAUTH_PUBLICKEY_REVOKED + + MessageText: + + PEAuth's public key is revoked.%0 + + + + + MessageId: MF_E_GRL_ABSENT + + MessageText: + + The GRL is absent.%0 + + + + + MessageId: MF_S_PE_TRUSTED + + MessageText: + + The Protected Environment is trusted.%0 + + + + + MessageId: MF_E_PE_UNTRUSTED + + MessageText: + + The Protected Environment is untrusted.%0 + + + + + MessageId: MF_E_PEAUTH_NOT_STARTED + + MessageText: + + The Protected Environment Authorization service (PEAUTH) has not been started.%0 + + + + + MessageId: MF_E_INCOMPATIBLE_SAMPLE_PROTECTION + + MessageText: + + The sample protection algorithms supported by components are not compatible.%0 + + + + + MessageId: MF_E_PE_SESSIONS_MAXED + + MessageText: + + No more protected environment sessions can be supported.%0 + + + + + MessageId: MF_E_HIGH_SECURITY_LEVEL_CONTENT_NOT_ALLOWED + + MessageText: + + WMDRM ITA does not allow protected content with high security level for this release.%0 + + + + + MessageId: MF_E_TEST_SIGNED_COMPONENTS_NOT_ALLOWED + + MessageText: + + WMDRM ITA cannot allow the requested action for the content as one or more components is not properly signed.%0 + + + + + MessageId: MF_E_ITA_UNSUPPORTED_ACTION + + MessageText: + + WMDRM ITA does not support the requested action.%0 + + + + + MessageId: MF_E_ITA_ERROR_PARSING_SAP_PARAMETERS + + MessageText: + + WMDRM ITA encountered an error in parsing the Secure Audio Path parameters.%0 + + + + + MessageId: MF_E_POLICY_MGR_ACTION_OUTOFBOUNDS + + MessageText: + + The Policy Manager action passed in is invalid.%0 + + + + + MessageId: MF_E_BAD_OPL_STRUCTURE_FORMAT + + MessageText: + + The structure specifying Output Protection Level is not the correct format.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_PROTECTION_GUID + + MessageText: + + WMDRM ITA does not recognize the Explicite Analog Video Output Protection guid specified in the license.%0 + + + + + MessageId: MF_E_NO_PMP_HOST + + MessageText: + + IMFPMPHost object not available.%0 + + + + + MessageId: MF_E_ITA_OPL_DATA_NOT_INITIALIZED + + MessageText: + + WMDRM ITA could not initialize the Output Protection Level data.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Analog Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_DIGITAL_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Digital Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_CLOCK_INVALID_CONTINUITY_KEY + + MessageText: + + The continuity key supplied is not currently valid.%0 + + + + + MessageId: MF_E_CLOCK_NO_TIME_SOURCE + + MessageText: + + No Presentation Time Source has been specified.%0 + + + + + MessageId: MF_E_CLOCK_STATE_ALREADY_SET + + MessageText: + + The clock is already in the requested state.%0 + + + + + MessageId: MF_E_CLOCK_NOT_SIMPLE + + MessageText: + + The clock has too many advanced features to carry out the request.%0 + + + + + MessageId: MF_S_CLOCK_STOPPED + + MessageText: + + Timer::SetTimer returns this success code if called happened while timer is stopped. Timer is not going to be dispatched until clock is running%0 + + + + + MessageId: MF_E_NO_MORE_DROP_MODES + + MessageText: + + The component does not support any more drop modes.%0 + + + + + MessageId: MF_E_NO_MORE_QUALITY_LEVELS + + MessageText: + + The component does not support any more quality levels.%0 + + + + + MessageId: MF_E_DROPTIME_NOT_SUPPORTED + + MessageText: + + The component does not support drop time functionality.%0 + + + + + MessageId: MF_E_QUALITYKNOB_WAIT_LONGER + + MessageText: + + Quality Manager needs to wait longer before bumping the Quality Level up.%0 + + + + + MessageId: MF_E_QM_INVALIDSTATE + + MessageText: + + Quality Manager is in an invalid state. Quality Management is off at this moment.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_CONTAINERTYPE + + MessageText: + + No transcode output container type is specified.%0 + + + + + MessageId: MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS + + MessageText: + + The profile does not have a media type configuration for any selected source streams.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_MATCHING_ENCODER + + MessageText: + + Cannot find an encoder MFT that accepts the user preferred output type.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_INITIALIZED + + MessageText: + + Memory allocator is not initialized.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_COMMITED + + MessageText: + + Memory allocator is not committed yet.%0 + + + + + MessageId: MF_E_ALLOCATOR_ALREADY_COMMITED + + MessageText: + + Memory allocator has already been committed.%0 + + + + + MessageId: MF_E_STREAM_ERROR + + MessageText: + + An error occurred in media stream.%0 + + + + + MessageId: MF_E_INVALID_STREAM_STATE + + MessageText: + + Stream is not in a state to handle the request.%0 + + + + + MessageId: MF_E_HW_STREAM_NOT_CONNECTED + + MessageText: + + Hardware stream is not connected yet.%0 + + + + + Main interface for using Media Foundation with NAudio + + + + + initializes MediaFoundation - only needs to be called once per process + + + + + Enumerate the installed MediaFoundation transforms in the specified category + + A category from MediaFoundationTransformCategories + + + + + uninitializes MediaFoundation + + + + + Creates a Media type + + + + + Creates a media type from a WaveFormat + + + + + Creates a memory buffer of the specified size + + Memory buffer size in bytes + The memory buffer + + + + Creates a sample object + + The sample object + + + + Creates a new attributes store + + Initial size + The attributes store + + + + Creates a media foundation byte stream based on a stream object + (usable with WinRT streams) + + The input stream + A media foundation byte stream + + + + Creates a source reader based on a byte stream + + The byte stream + A media foundation source reader + + + + Interop definitions for MediaFoundation + thanks to Lucian Wischik for the initial work on many of these definitions (also various interfaces) + n.b. the goal is to make as much of this internal as possible, and provide + better .NET APIs using the MediaFoundationApi class instead + + + + + Initializes Microsoft Media Foundation. + + + + + Shuts down the Microsoft Media Foundation platform + + + + + Creates an empty media type. + + + + + Initializes a media type from a WAVEFORMATEX structure. + + + + + Converts a Media Foundation audio media type to a WAVEFORMATEX structure. + + TODO: try making second parameter out WaveFormatExtraData + + + + Creates the source reader from a URL. + + + + + Creates the source reader from a byte stream. + + + + + Creates the sink writer from a URL or byte stream. + + + + + Creates a Microsoft Media Foundation byte stream that wraps an IRandomAccessStream object. + + + + + Gets a list of Microsoft Media Foundation transforms (MFTs) that match specified search criteria. + + + + + Creates an empty media sample. + + + + + Allocates system memory and creates a media buffer to manage it. + + + + + Creates an empty attribute store. + + + + + Gets a list of output formats from an audio encoder. + + + + + All streams + + + + + First audio stream + + + + + First video stream + + + + + Media source + + + + + Media Foundation SDK Version + + + + + Media Foundation API Version + + + + + Media Foundation Version + + + + + An abstract base class for simplifying working with Media Foundation Transforms + You need to override the method that actually creates and configures the transform + + + + + The Source Provider + + + + + The Output WaveFormat + + + + + Constructs a new MediaFoundationTransform wrapper + Will read one second at a time + + The source provider for input data to the transform + The desired output format + + + + To be implemented by overriding classes. Create the transform object, set up its input and output types, + and configure any custom properties in here + + An object implementing IMFTrasform + + + + Disposes this MediaFoundation transform + + + + + Disposes this Media Foundation Transform + + + + + Destructor + + + + + The output WaveFormat of this Media Foundation Transform + + + + + Reads data out of the source, passing it through the transform + + Output buffer + Offset within buffer to write to + Desired byte count + Number of bytes read + + + + Attempts to read from the transform + Some useful info here: + http://msdn.microsoft.com/en-gb/library/windows/desktop/aa965264%28v=vs.85%29.aspx#process_data + + + + + + Indicate that the source has been repositioned and completely drain out the transforms buffers + + + + + Media Foundation Transform Categories + + + + + MFT_CATEGORY_VIDEO_DECODER + + + + + MFT_CATEGORY_VIDEO_ENCODER + + + + + MFT_CATEGORY_VIDEO_EFFECT + + + + + MFT_CATEGORY_MULTIPLEXER + + + + + MFT_CATEGORY_DEMULTIPLEXER + + + + + MFT_CATEGORY_AUDIO_DECODER + + + + + MFT_CATEGORY_AUDIO_ENCODER + + + + + MFT_CATEGORY_AUDIO_EFFECT + + + + + MFT_CATEGORY_VIDEO_PROCESSOR + + + + + MFT_CATEGORY_OTHER + + + + + Media Type helper class, simplifying working with IMFMediaType + (will probably change in the future, to inherit from an attributes class) + Currently does not release the COM object, so you must do that yourself + + + + + Wraps an existing IMFMediaType object + + The IMFMediaType object + + + + Creates and wraps a new IMFMediaType object + + + + + Creates and wraps a new IMFMediaType object based on a WaveFormat + + WaveFormat + + + + Tries to get a UINT32 value, returning a default value if it doesn't exist + + Attribute key + Default value + Value or default if key doesn't exist + + + + The Sample Rate (valid for audio media types) + + + + + The number of Channels (valid for audio media types) + + + + + The number of bits per sample (n.b. not always valid for compressed audio types) + + + + + The average bytes per second (valid for audio media types) + + + + + The Media Subtype. For audio, is a value from the AudioSubtypes class + + + + + The Major type, e.g. audio or video (from the MediaTypes class) + + + + + Access to the actual IMFMediaType object + Use to pass to MF APIs or Marshal.ReleaseComObject when you are finished with it + + + + + Major Media Types + http://msdn.microsoft.com/en-us/library/windows/desktop/aa367377%28v=vs.85%29.aspx + + + + + Default + + + + + Audio + + + + + Video + + + + + Protected Media + + + + + Synchronized Accessible Media Interchange (SAMI) captions. + + + + + Script stream + + + + + Still image stream. + + + + + HTML stream. + + + + + Binary stream. + + + + + A stream that contains data files. + + + + + Contains information about an input stream on a Media Foundation transform (MFT) + + + + + Maximum amount of time between an input sample and the corresponding output sample, in 100-nanosecond units. + + + + + Bitwise OR of zero or more flags from the _MFT_INPUT_STREAM_INFO_FLAGS enumeration. + + + + + The minimum size of each input buffer, in bytes. + + + + + Maximum amount of input data, in bytes, that the MFT holds to perform lookahead. + + + + + The memory alignment required for input buffers. If the MFT does not require a specific alignment, the value is zero. + + + + + Defines messages for a Media Foundation transform (MFT). + + + + + Requests the MFT to flush all stored data. + + + + + Requests the MFT to drain any stored data. + + + + + Sets or clears the Direct3D Device Manager for DirectX Video Accereration (DXVA). + + + + + Drop samples - requires Windows 7 + + + + + Command Tick - requires Windows 8 + + + + + Notifies the MFT that streaming is about to begin. + + + + + Notifies the MFT that streaming is about to end. + + + + + Notifies the MFT that an input stream has ended. + + + + + Notifies the MFT that the first sample is about to be processed. + + + + + Marks a point in the stream. This message applies only to asynchronous MFTs. Requires Windows 7 + + + + + Contains information about an output buffer for a Media Foundation transform. + + + + + Output stream identifier. + + + + + Pointer to the IMFSample interface. + + + + + Before calling ProcessOutput, set this member to zero. + + + + + Before calling ProcessOutput, set this member to NULL. + + + + + Contains information about an output stream on a Media Foundation transform (MFT). + + + + + Bitwise OR of zero or more flags from the _MFT_OUTPUT_STREAM_INFO_FLAGS enumeration. + + + + + Minimum size of each output buffer, in bytes. + + + + + The memory alignment required for output buffers. + + + + + Contains media type information for registering a Media Foundation transform (MFT). + + + + + The major media type. + + + + + The Media Subtype + + + + + Contains statistics about the performance of the sink writer. + + + + + The size of the structure, in bytes. + + + + + The time stamp of the most recent sample given to the sink writer. + + + + + The time stamp of the most recent sample to be encoded. + + + + + The time stamp of the most recent sample given to the media sink. + + + + + The time stamp of the most recent stream tick. + + + + + The system time of the most recent sample request from the media sink. + + + + + The number of samples received. + + + + + The number of samples encoded. + + + + + The number of samples given to the media sink. + + + + + The number of stream ticks received. + + + + + The amount of data, in bytes, currently waiting to be processed. + + + + + The total amount of data, in bytes, that has been sent to the media sink. + + + + + The number of pending sample requests. + + + + + The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer. + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink. + + + + + Contains flags for registering and enumeration Media Foundation transforms (MFTs). + + + + + None + + + + + The MFT performs synchronous data processing in software. + + + + + The MFT performs asynchronous data processing in software. + + + + + The MFT performs hardware-based data processing, using either the AVStream driver or a GPU-based proxy MFT. + + + + + The MFT that must be unlocked by the application before use. + + + + + For enumeration, include MFTs that were registered in the caller's process. + + + + + The MFT is optimized for transcoding rather than playback. + + + + + For enumeration, sort and filter the results. + + + + + Bitwise OR of all the flags, excluding MFT_ENUM_FLAG_SORTANDFILTER. + + + + + Indicates the status of an input stream on a Media Foundation transform (MFT). + + + + + None + + + + + The input stream can receive more data at this time. + + + + + Describes an input stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of input data must contain complete, unbroken units of data. + + + + + Each media sample that the client provides as input must contain exactly one unit of data, as defined for the MFT_INPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All input samples must be the same size. + + + + + MTF Input Stream Holds buffers + + + + + The MFT does not hold input samples after the IMFTransform::ProcessInput method returns. + + + + + This input stream can be removed by calling IMFTransform::DeleteInputStream. + + + + + This input stream is optional. + + + + + The MFT can perform in-place processing. + + + + + Defines flags for the IMFTransform::ProcessOutput method. + + + + + None + + + + + The MFT can still generate output from this stream without receiving any more input. + + + + + The format has changed on this output stream, or there is a new preferred format for this stream. + + + + + The MFT has removed this output stream. + + + + + There is no sample ready for this stream. + + + + + Indicates whether a Media Foundation transform (MFT) can produce output data. + + + + + None + + + + + There is a sample available for at least one output stream. + + + + + Describes an output stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of output data from the MFT contains complete, unbroken units of data. + + + + + Each output sample contains exactly one unit of data, as defined for the MFT_OUTPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All output samples are the same size. + + + + + The MFT can discard the output data from this output stream, if requested by the client. + + + + + This output stream is optional. + + + + + The MFT provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. + + + + + The MFT can either provide output samples for this stream or it can use samples that the client allocates. + + + + + The MFT does not require the client to process the output for this stream. + + + + + The MFT might remove this output stream during streaming. + + + + + Defines flags for processing output samples in a Media Foundation transform (MFT). + + + + + None + + + + + Do not produce output for streams in which the pSample member of the MFT_OUTPUT_DATA_BUFFER structure is NULL. + + + + + Regenerates the last output sample. + + + + + Process Output Status flags + + + + + None + + + + + The Media Foundation transform (MFT) has created one or more new output streams. + + + + + Defines flags for the setting or testing the media type on a Media Foundation transform (MFT). + + + + + None + + + + + Test the proposed media type, but do not set it. + + + + + Represents a MIDI Channel AfterTouch Event. + + + + + Creates a new ChannelAfterTouchEvent from raw MIDI data + + A binary reader + + + + Creates a new Channel After-Touch Event + + Absolute time + Channel + After-touch pressure + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The aftertouch pressure value + + + + + Represents a MIDI control change event + + + + + Reads a control change event from a MIDI stream + + Binary reader on the MIDI stream + + + + Creates a control change event + + Time + MIDI Channel Number + The MIDI Controller + Controller value + + + + Describes this control change event + + A string describing this event + + + + + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The controller number + + + + + The controller value + + + + + Represents a MIDI key signature event event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new Key signature event with the specified data + + + + + Creates a deep clone of this MIDI event. + + + + + Number of sharps or flats + + + + + Major or Minor key + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event + + + + + Gets the type of this meta event + + + + + Empty constructor + + + + + Custom constructor for use by derived types, who will manage the data themselves + + Meta event type + Meta data length + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Reads a meta-event from a stream + + A binary reader based on the stream of MIDI data + A new MetaEvent object + + + + Describes this meta event + + + + + + + + + + MIDI MetaEvent Type + + + + Track sequence number + + + Text event + + + Copyright + + + Sequence track name + + + Track instrument name + + + Lyric + + + Marker + + + Cue point + + + Program (patch) name + + + Device (port) name + + + MIDI Channel (not official?) + + + MIDI Port (not official?) + + + End track + + + Set tempo + + + SMPTE offset + + + Time signature + + + Key signature + + + Sequencer specific + + + + MIDI command codes + + + + Note Off + + + Note On + + + Key After-touch + + + Control change + + + Patch change + + + Channel after-touch + + + Pitch wheel change + + + Sysex message + + + Eox (comes at end of a sysex message) + + + Timing clock (used when synchronization is required) + + + Start sequence + + + Continue sequence + + + Stop sequence + + + Auto-Sensing + + + Meta-event + + + + MidiController enumeration + http://www.midi.org/techspecs/midimessages.php#3 + + + + Bank Select (MSB) + + + Modulation (MSB) + + + Breath Controller + + + Foot controller (MSB) + + + Main volume + + + Pan + + + Expression + + + Bank Select LSB + + + Sustain + + + Portamento On/Off + + + Sostenuto On/Off + + + Soft Pedal On/Off + + + Legato Footswitch + + + Reset all controllers + + + All notes off + + + + Represents an individual MIDI event + + + + The MIDI command code + + + + Creates a MidiEvent from a raw message received using + the MME MIDI In APIs + + The short MIDI message + A new MIDI Event + + + + Constructs a MidiEvent from a BinaryStream + + The binary stream of MIDI data + The previous MIDI event (pass null for first event) + A new MidiEvent + + + + Converts this MIDI event to a short message (32 bit integer) that + can be sent by the Windows MIDI out short message APIs + Cannot be implemented for all MIDI messages + + A short message + + + + Default constructor + + + + + Creates a MIDI event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + + + + Creates a deep clone of this MIDI event. + + + + + The MIDI Channel Number for this event (1-16) + + + + + The Delta time for this event + + + + + The absolute time for this event + + + + + The command code for this event + + + + + Whether this is a note off event + + + + + Whether this is a note on event + + + + + Determines if this is an end track event + + + + + Displays a summary of the MIDI event + + A string containing a brief description of this MIDI event + + + + Utility function that can read a variable length integer from a binary stream + + The binary stream + The integer read + + + + Writes a variable length integer to a binary stream + + Binary stream + The value to write + + + + Exports this MIDI event's data + Overriden in derived classes, but they should call this version + + Absolute time used to calculate delta. + Is updated ready for the next delta calculation + Stream to write to + + + + A helper class to manage collection of MIDI events + It has the ability to organise them in tracks + + + + + Creates a new Midi Event collection + + Initial file type + Delta Ticks Per Quarter Note + + + + The number of tracks + + + + + The absolute time that should be considered as time zero + Not directly used here, but useful for timeshifting applications + + + + + The number of ticks per quarter note + + + + + Gets events on a specified track + + Track number + The list of events + + + + Gets events on a specific track + + Track number + The list of events + + + + Adds a new track + + The new track event list + + + + Adds a new track + + Initial events to add to the new track + The new track event list + + + + Removes a track + + Track number to remove + + + + Clears all events + + + + + The MIDI file type + + + + + Adds an event to the appropriate track depending on file type + + The event to be added + The original (or desired) track number + When adding events in type 0 mode, the originalTrack parameter + is ignored. If in type 1 mode, it will use the original track number to + store the new events. If the original track was 0 and this is a channel based + event, it will create new tracks if necessary and put it on the track corresponding + to its channel number + + + + Sorts, removes empty tracks and adds end track markers + + + + + Gets an enumerator for the lists of track events + + + + + Gets an enumerator for the lists of track events + + + + + Utility class for comparing MidiEvent objects + + + + + Compares two MidiEvents + Sorts by time, with EndTrack always sorted to the end + + + + + Class able to read a MIDI file + + + + + Opens a MIDI file for reading + + Name of MIDI file + + + + MIDI File format + + + + + Opens a MIDI file for reading + + Name of MIDI file + If true will error on non-paired note events + + + + Opens a MIDI file stream for reading + + The input stream containing a MIDI file + If true will error on non-paired note events + + + + The collection of events in this MIDI file + + + + + Number of tracks in this MIDI file + + + + + Delta Ticks Per Quarter Note + + + + + Describes the MIDI file + + A string describing the MIDI file and its events + + + + Exports a MIDI file + + Filename to export to + Events to export + + + + Represents a MIDI in device + + + + + Called when a MIDI message is received + + + + + An invalid MIDI message + + + + + Gets the number of MIDI input devices available in the system + + + + + Opens a specified MIDI in device + + The device number + + + + Closes this MIDI in device + + + + + Closes this MIDI in device + + + + + Start the MIDI in device + + + + + Stop the MIDI in device + + + + + Reset the MIDI in device + + + + + Gets the MIDI in device info + + + + + Closes the MIDI out device + + True if called from Dispose + + + + Cleanup + + + + + MIDI In Device Capabilities + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name + + + + + Support - Reserved + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + MIDI In Message Information + + + + + Create a new MIDI In Message EventArgs + + + + + + + The Raw message received from the MIDI In API + + + + + The raw message interpreted as a MidiEvent + + + + + The timestamp in milliseconds for this message + + + + + MIM_OPEN + + + + + MIM_CLOSE + + + + + MIM_DATA + + + + + MIM_LONGDATA + + + + + MIM_ERROR + + + + + MIM_LONGERROR + + + + + MIM_MOREDATA + + + + + MOM_OPEN + + + + + MOM_CLOSE + + + + + MOM_DONE + + + + + Represents a MIDI message + + + + + Creates a new MIDI message + + Status + Data parameter 1 + Data parameter 2 + + + + Creates a new MIDI message from a raw message + + A packed MIDI message from an MMIO function + + + + Creates a Note On message + + Note number (0 to 127) + Volume (0 to 127) + MIDI channel (1 to 16) + A new MidiMessage object + + + + Creates a Note Off message + + Note number + Volume + MIDI channel (1-16) + A new MidiMessage object + + + + Creates a patch change message + + The patch number + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Creates a Control Change message + + The controller number to change + The value to set the controller to + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Returns the raw MIDI message data + + + + + Represents a MIDI out device + + + + + Gets the number of MIDI devices available in the system + + + + + Gets the MIDI Out device info + + + + + Opens a specified MIDI out device + + The device number + + + + Closes this MIDI out device + + + + + Closes this MIDI out device + + + + + Gets or sets the volume for this MIDI out device + + + + + Resets the MIDI out device + + + + + Sends a MIDI out message + + Message + Parameter 1 + Parameter 2 + + + + Sends a MIDI message to the MIDI out device + + The message to send + + + + Closes the MIDI out device + + True if called from Dispose + + + + Send a long message, for example sysex. + + The bytes to send. + + + + Cleanup + + + + + class representing the capabilities of a MIDI out device + MIDIOUTCAPS: http://msdn.microsoft.com/en-us/library/dd798467%28VS.85%29.aspx + + + + + MIDICAPS_VOLUME + + + + + separate left-right volume control + MIDICAPS_LRVOLUME + + + + + MIDICAPS_CACHE + + + + + MIDICAPS_STREAM + driver supports midiStreamOut directly + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + Returns the number of supported voices + + + + + Gets the polyphony of the device + + + + + Returns true if the device supports all channels + + + + + Queries whether a particular channel is supported + + Channel number to test + True if the channel is supported + + + + Returns true if the device supports patch caching + + + + + Returns true if the device supports separate left and right volume + + + + + Returns true if the device supports MIDI stream out + + + + + Returns true if the device supports volume control + + + + + Returns the type of technology used by this MIDI out device + + + + + Represents the different types of technology used by a MIDI out device + + from mmsystem.h + + + The device is a MIDI port + + + The device is a MIDI synth + + + The device is a square wave synth + + + The device is an FM synth + + + The device is a MIDI mapper + + + The device is a WaveTable synth + + + The device is a software synth + + + + Represents a note MIDI event + + + + + Reads a NoteEvent from a stream of MIDI data + + Binary Reader for the stream + + + + Creates a MIDI Note Event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + MIDI Note Number + MIDI Note Velocity + + + + + + + + + The MIDI note number + + + + + The note velocity + + + + + The note name + + + + + Describes the Note Event + + Note event as a string + + + + + + + + + Represents a MIDI note on event + + + + + Reads a new Note On event from a stream of MIDI data + + Binary reader on the MIDI data stream + + + + Creates a NoteOn event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI note number + MIDI note velocity + MIDI note duration + + + + Creates a deep clone of this MIDI event. + + + + + The associated Note off event + + + + + Get or set the Note Number, updating the off event at the same time + + + + + Get or set the channel, updating the off event at the same time + + + + + The duration of this note + + + There must be a note off event + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI patch change event + + + + + Gets the default MIDI instrument names + + + + + Reads a new patch change event from a MIDI stream + + Binary reader for the MIDI stream + + + + Creates a new patch change event + + Time of the event + Channel number + Patch number + + + + The Patch Number + + + + + Describes this patch change event + + String describing the patch change event + + + + Gets as a short message for sending with the midiOutShortMsg API + + short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI pitch wheel change event + + + + + Reads a pitch wheel change event from a MIDI stream + + The MIDI stream to read from + + + + Creates a new pitch wheel change event + + Absolute event time + Channel + Pitch wheel value + + + + Describes this pitch wheel change event + + String describing this pitch wheel change event + + + + Pitch Wheel Value 0 is minimum, 0x2000 (8192) is default, 0x3FFF (16383) is maximum + + + + + Gets a short message + + Integer to sent as short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event with raw data + + + + + Raw data contained in the meta event + + + + + Creates a meta event with raw data + + + + + Creates a deep clone of this MIDI event. + + + + + Describes this meta event + + + + + + + + + + Represents a Sequencer Specific event + + + + + Reads a new sequencer specific event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new Sequencer Specific event + + The sequencer specific data + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this sequencer specific + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + SMPTE Offset Event + + + + + Creates a new time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a deep clone of this MIDI event. + + + + + Hours + + + + + Minutes + + + + + Seconds + + + + + Frames + + + + + SubFrames + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI sysex message + + + + + Reads a sysex message from a MIDI stream + + Stream of MIDI data + a new sysex message + + + + Creates a deep clone of this MIDI event. + + + + + Describes this sysex message + + A string describing the sysex message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI tempo event + + + + + Reads a new tempo event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new tempo event with specified settings + + Microseconds per quarter note + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Describes this tempo event + + String describing the tempo event + + + + Microseconds per quarter note + + + + + Tempo + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI text event + + + + + Reads a new text event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TextEvent + + The text in this type + MetaEvent type (must be one that is + associated with text data) + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this text event + + + + + The raw contents of this text event + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TimeSignatureEvent + + Time at which to create this event + Numerator + Denominator + Ticks in Metronome Click + No of 32nd Notes in Quarter Click + + + + Creates a deep clone of this MIDI event. + + + + + Numerator (number of beats in a bar) + + + + + Denominator (Beat unit), + 1 means 2, 2 means 4 (crochet), 3 means 8 (quaver), 4 means 16 and 5 means 32 + + + + + Ticks in a metronome click + + + + + Number of 32nd notes in a quarter note + + + + + The time signature + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI track sequence number event event + + + + + Creates a new track sequence number event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a deep clone of this MIDI event. + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Boolean mixer control + + + + + Gets the details for this control + + memory pointer + + + + The current value of the control + + + + + Custom Mixer control + + + + + Get the data for this custom control + + pointer to memory to receive data + + + + List text mixer control + + + + + Get the details for this control + + Memory location to read to + + + Represents a Windows mixer device + + + The number of mixer devices available + + + Connects to the specified mixer + The index of the mixer to use. + This should be between zero and NumberOfDevices - 1 + + + The number of destinations this mixer supports + + + The name of this mixer device + + + The manufacturer code for this mixer device + + + The product identifier code for this mixer device + + + Retrieve the specified MixerDestination object + The ID of the destination to use. + Should be between 0 and DestinationCount - 1 + + + + A way to enumerate the destinations + + + + + A way to enumerate all available devices + + + + + Represents a mixer control + + + + + Mixer Handle + + + + + Number of Channels + + + + + Mixer Handle Type + + + + + Gets all the mixer controls + + Mixer Handle + Mixer Line + Mixer Handle Type + + + + + Gets a specified Mixer Control + + Mixer Handle + Line ID + Control ID + Number of Channels + Flags to use (indicates the meaning of mixerHandle) + + + + + Gets the control details + + + + + Gets the control details + + + + + + Mixer control name + + + + + Mixer control type + + + + + Returns true if this is a boolean control + + Control type + + + + Is this a boolean control + + + + + Determines whether a specified mixer control type is a list text control + + + + + True if this is a list text control + + + + + True if this is a signed control + + + + + True if this is an unsigned control + + + + + True if this is a custom control + + + + + String representation for debug purposes + + + + + Mixer control types + + + + Custom + + + Boolean meter + + + Signed meter + + + Peak meter + + + Unsigned meter + + + Boolean + + + On Off + + + Mute + + + Mono + + + Loudness + + + Stereo Enhance + + + Button + + + Decibels + + + Signed + + + Unsigned + + + Percent + + + Slider + + + Pan + + + Q-sound pan + + + Fader + + + Volume + + + Bass + + + Treble + + + Equaliser + + + Single Select + + + Mux + + + Multiple select + + + Mixer + + + Micro time + + + Milli time + + + + Mixer Interop Flags + + + + + MIXER_OBJECTF_HANDLE = 0x80000000; + + + + + MIXER_OBJECTF_MIXER = 0x00000000; + + + + + MIXER_OBJECTF_HMIXER + + + + + MIXER_OBJECTF_WAVEOUT + + + + + MIXER_OBJECTF_HWAVEOUT + + + + + MIXER_OBJECTF_WAVEIN + + + + + MIXER_OBJECTF_HWAVEIN + + + + + MIXER_OBJECTF_MIDIOUT + + + + + MIXER_OBJECTF_HMIDIOUT + + + + + MIXER_OBJECTF_MIDIIN + + + + + MIXER_OBJECTF_HMIDIIN + + + + + MIXER_OBJECTF_AUX + + + + + MIXER_GETCONTROLDETAILSF_VALUE = 0x00000000; + MIXER_SETCONTROLDETAILSF_VALUE = 0x00000000; + + + + + MIXER_GETCONTROLDETAILSF_LISTTEXT = 0x00000001; + MIXER_SETCONTROLDETAILSF_LISTTEXT = 0x00000001; + + + + + MIXER_GETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_SETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_GETLINECONTROLSF_QUERYMASK = 0x0000000F; + + + + + MIXER_GETLINECONTROLSF_ALL = 0x00000000; + + + + + MIXER_GETLINECONTROLSF_ONEBYID = 0x00000001; + + + + + MIXER_GETLINECONTROLSF_ONEBYTYPE = 0x00000002; + + + + + MIXER_GETLINEINFOF_DESTINATION = 0x00000000; + + + + + MIXER_GETLINEINFOF_SOURCE = 0x00000001; + + + + + MIXER_GETLINEINFOF_LINEID = 0x00000002; + + + + + MIXER_GETLINEINFOF_COMPONENTTYPE = 0x00000003; + + + + + MIXER_GETLINEINFOF_TARGETTYPE = 0x00000004; + + + + + MIXER_GETLINEINFOF_QUERYMASK = 0x0000000F; + + + + + Mixer Line Flags + + + + + Audio line is active. An active line indicates that a signal is probably passing + through the line. + + + + + Audio line is disconnected. A disconnected line's associated controls can still be + modified, but the changes have no effect until the line is connected. + + + + + Audio line is an audio source line associated with a single audio destination line. + If this flag is not set, this line is an audio destination line associated with zero + or more audio source lines. + + + + + BOUNDS structure + + + + + dwMinimum / lMinimum / reserved 0 + + + + + dwMaximum / lMaximum / reserved 1 + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + METRICS structure + + + + + cSteps / reserved[0] + + + + + cbCustomData / reserved[1], number of bytes for control details + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + MIXERCONTROL struct + http://msdn.microsoft.com/en-us/library/dd757293%28VS.85%29.aspx + + + + + Represents a mixer line (source or destination) + + + + + Creates a new mixer destination + + Mixer Handle + Destination Index + Mixer Handle Type + + + + Creates a new Mixer Source For a Specified Source + + Mixer Handle + Destination Index + Source Index + Flag indicating the meaning of mixerHandle + + + + Creates a new Mixer Source + + Wave In Device + + + + Mixer Line Name + + + + + Mixer Line short name + + + + + The line ID + + + + + Component Type + + + + + Mixer destination type description + + + + + Number of channels + + + + + Number of sources + + + + + Number of controls + + + + + Is this destination active + + + + + Is this destination disconnected + + + + + Is this destination a source + + + + + Gets the specified source + + + + + Enumerator for the controls on this Mixer Limne + + + + + Enumerator for the sources on this Mixer Line + + + + + The name of the target output device + + + + + Describes this Mixer Line (for diagnostic purposes) + + + + + Mixer Line Component type enumeration + + + + + Audio line is a destination that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_DST_UNDEFINED + + + + + Audio line is a digital destination (for example, digital input to a DAT or CD audio device). + MIXERLINE_COMPONENTTYPE_DST_DIGITAL + + + + + Audio line is a line level destination (for example, line level input from a CD audio device) that will be the final recording source for the analog-to-digital converter (ADC). Because most audio cards for personal computers provide some sort of gain for the recording audio source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_DST_WAVEIN type. + MIXERLINE_COMPONENTTYPE_DST_LINE + + + + + Audio line is a destination used for a monitor. + MIXERLINE_COMPONENTTYPE_DST_MONITOR + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive speakers. This is the typical component type for the audio output of audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_SPEAKERS + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive headphones. Most audio cards use the same audio destination line for speakers and headphones, in which case the mixer device simply uses the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS type. + MIXERLINE_COMPONENTTYPE_DST_HEADPHONES + + + + + Audio line is a destination that will be routed to a telephone line. + MIXERLINE_COMPONENTTYPE_DST_TELEPHONE + + + + + Audio line is a destination that will be the final recording source for the waveform-audio input (ADC). This line typically provides some sort of gain or attenuation. This is the typical component type for the recording line of most audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_WAVEIN + + + + + Audio line is a destination that will be the final recording source for voice input. This component type is exactly like MIXERLINE_COMPONENTTYPE_DST_WAVEIN but is intended specifically for settings used during voice recording/recognition. Support for this line is optional for a mixer device. Many mixer devices provide only MIXERLINE_COMPONENTTYPE_DST_WAVEIN. + MIXERLINE_COMPONENTTYPE_DST_VOICEIN + + + + + Audio line is a source that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED + + + + + Audio line is a digital source (for example, digital output from a DAT or audio CD). + MIXERLINE_COMPONENTTYPE_SRC_DIGITAL + + + + + Audio line is a line-level source (for example, line-level input from an external stereo) that can be used as an optional recording source. Because most audio cards for personal computers provide some sort of gain for the recording source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY type. + MIXERLINE_COMPONENTTYPE_SRC_LINE + + + + + Audio line is a microphone recording source. Most audio cards for personal computers provide at least two types of recording sources: an auxiliary audio line and microphone input. A microphone audio line typically provides some sort of gain. Audio cards that use a single input for use with a microphone or auxiliary audio line should use the MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE component type. + MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE + + + + + Audio line is a source originating from the output of an internal synthesizer. Most audio cards for personal computers provide some sort of MIDI synthesizer (for example, an Adlib®-compatible or OPL/3 FM synthesizer). + MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER + + + + + Audio line is a source originating from the output of an internal audio CD. This component type is provided for audio cards that provide an audio source line intended to be connected to an audio CD (or CD-ROM playing an audio CD). + MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC + + + + + Audio line is a source originating from an incoming telephone line. + MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE + + + + + Audio line is a source originating from personal computer speaker. Several audio cards for personal computers provide the ability to mix what would typically be played on the internal speaker with the output of an audio card. Some audio cards support the ability to use this output as a recording source. + MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER + + + + + Audio line is a source originating from the waveform-audio output digital-to-analog converter (DAC). Most audio cards for personal computers provide this component type as a source to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination. Some cards also allow this source to be routed to the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT + + + + + Audio line is a source originating from the auxiliary audio line. This line type is intended as a source with gain or attenuation that can be routed to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination and/or recorded from the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY + + + + + Audio line is an analog source (for example, analog output from a video-cassette tape). + MIXERLINE_COMPONENTTYPE_SRC_ANALOG + + + + + Represents a signed mixer control + + + + + Gets details for this contrl + + + + + The value of the control + + + + + Minimum value for this control + + + + + Maximum value for this control + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + + Represents an unsigned mixer control + + + + + Gets the details for this control + + + + + The control value + + + + + The control's minimum value + + + + + The control's maximum value + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + Helper methods for working with audio buffers + + + + + Ensures the buffer is big enough + + + + + + + + Ensures the buffer is big enough + + + + + + + + these will become extension methods once we move to .NET 3.5 + + + + + Checks if the buffer passed in is entirely full of nulls + + + + + Converts to a string containing the buffer described in hex + + + + + Decodes the buffer using the specified encoding, stopping at the first null + + + + + Concatenates the given arrays into a single array. + + The arrays to concatenate + The concatenated resulting array. + + + + An encoding for use with file types that have one byte per character + + + + + The one and only instance of this class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chunk Identifier helpers + + + + + Chunk identifier to Int32 (replaces mmioStringToFOURCC) + + four character chunk identifier + Chunk identifier as int 32 + + + + A very basic circular buffer implementation + + + + + Create a new circular buffer + + Max buffer size in bytes + + + + Write data to the buffer + + Data to write + Offset into data + Number of bytes to write + number of bytes written + + + + Read from the buffer + + Buffer to read into + Offset into read buffer + Bytes to read + Number of bytes actually read + + + + Maximum length of this circular buffer + + + + + Number of bytes currently stored in the circular buffer + + + + + Resets the buffer + + + + + Advances the buffer, discarding bytes + + Bytes to advance + + + + A util class for conversions + + + + + linear to dB conversion + + linear value + decibel value + + + + dB to linear conversion + + decibel value + linear value + + + + Allows us to add descriptions to interop members + + + + + The description + + + + + Field description + + + + + String representation + + + + + + Helper to get descriptions + + + + + Describes the Guid by looking for a FieldDescription attribute on the specified class + + + + + HResult + + + + + S_OK + + + + + S_FALSE + + + + + E_INVALIDARG (from winerror.h) + + + + + MAKE_HRESULT macro + + + + + Helper to deal with the fact that in Win Store apps, + the HResult property name has changed + + COM Exception + The HResult + + + + Methods for converting between IEEE 80-bit extended double precision + and standard C# double precision. + + + + + Converts a C# double precision number to an 80-bit + IEEE extended double precision number (occupying 10 bytes). + + The double precision number to convert to IEEE extended. + An array of 10 bytes containing the IEEE extended number. + + + + Converts an IEEE 80-bit extended precision number to a + C# double precision number. + + The 80-bit IEEE extended number (as an array of 10 bytes). + A C# double precision number that is a close representation of the IEEE extended number. + + + + Pass-through stream that ignores Dispose + Useful for dealing with MemoryStreams that you want to re-use + + + + + The source stream all other methods fall through to + + + + + If true the Dispose will be ignored, if false, will pass through to the SourceStream + Set to true by default + + + + + Creates a new IgnoreDisposeStream + + The source stream + + + + Can Read + + + + + Can Seek + + + + + Can write to the underlying stream + + + + + Flushes the underlying stream + + + + + Gets the length of the underlying stream + + + + + Gets or sets the position of the underlying stream + + + + + Reads from the underlying stream + + + + + Seeks on the underlying stream + + + + + Sets the length of the underlying stream + + + + + Writes to the underlying stream + + + + + Dispose - by default (IgnoreDispose = true) will do nothing, + leaving the underlying stream undisposed + + + + + Support for Marshal Methods in both UWP and .NET 3.5 + + + + + SizeOf a structure + + + + + Offset of a field in a structure + + + + + Pointer to Structure + + + + + In-place and stable implementation of MergeSort + + + + + MergeSort a list of comparable items + + + + + MergeSort a list + + + + + General purpose native methods for internal NAudio use + + + + + A thread-safe Progress Log Control + + + + + Creates a new progress log control + + + + + The contents of the log as text + + + + + Log a message + + + + + Clear the log + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + WavePosition extension methods + + + + + Get Position as timespan + + + + + Manufacturer codes from mmreg.h + + + + Microsoft Corporation + + + Creative Labs, Inc + + + Media Vision, Inc. + + + Fujitsu Corp. + + + Artisoft, Inc. + + + Turtle Beach, Inc. + + + IBM Corporation + + + Vocaltec LTD. + + + Roland + + + DSP Solutions, Inc. + + + NEC + + + ATI + + + Wang Laboratories, Inc + + + Tandy Corporation + + + Voyetra + + + Antex Electronics Corporation + + + ICL Personal Systems + + + Intel Corporation + + + Advanced Gravis + + + Video Associates Labs, Inc. + + + InterActive Inc + + + Yamaha Corporation of America + + + Everex Systems, Inc + + + Echo Speech Corporation + + + Sierra Semiconductor Corp + + + Computer Aided Technologies + + + APPS Software International + + + DSP Group, Inc + + + microEngineering Labs + + + Computer Friends, Inc. + + + ESS Technology + + + Audio, Inc. + + + Motorola, Inc. + + + Canopus, co., Ltd. + + + Seiko Epson Corporation + + + Truevision + + + Aztech Labs, Inc. + + + Videologic + + + SCALACS + + + Korg Inc. + + + Audio Processing Technology + + + Integrated Circuit Systems, Inc. + + + Iterated Systems, Inc. + + + Metheus + + + Logitech, Inc. + + + Winnov, Inc. + + + NCR Corporation + + + EXAN + + + AST Research Inc. + + + Willow Pond Corporation + + + Sonic Foundry + + + Vitec Multimedia + + + MOSCOM Corporation + + + Silicon Soft, Inc. + + + Supermac + + + Audio Processing Technology + + + Speech Compression + + + Ahead, Inc. + + + Dolby Laboratories + + + OKI + + + AuraVision Corporation + + + Ing C. Olivetti & C., S.p.A. + + + I/O Magic Corporation + + + Matsushita Electric Industrial Co., LTD. + + + Control Resources Limited + + + Xebec Multimedia Solutions Limited + + + New Media Corporation + + + Natural MicroSystems + + + Lyrrus Inc. + + + Compusic + + + OPTi Computers Inc. + + + Adlib Accessories Inc. + + + Compaq Computer Corp. + + + Dialogic Corporation + + + InSoft, Inc. + + + M.P. Technologies, Inc. + + + Weitek + + + Lernout & Hauspie + + + Quanta Computer Inc. + + + Apple Computer, Inc. + + + Digital Equipment Corporation + + + Mark of the Unicorn + + + Workbit Corporation + + + Ositech Communications Inc. + + + miro Computer Products AG + + + Cirrus Logic + + + ISOLUTION B.V. + + + Horizons Technology, Inc + + + Computer Concepts Ltd + + + Voice Technologies Group, Inc. + + + Radius + + + Rockwell International + + + Co. XYZ for testing + + + Opcode Systems + + + Voxware Inc + + + Northern Telecom Limited + + + APICOM + + + Grande Software + + + ADDX + + + Wildcat Canyon Software + + + Rhetorex Inc + + + Brooktree Corporation + + + ENSONIQ Corporation + + + FAST Multimedia AG + + + NVidia Corporation + + + OKSORI Co., Ltd. + + + DiAcoustics, Inc. + + + Gulbransen, Inc. + + + Kay Elemetrics, Inc. + + + Crystal Semiconductor Corporation + + + Splash Studios + + + Quarterdeck Corporation + + + TDK Corporation + + + Digital Audio Labs, Inc. + + + Seer Systems, Inc. + + + PictureTel Corporation + + + AT&T Microelectronics + + + Osprey Technologies, Inc. + + + Mediatrix Peripherals + + + SounDesignS M.C.S. Ltd. + + + A.L. Digital Ltd. + + + Spectrum Signal Processing, Inc. + + + Electronic Courseware Systems, Inc. + + + AMD + + + Core Dynamics + + + CANAM Computers + + + Softsound, Ltd. + + + Norris Communications, Inc. + + + Danka Data Devices + + + EuPhonics + + + Precept Software, Inc. + + + Crystal Net Corporation + + + Chromatic Research, Inc + + + Voice Information Systems, Inc + + + Vienna Systems + + + Connectix Corporation + + + Gadget Labs LLC + + + Frontier Design Group LLC + + + Viona Development GmbH + + + Casio Computer Co., LTD + + + Diamond Multimedia + + + S3 + + + Fraunhofer + + + + Summary description for MmException. + + + + + Creates a new MmException + + The result returned by the Windows API call + The name of the Windows API that failed + + + + Helper function to automatically raise an exception on failure + + The result of the API call + The API function name + + + + Returns the Windows API result + + + + + Windows multimedia error codes from mmsystem.h. + + + + no error, MMSYSERR_NOERROR + + + unspecified error, MMSYSERR_ERROR + + + device ID out of range, MMSYSERR_BADDEVICEID + + + driver failed enable, MMSYSERR_NOTENABLED + + + device already allocated, MMSYSERR_ALLOCATED + + + device handle is invalid, MMSYSERR_INVALHANDLE + + + no device driver present, MMSYSERR_NODRIVER + + + memory allocation error, MMSYSERR_NOMEM + + + function isn't supported, MMSYSERR_NOTSUPPORTED + + + error value out of range, MMSYSERR_BADERRNUM + + + invalid flag passed, MMSYSERR_INVALFLAG + + + invalid parameter passed, MMSYSERR_INVALPARAM + + + handle being used simultaneously on another thread (eg callback),MMSYSERR_HANDLEBUSY + + + specified alias not found, MMSYSERR_INVALIDALIAS + + + bad registry database, MMSYSERR_BADDB + + + registry key not found, MMSYSERR_KEYNOTFOUND + + + registry read error, MMSYSERR_READERROR + + + registry write error, MMSYSERR_WRITEERROR + + + registry delete error, MMSYSERR_DELETEERROR + + + registry value not found, MMSYSERR_VALNOTFOUND + + + driver does not call DriverCallback, MMSYSERR_NODRIVERCB + + + more data to be returned, MMSYSERR_MOREDATA + + + unsupported wave format, WAVERR_BADFORMAT + + + still something playing, WAVERR_STILLPLAYING + + + header not prepared, WAVERR_UNPREPARED + + + device is synchronous, WAVERR_SYNC + + + Conversion not possible (ACMERR_NOTPOSSIBLE) + + + Busy (ACMERR_BUSY) + + + Header Unprepared (ACMERR_UNPREPARED) + + + Cancelled (ACMERR_CANCELED) + + + invalid line (MIXERR_INVALLINE) + + + invalid control (MIXERR_INVALCONTROL) + + + invalid value (MIXERR_INVALVALUE) + + + diff --git a/TheWorstEngine/bin/Debug/TheWorstEngine.dll b/TheWorstEngine/bin/Debug/TheWorstEngine.dll index 70d4a0eb1019b00e40fde8768cd3a038551734ec..98c558d4f375982bcffc55c0942903250ef8fc98 100644 GIT binary patch literal 16384 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 delta 5838 zcmai24|G&lng8y6@7?!iCJgf@odhyTCVwUjnIsJq0<^J*kN~DV7BDoBtxy9QOSVZS znF&Rjh8e^n6{*d6f<;@cRMcW?%c*~swR`Lyv9@|xsoOoQd+Z<17PVV-t)A|-+UEHC z?i(qfd-lz|-@V^=zx(~U_xtX9GsU7Pe(1gf^`}3(`^!|iUZMI#K(rGzfuTI+S9)en z^anrKL$r<=A0~R%n5m1F6^Y6~f4Q4zxjV6<#T^g}{Es$*mB8KPeo~}G%Kf%jAX?m) zM168UH1PF)+>$K1KSi{0K9SH|qF=8f`UfaVC!_5KEd&=MVL1gf{VHG^sjGo2`UaBMF>5%S&&~c@N)^VAHXT`W&N68O^{U}^1aj73X&#_Yw zN&A(3&CAV*EZT0;4zw5x(;gENv033)Eq_N+&MK%@`2~P!Y=K!jM^15@szh+vc??)J ze<}chSjq+#3#{QUY65mklw@iS1}F!sthvTpRd4SlHDE=sr(xK@Hkw8j3_s<7&Nw>=zvwhg0Y5t+K0 zrR3CQJRFw(fSE-SVuZb&6?1$@El*4pY&pfT4dk(h{_HgX*64|IRLDg$Y`!<4B)|D@ z$#eLS=j6X=prqdZTk=?@0#873TsdL$WfPjKkRxXhHJsz5$xt&;QM<;7)iJtuuW^jUG4I0o5V*kxtM9{dri!(NbJoD?^$#!V@^Z=w#GNxVy zgVHx)0X*}iNEN}2^rHXU6T4z_An_}M4+=JMOKO?cOcha;KIXpQgt!I;m(eYVkS`gV zW|K0%9Fkrk#JsYo-Q;ClZJ(ENwOwA$)%NI|lT}{o#tvaOg;$C(uM|^Wp*KmdLtZjV zT7f+v6gkd$JQZ*-@;P5mxj5G3EKXYQOw2;epT8Cmu!}6`NtdO`@e~Qx!4F*M!Gplm zwOUWI$OMjdZyZr!9A#A+m#OQZvW}Yj`HWDhPEeCLyJeAOn(Ir>HoJY%WT73K->`@1 z0kk3R_f6)8$8O8>iam-P9unZ)+(#j-G7_B{*52IPgEj$r2_k7&HIm)N!nh=sXH)gJ zD}3zrAH_8U8BFKZ;Dd~CY!OZc!d4NS;^#?0A0miA3t~H22|pn@DKGMH$ml-o>6T^q z#xbYZ0G}wU%zv~MJ+5(;aloES^Ds@(7mO21QPN~o8jon)rm--kn{R2MPa2$_b`IDPIw^QondXlQHvfXfft@kAzXGl(+UjGAi$r0i<)(Sp(yjf$r#$KSJ_3BaJQ@$sFKcsI$zJk63%=@_ib?dvp2Q_|2;}0~R#9Tp#tit!u z?1Ql|-K@S3yh%O_{4Je;>tu3$5(9L8Vh{%_QAu^u53?RQ>x-a!BdO4K``Bt2cC z7WtkR2EA3Hx{NGV1k+mT8T2qmZBxZc)1Q!fxYTEaT;EM97W4;Rl zCxWJC5(nuwSZI$rlGq~N0QHcklZJc>2Sa&1kM5@cG60VrTx?;T^*;!c>rayhq>w09 zJvfv2nY3jEZPpX_(w#`9N_vW44(K$^nn+0cwWju0PC;oEy{W00%Dr|};?1j(CHK=a zssdDdiRxC>GEUhuVh_;DVSx09}ga2+`g;$q%FH(zT1I@)r#**K_VkaqH zqE0)@WfMK1slD`ydJG5feRw4z+Dm!3)BGn%Y;Qeg_KnU8lnCku9`5 z#iFj$A#VV+u0*Yp>p^YS)Dh>$&L-JPSxtFLTj`^k@}h5L6*#_l>>T}tdPel)*9+bw z^w=|EgZPldqlBpfJtNkN+vGC3_Y$ReLLttdn*TqJ;S7~D$fp*)idiOoLCql-=LrC(eGhY&?`C&MoC+>q=!F&W?7&gqA}<^(4^P2u@F*Ul3%Ov*5HK0oEP=v zzjozHj!7BJwTNd4de!mKl#NpasBjof;jmr^4ACNBA%v$B6I~j6HEz&2pm7j*6%FhD zgvQ+(_v%VGioT*pfb(gdn6eX82UOGrY@!X~P0>LEVwqTl{(qSrG$`(NZUY_@qckj@ z75M^%AsV6yQ4mLHuUH_zNT;Cgt8@>3ay>@>jQ%%i2K`gWX;yun-ZW3sjCjEL5goQ*^&b&_4Q@QCGr)^a*2OfgYx`*@g$m9@$1w`UJ3wz5;BZ$AM}3KJXek z1H6v@71*u$H`2@K_i6qu8n@HC;M`6Nj5hq1SYoWyX1Yqq#(K4_4{Od~2@5<>)Wkk= z={{p0eI7pU)0~GiK3qbVo;RM>{Z`sY+h`X})6;a8-Xce|i#1}a7!nc*hjjL>2HxQ7 z1va5?f@>kk36JtoR8_ys1ApS|mQDdf5|2ZvKXnjtaGT(m_(+_C79<*g4sHcL-eSOS z#0wQ;Ejj8>s9z0{2K%(>e>Th*~-z4Js(?$Iql7 zvj`qMeD8V}B#QRpl@k-Xe>ra)MRvK|lvs)KyPTK9y9M+3Vk@ts#5oLm4xknPF}2bb zu-$Zho!eiZau3wU%Wum}-ny9>2WT|EJ)0XD-sV16ztlAv=EaBe-6Pq2W{CQBk8R(P z%Z?4-31T!exg$H|{rN!A+|MM}xo;)2PmVVILAWESd2-_}cVDU}xiRa#48ur%GBeuNlN;QHcVpU^?aFT- z9;U85jJtO%T;LvC_)$06oNn#Tj!ovWBQ&ypFgG|#yS&DmPH?GfYK|#wlz^$}{G7^{JfyfqFZB<(`GN=j1ArUDSPKAsAgmjNrMvA8__FzE4n|Nf4 z3BvIDgN7}FdT`nz8H~r34cGR91<6YGJ5oHOSl#nF3bZU23}T+-d6Ctqv|x2SVB3xp zF5V5dz$f%J!%@dXcYu{Sj<*PRYr#nI9u`D}iy(vJLqL(@VSIIv=WSlMNb$U7!}L)T zSgwP*5Gh`84=zb}87i_Gcdt|qno8UgxOYk=(d;%!sHFg)OW^hO-kcofT`ox|Rg`x91V z*l{W&qjBhSBEy!0y*jM%sEK~LBlu4rTs8cQV55v}$_=`~j^9}(SGGIb@tFJQvZrFr zH(vKROX19+J8=KJ8+X#(v%Egk_l=r^|9kbS-V>{rzu0+bW5Ru6`L^JlJuK~ApXqTE nE9T4nJ#OcUpSp?bpMElU?H>%^O7G9-uPu2peEolmnRffnq<(S- diff --git a/TheWorstEngine/bin/Debug/TheWorstEngine.pdb b/TheWorstEngine/bin/Debug/TheWorstEngine.pdb index 695522139dbc8fcb93fb4cb46fcdb21e779549ba..95fe5e3443303d374470fe1b5253820aeae8f400 100644 GIT binary patch literal 42496 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 KB?q6;6YmdFCVij) delta 331 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 A!~g&Q diff --git a/TheWorstEngine/obj/Debug/TheWorstEngine.dll b/TheWorstEngine/obj/Debug/TheWorstEngine.dll index 70d4a0eb1019b00e40fde8768cd3a038551734ec..98c558d4f375982bcffc55c0942903250ef8fc98 100644 GIT binary patch literal 16384 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 delta 5838 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 diff --git a/TheWorstEngine/obj/Debug/TheWorstEngine.pdb b/TheWorstEngine/obj/Debug/TheWorstEngine.pdb index 695522139dbc8fcb93fb4cb46fcdb21e779549ba..95fe5e3443303d374470fe1b5253820aeae8f400 100644 GIT binary patch literal 42496 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 + + + \ No newline at end of file diff --git a/TheWorstEngine/twe.cs b/TheWorstEngine/twe.cs index c572d1b..3fd8338 100644 --- a/TheWorstEngine/twe.cs +++ b/TheWorstEngine/twe.cs @@ -1,23 +1,25 @@ using System; using System.Drawing; using System.Threading; +using NAudio.Wave; using System.Windows.Forms; +using System.IO; // KeyManager // using System.Runtime.InteropServices; //调用WINDOWS API函数时要用到 // using Microsoft.Win32; //写入注册表时要用到 -namespace TheWorstEngine +namespace TheWorstEngine.AnimFunction { - public class Twe + public class TweAnim { /// /// 添加窗口 /// - public Form form; + private Form form; /// /// 添加图片box /// - public PictureBox picturebox; + private PictureBox picturebox; /// /// 检测程序是否被关闭 @@ -41,7 +43,12 @@ public class Twe private string[] FilesNameGlobal = { }; // 动画FPS private int FPSGlobal = 0; - // 初始化函数 + // 初始化函数 懒得用get set + public void Load(Form fo, PictureBox picture) + { + form = fo; + picturebox = picture; + } /// /// 设置窗口分辨率 /// @@ -59,7 +66,7 @@ public string SetResolution(Size size) /// 文件集,将所有需要参与演算的图片路径存到这个数组里 /// 帧数 /// - public string NewAnim(string[] FilesName, int FPS) + public string SetAnim(string[] FilesName, int FPS) { FilesNameGlobal = FilesName; FPSGlobal = FPS; @@ -74,11 +81,11 @@ public string NewAnim(string[] FilesName, int FPS) /// 帧数 /// 绑定帧数显示label /// - public string NewAnim(string[] FilesName, int FPS, Label FPSLabel) + public string SetAnim(string[] FilesName, int FPS, Label FPSLabel) { isFPSShow = true; FPSLabelG = FPSLabel; - NewAnim(FilesName, FPS); + SetAnim(FilesName, FPS); return "动画已创建"; } /// @@ -86,7 +93,7 @@ public string NewAnim(string[] FilesName, int FPS, Label FPSLabel) /// /// 图片路径,可以为任何图片格式(包括gif) /// - public string NewImage(string FileName) + public string SetImage(string FileName) { picturebox.Image = Image.FromFile(FileName); return "已将图片设置为:" + FileName; @@ -105,7 +112,8 @@ public void CanMove(bool CanItMove) KeyManager k_hook = new KeyManager(); k_hook.KeyDownEvent += new KeyEventHandler(hook_KeyDown);//钩住键按下 k_hook.Start();//安装键盘钩子*/ - form.KeyDown += new KeyEventHandler(hook_KeyDown); + form.KeyDown += new KeyEventHandler(Hook_KeyDown); + form.KeyUp += new KeyEventHandler(Hook_KeyUp); } } /// @@ -143,10 +151,14 @@ public string KeySet(Keys UpKey, Keys DownKey, Keys LeftKey, Keys RightKey) return "已将上下左右分别设置为按键:" + UpKey + " " + DownKey + " " + LeftKey + " " + RightKey; } - + // 私有类 // 按键event - private void hook_KeyDown(object sender, KeyEventArgs e) + private bool isUpKeyDown = false; + private bool isDownKeyDown = false; + private bool isLeftKeyDown = false; + private bool isRightKeyDown = false; + private void Hook_KeyDown(object sender, KeyEventArgs e) { int x = picturebox.Location.X; int y = picturebox.Location.Y; @@ -156,32 +168,107 @@ private void hook_KeyDown(object sender, KeyEventArgs e) { }*/ - if (e.KeyCode == UpKeyGlobal) - { - picturebox.Location = new Point( + { + isUpKeyDown = true; + if (isLeftKeyDown) + { + picturebox.Location = new Point( + x - MoveSpeed, y - MoveSpeed); + } + else if (isRightKeyDown) + { + picturebox.Location = new Point( + x + MoveSpeed, y - MoveSpeed); + } + else + { + picturebox.Location = new Point( x, y - MoveSpeed); + } // Console.WriteLine("按下了" + UpKeyGlobal); } - if (e.KeyCode == DownKeyGlobal) + else if (e.KeyCode == DownKeyGlobal) { - picturebox.Location = new Point( + isDownKeyDown = true; + if (isLeftKeyDown) + { + picturebox.Location = new Point( + x - MoveSpeed, y + MoveSpeed); + } + else if (isRightKeyDown) + { + picturebox.Location = new Point( + x + MoveSpeed, y + MoveSpeed); + } + else + { + picturebox.Location = new Point( x, y + MoveSpeed); + } // Console.WriteLine("按下了" + DownKeyGlobal); } - if (e.KeyCode == LeftKeyGlobal) + else if (e.KeyCode == LeftKeyGlobal) { - picturebox.Location = new Point( + isLeftKeyDown = true; + if (isUpKeyDown) + { + picturebox.Location = new Point( + x - MoveSpeed, y - MoveSpeed); + } + else if (isDownKeyDown) + { + picturebox.Location = new Point( + x - MoveSpeed, y + MoveSpeed); + } + else + { + picturebox.Location = new Point( x - MoveSpeed, y); + } // Console.WriteLine("按下了" + LeftKeyGlobal); } - if (e.KeyCode == RightKeyGlobal) + else if (e.KeyCode == RightKeyGlobal) { - picturebox.Location = new Point( + isRightKeyDown = true; + if (isUpKeyDown) + { + picturebox.Location = new Point( + x + MoveSpeed, y - MoveSpeed); + } + else if (isDownKeyDown) + { + picturebox.Location = new Point( + x + MoveSpeed, y + MoveSpeed); + } + else + { + picturebox.Location = new Point( x + MoveSpeed, y); + } + // Console.WriteLine("按下了" + RightKeyGlobal); } } + private void Hook_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyCode == LeftKeyGlobal) + { + isLeftKeyDown = false; + } + else if (e.KeyCode == RightKeyGlobal) + { + isRightKeyDown = false; + } + else if (e.KeyCode == UpKeyGlobal) + { + isUpKeyDown = false; + } + else if (e.KeyCode == DownKeyGlobal) + { + isDownKeyDown = false; + } + } // 动画多线程方法 private void AnimFor() { @@ -221,4 +308,79 @@ private void AnimFor() } } + public class TweSound + { + private Form form; + private string SoundFileName; + private IWavePlayer _device; + private AudioFileReader _reader; + public void Load(Form fo, string FileName) + { + form = fo; + SoundFileName = FileName; + } + public void WindowSound() + { + try + { + // 加载关闭事件 + form.FormClosed += new FormClosedEventHandler(Form_Closed); + var fileName = SoundFileName; + if (!File.Exists(fileName)) + throw new FileNotFoundException("所选文件不存在"); + _device = new WaveOutEvent(); // Create device + _reader = new AudioFileReader(fileName); // Create reader + _device.Init(_reader); + _device.PlaybackStopped += Device_OnPlaybackStopped; + } + catch + { + DisposeAll(); + throw; + } + } + private void Form_Closed(object sender, EventArgs e) + { + DisposeAll(); + } + private void DisposeDevice() + { + if (_device != null) + { + _device.PlaybackStopped -= Device_OnPlaybackStopped; + _device.Dispose(); + } + } + private void Device_OnPlaybackStopped(object obj, StoppedEventArgs arg) + { + StopSound(); + } + private void DisposeAll() + { + _reader?.Dispose(); + DisposeDevice(); + } + /// + /// 停止播放音乐 + /// + public void StopSound() + { + _device?.Stop(); + if (_reader != null) _reader.Position = 0; + } + /// + /// 播放音乐 + /// + public void PlaySound() + { + _device?.Play(); + } + /// + /// 暂停音乐(可以用PlaySound继续播放) + /// + public void PauseSound() + { + _device?.Pause(); + } + } } diff --git a/packages/NAudio.1.10.0/NAudio.1.10.0.nupkg b/packages/NAudio.1.10.0/NAudio.1.10.0.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..2e57cb47ee6c387a03fc8563ce876423c40701c9 GIT binary patch literal 1229187 zcmV)ZK&!t{O9KQH0000807i&EP;3?>AQJ%q0Q3O>01E&B0AF%tY;!Lza%F6Dm66M8 z!!Qs<_l5q0&^{h1c3iu}33c2+H(iAMfFh4=(ddDsg!b<%XbK6X&@P9Wd$@;LuHW^M zoY4nmO+$IcC_y7_uguucQygX$U9ax%mODI(m~O(PTp%fALPMt*-6KGd6KWAM>(Hdl zV7(SGjeZ0t;beeYQPXF z*$Y2nY$&`woqA<6a|#Y6B`u&lj6b+fo95ZSXHI&=^H8q5x?<&YVwa z9~FkHe&6YU{;VYao`IpLbB1Dpj)y~zRpx^3rMozG+m3ZroAac| zw`KR`xP+VMtv&%zO9KQH0000807i&EP}c&`2|fY<0IUT701W^D08T-5WNB|MZgq2T zWn;Zm%We}f6x}2757r>DDs~=JAaJG%RVx-WLX?WNW8X|nXKZurp_%>>-@pQiAL1AA zOq^s&6$mWYjpv?oeDCqGe|-JMPgYe)J_CAf%_JMrK}NtxtF$R5SsfNno@Xcd!w1|6 zc`XVc5pMh>TZZ6XFy`eFD&c9RC0cJ6fl6DkH8v`+(O@`cgJWiD??BR(S6LJzgjW!R z53nsXYn)rOl{>uIvmgeXPb2@i#jYV`usxRHF*spEXiY0xtHYBnt*y< zhgjuo14}G>W8lxEgi0KQPqjvPqa_#*Qz^j(VI<@WQF`EPZ$0tLb>Rxjyfw~8=L#K` z^}Msoh<0$co}bN2J7>|;0LT)LhE?FKCz50x+K(W^A+ntHz=^KFOVlp3mab7pL>SW1 zNU7&2uptYJgwD?1bJm9^1!-M_x>$z%`xnx4bTk;nQr;j?lw2im5QJi&^ zt=Z0c9gm?QHJ0nB{cg03u-!xsjEecyu#t;@3$(Q(L0|#l97P2;7Oy8++r@S{rpG&- z{hX`m+ct`aKwJ4!i!gO=92r}Dzs-hdHOVfvm*;~v;}Lxah4ulPYQF~Bg*DBV*35u*S~CHn5rln%|;2Ho~=SmQWW<8wgqS1%m-O;883nos7C+O zgS!p3(Y==ozS#6R^&YBuc_%Wz78@ec$1E1Mmd0L{z47$iVigWyZ-35uZzE4{ zDdax^P)h>@6aWAK2mnKfKTsCk5S`)~0{{TZ2LK!Z003-hVlQrGbYpLFWnpk|GcGVM zPC<2KX>TrMY;3f>349bq_Bh^CJ<~l$5;6(&Oaf#A7;I)H0TRJLR04=7Du>r*5-}X2 zCLpancn*W^y6UQcqU){)iubkaeW2^Q-tMk9cweaNt*h(a-~H|`{NGX4(-WfW_xt_* z`H-&nURAxSdiCnntLo~S1G_KKbWPKO@V8@!rrodczfSEx|2rN2s#3qG((Z{oH|qYt z0nd#(3=00NR zm=yn)LNB0y=K$Y%8uPtJAEc3uVXXp!dtNrRL%xGdO8I0><-aiC`}**fRm)CZg?t~C z?ZUQ-omebtar5p{Os8`lsi9ApW$8NMe~Y_pg#!sIWSxoEZ+1#IV_-EOdWF+q-Gmm> zKI{|Pdq;${fQ)|vczhlEu8r2T22q%%Y0)%m{-G!>YML58BWThCPRye-U&YH2=pCr02L$k>kYL5Y$1p_s8_D zA{!QZ9u@vn6doo|&lOoitnbsuhxK(QKn1HcQAS%SX&TB?XmuLuycQQxE0&2F=7y}W z(q^J7W*Y1JTK|yXbU`hrks8JG2Vi5Zn5eKSGp*sshT5Rv9t|~%2iIb8x^o~T7z-Sl zV!?&Y6^2`YNM|k*BZ;ocNEq1u#!od!1gacVYiMHJie{>WZgg#E){SamB)XzTu=T4D zNXVIo$!jNsv|}_H>X24cTD8GUZ6qGNtTtrCL+ksxqVZs&t2P)9Mxelt4QqmFkv!4{ z1u?6FGmWB5M%=K>a2(of&jq<- z`ey9$ZNfPSs#V_-bH5K#%^wWNsrDhLLe8P^Y+B!kagTa&mVFoxHyUQ?Q`K-I!4&UD zrOP9w_yDp8C7obsudpSFivkis0gRe}{XIxzRfI$V^Q`X^gv<^wjo|Y6u&C+~JjlT>Nco1t*f`>w`08A_ z*03y~LyAFXF-S4# znZs;EZYNSt4yxgmo$KcsbtU?{*dE6Mc))7Gc;yC<38kWBf150`Vd>V5O$ieo$#^i8JQ9F90ICtFj|Uqt z93BtCb3{DE@go7C_=b3h;!}}$XzRu_&8feF`d6Y{*7v2NFcX9VFcYAQajLL3q)zK? zSRxV|7R5wzLn^sM)NR177xfz&;5mH5q6#sB=p&ilK=f2(!=g&FxhC8^B+^{r2{W46 z+aw{iDcXPSh-M}L4aAg-g;(0(^B86-m1~NT5TZsz(Ha%4D+<+Wgl^M%>Di_m%hCpp zux&V`M#I?J#$&7St|AZseq%q4J-ZFqh=e@}wZB!^tq?lPS+^Nk;YW`3BP;!g<42A| zWHKYVb39^uNh}z0T*Rj;+{u?EUNs=`35c&0_HKYT*GT>+V%>*Q-P83p=yC?lhmfI; zA^S+@gHWo_2M)FdU>593_CTABkPZG>23@5fgGLPCicBv!P0p#vJ4}I7z*&2OsVBOs z1DWZPS{Y8{z=R|P8Vh)E($(+)LJqBmKK=utM~FmO(Sn4b0NtDr38sfThrUwU|vpm>78`B}4e%@bZJ(jru z%bW#eT2y9PG0u<3pVG6nqVOKz*%*gTg4Obz(mLiJs!jQG(bJ+z+UI#yu$;9XJlt95 z!HGnEJyz~~kK!H(quIHjl)~BI!Hv6v7BxcMwfu#c>mncjAD1{RM-CSwK3dZr>4eAp z>G_{v5B?O13HuW2o=cI%WdvUCWp*|q=pG9!Y^p>ee+A~e65+-vSpFHRe4EO*>`f?! z?ZUYs1f$fs5uVQVK@Yqc!0v{g{vJ8abe`YYEu(ILs1-f-Rha)xVV{JfTrYmitE5jc z2o*oapek7W48zr*z;pYsfY5}%DZ~I}({1p@GsWLYi-A#BA}1&y!Lm&plZ8(`GAtLdhKp?I6~jFf#TKC& zczNvW{twMF{`VQ{?UTtEn8uK30D~e1yO?=?&Ps zL=gpi;!-wauf}#h?zNMX6+dJj?<4GlR?bwotip#};zus_BR@gpHmFeqe2ZSL(g&p~ z6_7PJhR8a92DWIg)b{*-FkqWR@f^%M8t?^xr-y^j0I9VhxURhs9Wot-QQ*3j3Wo!#!Rgt3yK?sCo0fR=h^zcGd*8 z4+~>^?F#I@pFz%w8qM&vR!eZ(v|#ZH3OOk?u0{)UgEgI`As}^?Y;9#ETNAc_4h$o{ z1{(!TPwk6wtXX&xDKJAD*_a6`8_FMw-6-kD`RG6K(On;XlaIdANAK~`SNZ5Uq`Tvx zQXILq0TusNs7(GgR4OT}S8?MB{U~Vx@M%|K+s`lAh1EFhsDFwVAk{tr3#yW%zqkQt znHHJqDKt2}Dl);59(x?AMDnFh_GTN(3i>q=SCWntFT~twSzryPT64P>Q$3I(>|=c? z?J8`@MVPWr*p5GDh!-0s=b&=!p{3+;$F;fe|=X!1Ej*QP&yZRGAsB%Y;Sk8 zyv0?9ud&@xgS0Zn8BA$-2eGgPaA&INNlkwY|IUx+>mJ?cvK6=9hXZ?juLcyE-^_Y(iZqXB~GN&=^u#3 zpr+6Nj#*HD(@$dpF@b9!sv*k=rnC&r5G^>Ng_wxWTyhX5$9ZeePG#32acIJXdJOgI zmMn!6T6ST2%ZLmWpwG|MPp&3tQA?P@#ceyY$FY~TgavbF8GRLvEBA5`GP&l4u)zyA zczEq!zI^78#@XRza}Ug9vjQ}Q?SsMUy#qMqgmCI2SQPMS*Py~(U!hV2i#MQ&WF%xQ zLKo9;eXKSKoj_$%O6Lw3reM~zv)Q=6*sTbg~~?*RBa2>x(a8+TZa zgg=ys(TEd5ZWeCfx5M9F@V7Vo!Gci(hg&-g{;-FZz#s0wf`V%JRw8q<`vKHF?GDlL zxjQ|V(Q_R=H`DVYdd7qJoJP+AJ+GkWgYO=E%npwfMV*^>joPZCI-G#u+JqRDQt8&)^4Dc zPn}OQm}KAafAA-d@EcFN7FGZ70KSb-jx%C~=cvjwc3sbJ#u&Z$oX=xMiam6I$9#BT zfX6)Sf9Wwx%d`4voMAT0t}apTN6IyFS0dLba8U#H2-Y)3ZbdgOX*{$ieT!gth3@6( zDNobg)rTu0v~Q;vXx~nx$c@+)7vjQj|Nn#7*-lK8c0#Z(u&x3U6c>WLtZ1fD6c8#C zg9Vbi4inMa0?yR>T6&4>E6QMVeLyVS?{kA=44pFnKAKodo8z`zR}T_y1p=eT%QNucpqq7JKeQ z?CtCPcu)E+!N`f_{au!-yX#mK!oUu{zP!Wl685jD!<{=(U`NorfluDh%EsLD&}Q6) zHUn&o9&Dtw#&0lB2>lX+sP=2<+H+3lZk{0tNuLWAD5R%On^^5W3Y^^Mklj6Gg7mFa z9`)-fz;!70D^-VU6IHcZgqq`3sM!P#_Yw!A*h>{&RI2b~_h5);620LQ1x$nQI)UAN zxF>)cV{0!$5o|`6nOLPy#J1hxYunuzR0ZvOv5i-{&mdR(Wl~I!p|2R?#qY*OsJ2i- zm^7cl>9Ju+7bj0uFX>93$p>Ron)O<|2XfRRthW(k}Bs;c=G3VxJtA_~o#aTS=;sc10-BxWnrxy||QWRXh?C zE#btXfS9nK$IY*Y*?-ctHz3n6>=&tB_A3w*%cDRljMRcjBaBpJQq0IsG!nUn$&)fg zBQ?II9b#IhXO1^gU6UZyAuS65YMGi@WTbK}dm5?JT4rPp5oZ380C3413((IAT54t& zxsiw`Vl#g&(f0@FUV^3rbRU+T*&U#DL~91=Ja@nMr1A5NboT~};2DL6}G?KsbW^{d@dpSUr<{i?U064FkEwWEdacl*IlM``!Q zM8i^sDnzPUf|ZHdklFY(g7j=N%&oP-OpT-gY^H|v(h8qP*Q7lGxB!9rI1ky5GvOhL zEvwtVVC*WyR?18r>(RH{!ZB!nCXEE(5sW#bMC|w>rurEZ-b2Fa4F4C}$62QI|4x+Q zF$3_-s)#i)DJ#-8#E6H&5i7p}ZG!C)|@FbQU4)t>CGT<7!TYDFxrh$5~mUi3(QU$_SggW?Oe& zL@m~xXHb;{S-2)Lak#6J=+Dv4e`a*V-%G(rEK@BhTVoOGq6(8cXp+hOlQg+|&V~n* zT25&HEg{r7E~jr<)qW2Vsb7Yf)GaN2jJGUr|0zXcceEVCTG5g>WtW7dyWS(iy?i+S zEx>NciTrXDT`;puhE!&O$e+x#*&=@v)Akhk)0x(m|231+!oHG8jlzDE zX_osI$lhdQbUP57dhA3c6A}0z+>GGC=uD2w+oQ#q4EX^U5 z&oh)+G?Wd(`7I8!242gV+ z0)Hj4X+dfsby=)}g^_TUfdp{PE90`gsHCQ%o&!vr2@5>X=? zGn|JYV`@BcVxPKO`P5V$>hso7Y?`RX(llWt>pht!cWLyS60odT9-B+=BqjsnIy!@5 zRb)o-z=#uI<2=WYRWMpz*2&KhwEG4a?gk=Gs<R1!6;i8aDB_#NS*tz>gE z5u^}kSQFl$`RP#QKa&vj1IEYP@iA51prYpb$WZHyAIf5iN?D^(ZiyL6PrIT)gUd@_ z$%2(9<2I?rV9Qs}cuNgfc{X=pgDhR!Si$x<(d8?dN&e!$xnd$%mNn>)Bbn~% z>5A7`(accBNX{%(Tv+L?pYpjBT%V8h@^E>={vB583CcgjaGs>CO4G7GLZ8)v;T~=N zY#R)8K=7^L+rs_~1WwlT7El9(?^ z3}4_p>)(Tg!IrSUmXqq$Xeag(y8RqFwh8-BNKb>;YcV(+Z2tX1!}E)AX%U0PYjJeu zpT{vk=Mas0a=o1w;Nj-M1lusWqpWNIi5(OmXU&qL+aA=?}EeZ%a?*ehG(zI~vXI6iuRU2x5Gl1HJ zED~)x&~|P>q@vV-+KRy%V3gLywZ_m|Gyf7o;dY$4VMv+wljt#-+pMv{tk_=v4%APR zAc$Fu#7zf6qra;%Zbqa8lDl?kqwz!bFRrDMcjq_jI9uSKPrxYn0%#QOlF>aVEyT&KnJwX=n zkk8AKaw$(Z?VsCs?1+aQaKEG0#B?ybt9v_UWQttWqWIVTL~W`J&Zwo?jaQ<-2_A7E z&g(N{&xA+vi;z{xPL`NSDlR9up>l#V+`j^^i1Rk4l{4Ch zJI`oTKrFhT3byqFnlg3jp~S?P8>mv}qlNtr3Tqp+g2q1? zEjmn%W+Q5hpmFZJhcI*6LKet*pDAzbM0vZM0@K!G=qYh)Wg%!-e1$l_Q@UJXSfv7W z2fEy-Y@%6~CetRGo2;>8NouvB%n&dXD7PBjKm~&pGK=ifZ58oQ)&!K5q*OvUcWgb( z^GpfT5*KD+Un?ns*TM1N$}UPlLg&U#Yu$l^s^r$7PE6m8KPh>e{YMQKsTFE11AjKU zc+ek*1xn)w{mpR@Hj!U-Bf8=+A?P;9IJyefx5F#M>Kkc~#;(U*YM2$@O@B+ikN!vb zZW^?_oBjv+KKizN_4e=p?VW|Z^Ra^8$6rU=Yczd|?FKkfMt*SxOjIEYn7{nru;)Lk(Mn%F22XNQ$6C4%YqJZq|QJAsdWmM$RNWN$% zawC#&uJXUf3~K9S8-k6G>bU)YeLG+N1!OqRM;q)f&7GB<&7l|)#PvsXNQi=bC6w!Y zhV^D4XHy)0b2?w&jFsnFCW4p^dpI63Q7>FgJBclNw90$g>WaekxVov3ElxoESdl1R zACTWb2t512eP)qBw}HVKqja5Z4b0sUK3fAO|7N+qyG4dS$55TMCqDM)8l4Lqg549e zYXfvZ>IodzaV$U|yG@gRB+fQfqct7IdjNRdt`?EEOXhbd!X1)ury|@bH+#vqJ3_5m zgAGf%Lb!8YyeGiN*5zuJ(4%l$voj!_i(pqGC-nTDs8}Bd?de!et2HEOXZ!;Yq5EZ( z+8HlxnRg6c(W!jS=O#u`BAv)k8ep(0C7bz?i+aY|JjeF}n=M>}DFX z_xi@{=JGMyg6y9h;v2Jb#b@04nK1jp$1M2y%m z#5azSZcjk+sA@%CFOvtUq9JrVaHy*J`%& zB41dLgrtmOr678UkzqyPi^h7R|>Rr-{TYcaL zJ_59QIy@keq#tSUBYYkK*#8pQKUMZB(K#|udad{js#pP^Fx0{@5Q&oRhhY=q*Em%{ z&QKMyk3!|@=eK5}@H7^Rug)kpzB+4Q;!ZEdN`o5A!qc+h&kUBbG|C|*rJ%l_A;|v6 z1-Y}S>Xu3gMLW@d=3=8pYD{j{cvfw4ud%D}lev-XPSSA2_(|}GpMS!L(`Lipf$#_Z z8hx7B3xCVtZ#n#dYoeV5e?|Di*BR%)A0C;%82&DYzpLTzM)(7JqumXEu(H!&Ew6#c zq(SvGd@q7qUf=|3;09KhjgL#b<(^ZSQ&q`9-?g0ancr~D%R!cOpV(N+^=a$xDzQ%y1P?Y=XOw7 z?@p(1xI2r&5$=8zj&$cy*x(*aVJhP07>K$H8Hl+{5jg!>IUC#f!XI?Y=B##|Ii$QL^uvg)vvqH{u&jsZ9uLEWKbbAY~aboV# z!_?A-*OJTxzX|n4JmZxC5u+?`F{BrtlO6K@3zFn1{fmU|Kd3HLk(lJ3tK zsB_<7px!m>2^j9SF)+ei%)m(ZdEmH z2AbR}7#Qo`%fPPg3k=xqXAF#U|IPqd+z|w1+#w8P-6jT_-B}E@xP1(ach6^Fg1d=< ziSFYJw7Q=#(B_6l60n;)hJi`$6b2@{^BCCOJ(_`b_Y4N6xEC=n)xDm94)=Bj_HdtJ zU{Ci02KI7yFfh%nYapQ0ZDU}%yFUXn+=UFxbdP6XZ}&U~X1NzLu#bB?1GC+S8Q9m| z!oYs+`wYx+zhq#4cLxIpxV0$)4s@FtnCs4DV4iz01M}Ub3@mWZVBjG4Mg|UcpJCt- z_cI0#bz_YL9OjN=;Ct?V40O2;13CA62D;sw8R&7JW8iT2GX@sAp-}`J;qJ;nuREQA zMeafd7P}`fu*AKTfu-(d299*!VqlrOgMp*mk)sJX+MU9{G47!Z^tp=}=y#80V7Yr5 z11sEf7&z9wl!2A*%?vp1W(JOPpJd>8_ZoZw~{IMJQSz)5b7 zfs@^n7&yhfoPkr_dl@LWzh+>y`wjy|_n!=`apSuXaGE;?fzw~`d_lY`Bt7svnl4{4 zd-k+#7iCXPkCxx1^di6<2@BR21N7yV&WBQzx&0wctnS^rlx*mW%H3eF5nrn0d@e%+ z({aXW4eRv5Z>zM=Z|&mqXerUT$^ySgUUx6~&cF?77D%Ts0R<#b7jx@Bs?I4lH@ zl>6t{zQz9bMGbDDyiCNM*`zKO;k>@q&i>}sHaUNw?e|2^`I@#nsr85X4%2Ow?~Le( zC%3iuQh?t4zZ{@5y{`oLOz*1{hKjE#e{7+*-$Q2whqqYn_n<1lfv-xGqd{yX{IU;z z#RtFYgQ*~ODrPS}6;pUgF4$g{;VUwHRfewx7~?bO*mtv(EJ~7nDNs5$_p%Ru#RtFYgJ1KxJG3u?i^44G z!!_vA<^PB_B>}ze9qszNhG(=u5ll1U{0Vosn?Ep2=g%m-*MXanUQctW5I({As#L5xaNI|Z z9dHO0EE5A@uo&nnz7e1!{HXV3N#kO*4C8rtEy1XS@`?d_NJgr}&Pu1!U&FfJ#K^N(Td@Oo*9@ z+$`Mn!Ob^(0aT;W;V}|;W~}=KWQ}GT+&@rgxqqgx%KbZqhWl>}U42(9;4M{v6zO)i zc31yLGs>9RzYOq4GgRf09osg*R( z24{mDn_XKtu@du46tnBsmIB6?UWuol^40I%!G^`V1BV6bazN{om$bQeVqN|M5vRWg zDcyg1==+GyvK9I}M9=ro4-kFBLq9}x%s7R9gy^vz`Z1!LJ@gYq18IeRis=3x`Wd1Z zd+6tgzU!f1AUZCi(BC7P_s}m9eaJ(x(v}t;}v=oqNjQ2 z(TM)mLytkUc7j6t5MAh@{fOS^q015dqld0Qv}2+|k45xM4_%4q3m)nqTGy)3;}Biy zp~oY7tB1OX{@p|Kh)!=)=qg0d^UxCzeZ@mhL^QRVLQg`p&qGf}^llG51<`+d=&6X# zo}|zMq8mJPHKK2MXc5t-$qHSAsNy~0D!Mf4L7JrB`|Qx&=v(SnDrL-a`x zU61IH4uzhNXwE|~K=fJ<-GJzq9(tjWJ|lleJRax7hjcC2+@6fue?_;;bp8f`13pT0 zMB5OF{TDo%MIvf|FOoWLk!Al@Xh!06%t>EC_VHJc|HhBD<`Tnf%zhfuSeypO4}QHm zf!-t8&j|TWZn(TR59u}xFay>CbiG%`epcXpV`B~bALxZ`ulLR@g2mK^4AY|c9u?bx z)6PU(mjdILC1X`yE0_0@@ZJG(`Zl5q`xP%e-+i_l@;L##nLu_3hmd;4!p^7nl*!)!walmhLGXC+^~t6gW5GH7GX*HNM2K_-mbf3`|2*3El)? z7pM4*URpQJRJ;q%0M(*5lFowyvmpUi$6EDHM7^AtD88W6@|$9_6&$jd(2}4B_{?EXTnDyet25_ufi%~%^~ z9f9jNd>OSnl$%(01b#$dKZ%VM1?>9uefARquQLlf>#!-JfE=B(Q3%%gnA|M>%`3x7 z7&W@{kl?FH8r@?nA8D%&bMvJXtaLn>HRD11zcoB*Pb><^p(f;j;W6T&8lxs$V>)$M zNv=fP#QQxA(#5#JGz*CTL=Bg1j+-Qcc*v>ejNEb(i~SCe?DtXJBoI|2=loLd#6vPP z({mb6|H&mVP=REmxF*IbU^0lERXx=&8yyvK~UDVOC3DlQ! zr4EI-?R1S~ltm^AC@IiBbq6G(Ad=s*5y0d|junZJW>X3mKPe^shT%&3&st7)^`~m> zf94*_%D)IH-IqLc3!L>>a9E#_{RrY!vS`faos$McQQs%x|~7`Z^JScB8N z{TT{>4)Z1otV{(hM%SFRQ~X(F@ju!r{zql;XL|8~pg&@N?oWIMB|cQf|6r&1AC%%7 zn56tyPfs59I_NFzuSlmt-$wLc4}AyGD?D@?qMvx^yNFJl?kzzOEqLhrh(76|ze9A$ z3~vcSO68#+>b~<$D!f6Y8jAY{VJM`A6!*i>{ue1uR0s8M6ktsg_P;gnwzkY-~+{c8kLxtVG+M+*oXP3}z5&XtIYZne0iHHOHwXmdIEb_P+(~ zv|z;)O^NWP9$s&*2`45{Y&H$ zb=+e~);c=G5o>>h99(2TeLs2rV0jg=oKr%FlyTZT1GkhUkKfGbUb|B5T*Wd=2jREe zOMLpYuI|1P`_Yq@RZk zs@I48N4-95P`%zM-!|`V;AzDLSRr-6@U-GVWB^F(eKUrzo1`G-qafad_F=x=WA0ls zyxV~E;(W?H5(P^Mcf&in5wII%_5~_CQYXdS)J$LY1-|SEPsZ#E{MoT~_^p;@r;zeI zQ}mW`kQb7~XJ@_z=KwS5jQ3Q~ z0pB26!Ek9fu%h=YcP4rX>z&q;-WsXxJ@jYf+nBjI6CP*JbatchPm(9O8a%2 zd2dl?L_)`Pc6ZeV4bNJ1_KZn3?|sNWM@2g0!EUCWepF|VJqb8>*M`1B%E^?{kaeXo zOpkbIdE8j;?C!NA?6mXjKr`HxFm)YTn!1Vy2gxtTwiFNHStG4xkwbm626h^k+<1Z5te#pa)>x7j>%z#2q#EW)Zk|m{yk~J zF&uDBE!9iiK_xGz{k98Y-M*Qg$!|+f_0Q!lwuc)c8Z*!b3s~0=*65jog=whO{?87IY|ZRT03*lwM|wxO~s?5U_y_^LXM=x$*NASH{yYv%61?!2-5FkqAdy0s zQw8#YmD7O{JKNdCgWBiC|It2|@_qDe`PNG}trxowtyWaD)UCLU-7<;8QWyu3R`Rfd6wHSNjCuCY5XlX4Dn%fkab zg7aqL=Zu~kAbTzHznJ7Z2AkwNe3Lxwhu|%MGojs7+tQ?;<9c^Tb!$R}9DjSFnAOy{ zOQ%7N?%`|smvb!MuN0K~!{xpK3@(If_t(oxRJ#p*+}eJWy2oM6D&V#-Ux8+!Z{yg|IXxV+5B_bJ=oS4QqvmYo2u`_Z!QM-Ma} z8utM>GI(|+&P7gXps&OcwEF2=NG?niumatDg9*oTak?`T{iGVfYj;k@dAj@gYsylR zy|MEu+rbsotlFSe8)8nTRaOZ7;y~1xauFp9XLd2;VS5&2#ZSQF!STU(q!#|-p@|5E z;^AahZ8#n_T3?F?X<_nfP>&s_&F-l+z_BSKm_Dl)k;)V|x;@bBChdvvf~PW4sygmE zET6W|jvYIcSETy>XgRH}P{Lm!3CAje1nh%A8ID2Ec8h&58kVU{k}tDiLXbFph|Fmu zN$-+bX84mdEZv&EO!%3UXKGloMdgF)tW?!mDeLDbf)kYMp3?oa^C44eT$|-?nu%}f zy8(69z{B1Ln=a!gwZ+|MDE@HWJCXhmB4GU5Rd^#0RmJyyUu|UJyQQo~H@3#}y*h4D z>vZFRvj7kUQ*#QlX4B&BOJHw)r~H%r`4^Vw=g-_!J)RKs`*HHl2n!hL&OMO99l5u>U13TAlDNC> ztu7}FI}hr3i};iSfgZ6tE96^>Im;h7bkaNko>-r$r;E%w??}cv@T(q4?C8WVbSy!H z&NE*b-|;m^Ry}e10Ug&fjBGl-1i1an01@;B*Zq3Z7yuq!c<^~0Kju_--FeRWEeFWh zmX`KMW!eo3-tIVylRUl8#NVmXe|`RMzUaVjiP|rLgb{atY~21Jg{ee5gNTQE#5a++ zl8C(?@l_<|h}h>5Uq<5IM9h0cygQ%lG8VT>!X1imha}vo z2zN@tU5ap*B;2hCcT2)Oig1r4+^Y!pO2U1LaGxY>R)o!xaK9qluY9x+-PDKw+&r`; z74yzYE!X8)spEBd!SD$L)Ct=mpkCOg5HQ^RY9IPsMA&^q7%A*y2!PR^Cm;p0#<2{+ zL|;INPgvnsm8wz?%3A(X5q`-8dktGrn8gkU)b zpr6z_#Iz*r92lV8Yv;6*)hs?hlj%b^^AF|FC?GA7+fw`m#myy)IuEC8qeuzBuvVok zzMmO?mu3$CX5T(4?R+f9Gz*yDByPDx*ShoY_LT4AWWzMmIUNv-1NobS^3q;p<1C=% zMe8k$mJywUcvfZF!R*r5he+4v5hcJ!q(mQ8ghwUeF-3Sx5*}BC$0gwjMR>wn?}fZ` z32x17?YQBds+_A-Wv!aYNMF_?cD+1XXJ4R{=0YT&jER&A$Xnm}3k*V&6QM zzZ@;VdA`YR9m9uW`_C`YIpGFh!i#8DJdFC~dvaE+N|Er8=yXZp<$S*WG2YzHZxtKy zL_#k;w+D(_X>rhqw;S}*6KF3n4Sm{Pc?V$eWtr|@cyCH{Y4KIUQ>XP7Us2GO;%myE znB%Q4Fkg0*J9jp24P&OYtLeHvOzLwE| zR}$V+1Ol#fmtZyQtCeFS>`f)`3N)6R%R3RrCs;(>)p3#k zIj}DN4x5qx1A-qAco~8p5_lAX9}##Cf*+UCeo{*NX({bz1U`%4=RtL^0lQ>T!##Dj za>|y$^4t9(pzO%X`H<$$itv<)5E~}ftTNJg@brHlKLbC!jx?^Ud4A%gy&{coynJc> zq~Vdqcj|7|Iu1eqgGe2Bp@a4p^y?a5YN#9D@sXFS14mx_8x(cL>t7y*xm#we-mT-` z0Y&P-qcQFGQIaFc{UT;Fj}K;`N<9HZt?)c(_~CouP_rxyOQgZw)paY4IMlGwlh z@n*-*i1DV$8@_It2dV#g`#(AkMJ_=|5_TV(tsJO+B>o|Q#AiJsrF@f!uX;qRPy3TZ ze9t4|?Nse|5b<-5h(7?4_lP5qcsvoq`zj)yENVZTh&3J&zkhF^ zO~er%@%Py1Rw9n|h#wFTCxs8Z(JtAK4LD%Mn z-7b%aeMi^khTSC|5x@6u-$cX}9uW<6`?>HiMF9tpGYXHIx36akjw5F@QZlCjiet$c zL+EjU;&^g)A#^dIIHsH?LJtD;lTzN9fPPxai(B%amGU+Lien6aoD)#XJrQchL&!I# zr2840y6IoAn5O(P+cP-NEu*=O#xfUmDG{g`T$wq)C!EGTSM5uro=sFT3|#*oA@xY2 zk`duHU+N|EGb4k;G9qTT5S8lmw9Y@>MpTOJeq zux6MUzHGq#U+SBhj|}%WzHDA`wfLz|G9C=$k3mz;c*vJE9)!H_%TK%}i~QXvXXjq5 zTIo{P-(y?dkAZ#h3j{6uSJ+ys-+n~4A&B2M;2lPBQNYxEMPSt6Ut9iqU$s1-uSN_D zKb50juHFiZeKf1gm-F)7fmDJdc=yv_MWm(TJ zt0(c`ymIG?+DdG^CiF|TEp=|ge&7Wd@ipcm7GoW9o{uwF z9du_g3{J1mvF^E8C}DKHAIA@@fi9UX@%*=-hKuk8-`rL%Ko++!JJ$XByA)KOt*0+) ztedH6!%;mGX4qei>yS=bX0(2UzZhP?UQXYl!-{dq98ig+0UF!t2fHtv`?m&UVs(;psMf(S*NdqzGGLsM!+@w!8oR$!a|hW7c)p7z}1ubQ2g5Gr~T0f z|H%jc*$4l{2mh5}`i|*u3@^j&#lJI5{^5W5;D3hYxh6G*8_sgu{`V{m1Z(0vj>r*i#R0fxLI#|OS4xxBiPGccX0?mjl$VNtp|gtp?-1?)RzRu0JMbE~ z>j2-UWrgaHT%6IzvQ;H4DGKotRwoKWJj~kysZmN)Bekkl5o*h{3db^DYIGRt)Mvi+ zaS;nt@DOU7tXuTYQuVM4|~ z;VAl@N)>Z|ufPgXKt3?3>-3w`_8Q<<*xWAtln#pWEx*?dTh0O<{h$|G<*SQ82^$+hT5Tu6IKZjUoJ=7Vji; z51K1w5ByNV*lCA*iJ2AyIe#DZ06Ry)Bw_-`>SijLqe*UTda522RI&Ullg`!)y09!n z=S7ei%)0leGTXwSir8&wX_lqd{Hj#j25uLImJAazL?NpEs$ZAySLOGOLf4HXwZNyd zAK;emjET}kP~dWVw<`IgM@Q+JBm8}3o!+G8e~c>7Fo2IJAjKJr%q+Kc9vW1na2M~y zS0*3F%<)rkW%XPAP8O4_#?tK9pj^xOJc8E=62-FLiXh`s&O~Az_!k20JSMmf z5vRGt;tfdOEUYx6!I1r4q%00hd4j6r`);n(rfdy|P8D(-%97#CuX+{1L{yh9O7$K_QSybX#cb(C9Y#TLSnm6464P^xc6Sgar0>oqhn@{sCxXlf5hbpghXC z3d~G5`3^q}(5>bx=Xsv0BH^tlOcK(09Zt#I6HyD?)8{GgkuFV1(i`w5i(a>GY)Uk4 z$1qyQFUC2xLb&(MQx3(X;p_0Cg(fQ@b0#*zY-++B8itt@caQBe(N@rx_t)U>&Ki}O zOx<9a@QuaJiR)!j+L06-)0Bv;@3XZaz2x9ZL17WjA@?(zHN3J@i}SCN;L<3Oi)E6A z$)^|=Zr#X0Pqk)3jA@PkQ2Jyholo!K`#PPo(41r{P3P7`9W*kTP_;E|f%R8a*3{kJb)!pnUgI9f;pjK~C_v{q&%wzh zGb-Yo%QH(&&^`|!2-c!o8NdOyE`UEFLG^oWTQrh2BJ$2?TMy!oe67c3gxRS-0jFu_ z`~clOZPkSA3lKEIal?umG9IWK(4fD+t*R!p-J0*+R34TGD8k_HjljBBYRyx*?m|0K z8*?__QI35P1wCC@`kete2ku&$n~hYImmE;5x@oxoV_F+h`*q@*MKiG>wRb1}R)m?{ zkZNl?)f~Pd)!CcsY)i}A{VOBZhDQA5h3-gV1KkGH-4#jlugr9Jjg8c87;BD@DWK^i zRT_XBR4RZ|kquqY!8|QsA=SO9>bB9UZeueESTJIxsoCyt=K1afpa$6?`t?vRi2yrb zlR-mLu8(iE7$?o;IQAD4b}Xp&C4Q;VFS^F_6+!wYme@MG0wRA~M{vL40TKwuw+&4L zA+cejnE=^rG?QlChK<6kOHhi$c>E-;$r&5Ol>kn{$jLP9N(iz~8Dx;_a}|1as=){q z;tZoyWVGw;3(1jWBus3>JmET?$?JHHV5Xua6)&_8HUI$y@qH_%7# z(K{D>cH)b89cZa!Z{1QSK{JIF#Lrj2IAg?!-o#R;j_AoC+iZsFT81!?Y|)dMApUGb z6f@vutO2J9a|qA^`facJrOqf~(Fo7f5aLb6)V0v>O~mvyY4l=c3j4>(J11-nD2;M~%NYn=P zH5qD=eK9)LBZB_E3a9Lh@Z-Ue5o?y3~;TPjDiB@l3p^_@@A#j=Gbq%U?p| z<2^EVK;1g@rJG({3aR)E06;@Y}}S%l$>&{_imOUVD*$D+(Cq|Av%3 z0oqoL_c>3)IQoKndwp7d(^#Vo9jjH#yU6$AwuR`jUG%N>=4yA}`QRHI0+0NqyyG>L zK2Jxs&OgJd@7XR8l?gQgXFJ43O-5Trxxbi?hhjI--W-yAdvmw3!$~~<1-YzXh`)`c zwLg*n9i|J^3fPF|M%5aM!_$70MvM3^+E#uQ%cwc%|3qDVpB@hL_vxa_RAw*smo|mf9gLPeI&M?v5cE!y4*01E5s7YYM7NOm4WxHKmfG%lF zNaIi|XwcTRgi^c2GGkK1VwnaZ4TLWa$Y!cCmI13RNb2T>R9D;X5{9~_`r5`x3~HQO z**08aQ18^yZIy;uJOGD$eOD|q%VV)$8H<%=ERHH;;gqu|)x#c-PoOm=db2S|Gf$>z zN-{oQ;q|@Q3c%+go;tEC*3g@^3_q9R{xT_~Ixs{xc!^;|gkUZQ^Ej9vQm-@9=ZXRn zhqZ}eX;DDwO0`5P@lD^SlEmEX0?=O8v7Hj@_5@4~4CfEZaQ6F%eze1E-t8GH6;El_L1q~HXH zdB&k5NIy)lXHZl3TzLEV_Eef(#|b@uB6diD1{OY@%L8=6nc$7+QBr=+k!%|YIaXng z)s%yt_8#bSUg7QI8}!}DV)FGcSMvyUMSYe3BK^Z~oMakQ9J5jJ0nPp%jidB;=6B?O z;J1wVy~=IFbs4qsN^I{?DS_282192P$E*(dw(_8-E|xuZkqj@D;UzNsX^3|@e~gOJ zt8Wjaf8pM>Kz;ChIZ)kydFVz&_c=(RS76@5)K5zkuf$3Pi<>0pD`mK8K#i`KCEkcL z5IPe`yjBvg^QwWrW+6G;EW?{HoGR?A0#x3!A+aLnvNP8sRJ#!cRh-kAAX~Vgd?FnVZ5VNKaO0IiCqwNe>QR>&^E5aJT$HVjA%V;m5 z8%W@I=5QKTsqu_gP^O;hC0S689*XEsgmX(s9>)jYTckz)R*t?MgP?Qgz*I?2HHlMA z;Zz-A+Nx;mOlexeK3kf`=cUfQAj20!a$hB=y&(76gl+}xOUWxPeu%oCYAk+E1M}k$ zes9zm&uH3&8iP2uj9|QFXeMhkjy?>agweS7&oL%bFX)6<@l(i`NeVgw#z+j1phQG{ z@v{(ZXCXE+*qv+W76l{)yL*yd#}uEZSo;RD^q8ib+tE|}1Y<@PU!Yo6t-GG=yrb-V zksGJ>jE>^(KdvK>o*3|3A{GY0EDv-sh8X6B6?&Mc-U;k4%HLsJaFG9cyc?8fMei^^ z0zUHiUXmN*9ppbrT7X{UuEiR(h7U+(6OJ(${k%U$4pSk zF(KvHxRV@}#;2-Dr-~nt`s33|T){wsma|t#+1cg##Yw(JkM*`u%M?!)~Eyq{`ewnjo-ijsr5^-pXHh5#=SS@_hR%Eq=q6+cZa(HV z>UGJ^5QdMF!R2}L0^WUm49RvJeIn^xi`#K#auRe<%P=$9GA7ezrY5#DnT^|b;BOaa zc9ASH8DXa}PiC~hi)#R=6Lyw>YQwoDh`$*LYn^7|tKKhI5cW}dbg$Yq{0hvnTL1%3 zF@G2JmhN0hp>vPYf$vK>2UFGKV{YMK^?p~#HSSNh#2>H%I&>I<{8}^lI>;>_iCVqz<7ljXLu1MhT52F;@ zTHSjO#+MzQDdaAvt(_iu#kglQ`SgWYjZC&%cj6n)eKmET>r$x``U!XN4}O1-OEc)% zHk098T6!|4!6>`FlXktm{~1m9*a5iV$QV~ z4ef^|+o#Sz>!})+YL{~p%{4YE+c9$Dv9I?dIDx2CH9d;y9LiEN2Ex-oZm(jY1Q-9*6 zPO3DYc`5T`JLzU!Dvk9K_iE;s&HLC2B|oe>Nm;DMJoe3~(K;Wy`bz3s2+#iTeE;`@ z{pa?t3d*~^kz;A9N1oCRsN<@v9i{H}{(Qj14|P4?pvgIPB;PfNsO%cIoT%HIg7on* z*@sh^nKf~!&O9us4Y%M+)%1nlJjAJL2c)9LwF>(Y+(3FbNblHm+lisanBOmkFYTQD zWBlF72^hAxKR86Kyz3j$kuUuY+;ST4KQ+p}VXxueZ$xU?w8szj4g0`+AAQGsD=6P3 z<>l3KzDqdYgzu8?qi@Rx!kLD`c{)g5v~G8L80yuTWpkjge}*>nVgvW!Xi?u1VF0(4 z3P^8`xxe=$C@gy`jWhH(Qq>94UHcvKR*tlvr#)o*MGVAt<7Ei*$K$W!T||0N{INkV zHxP4XV1?@KMQYB#b{;E#EAC4AUA~Fszst86Qo3^w^?vORm(GUV^dJBTmnp(!l5n{q zTyDrSANT`d^t)vCb68FL?V!9=vzrZiRMFT^sW!^+Tol~-7XVuKXQ*TGLe$I{ED#C^ znWAt3nw0!iCJZq7!{8VJj?+8p&QkoLvX%6G;3H66+u>q+ZD9kX$sSY{ES!mk4y{G$W z;RRYP?%A$q#cgU9V`2H}TyNrb>`m~@&&5{W9*}1?(bsU$e>tIo_alc^qW@AHh5;*M zu@>P1KC|soS(1!{8-oe+58^`a4&=%4#&+XG;FrG>NJE{wFyeDzze@uiwL`4Ffb7T? zuWzKf?2WyDoa%jHzZ8_`EIO4wD>=s8vkvvt)qaf_y+MqSwcUq|Zt)l;q|DOF7e0>0 z8j2d7V2i(Ry%FToY=lYDo-h2N_j~QfV;)uhk)?j%68o{l$5e?h4^4o&Uto#d|7Z{#TGY!hj4=D3)EORJRESMLxtMX^yfgtb_Nc+g{P(&j~;BH64*%tJ@ zFDRc6t{HS5x#mC4Bc*&FeaCz}A6z@=JaX-SoJX!T2Af9)&ljZg#_Pd7U)%*DJ#Hl5m3}+_1Cl z|BSlv?}OO>zYnneC7f*k7oP3E+Oz#vv+duslkLCSXZvx_v9wR}-&p?YO(exHm9}wV zqJYA6?!`B*_rXJLL5Fw?+HVB^5G?H(dc0v=UbV9w{F*p#`UVS#8DPTxH%{1_(KOrl zlQ*XE`C{l)Z57CEC{*#!II|3mZi{MDQqF}I&xOf>bK#Xd7oI#| zE|h&aXJB7W6Lp@%Htjs8NFo|exBoDYNFw`%?8tAQFE;%@o-b}xV~>D-J!^Sw0lobz zjlTbu<6qDZx$>OgwPP%IvYG&{-f053x-b5^jr!!z2jUZX2%@*3VKO~)Jf*iB}9*-_d)bA2COu~(s+79WbK zj5LdFV+_-Z(4i?#$eCIn-xl>9j^}sLmD&M0J}ZT7^!)mU;?GeYeB7>hJDHe%ejjv` zLGOcZlre$BVqRbcx$f%DIUGR+i61-QrcxUkN`9$+1ynr)?d_8U2XPQR>*7 z-mrA*#-@ZWuaVi9{;FQZq>}2#Q!qj4XNNX6CH009Qdi2$ZMb@nHrzLFXSs<~O{qrZ zwWU22TX>QFHveqUHmjUB56H=p9EY1RD{vl{Lcj|ucr+GJG5V2!3DZ$49Zle~#l7k< zHB+>>AN$}5-&3%cyTx7O5z(d}0Wvrl_q5jc@hM4P6&rf+E2+lt3Uft|-3K}P%x*Jm zF3crzU6n>yk8IdTpG)a@M+~>#2!=@e1(z4NRP)I$LiO;(7fEzgMnbJ`E6(+bv)kRJ1lh_AoQDGH zw!HSo5-@giK_Ga6K(YbvqHFovu+vcs7?;pBSLicqaj4UL^&FRs-WEz;#aYEsM-Av>1yAp2zN@tU5ap*B;2hC zcN>~_ugLYFv!{~I4iDjV2~jWv!XAaH-90|$-ruDTr&zES*agU`nzossj}t*9nsl=X zd^XM+`KkQ~zKeee`hE^wXEv|rD$)z1^)=EwX50Eydlrw6GPCNo1FhO%W{OoC%8c`~ zi-(wBJoplfihY-pW$C#p9!hl8hT3jM&=-^*38V1 z3{A<<0JX=9*k;F}RCf&6_^uEOQeRE^zmofK&=NHF^zU}n@*MoUMF8hV}lT2dUj*QlGv5A&CktlBFRC|TIq9;e_H{>mj^3_bH8fwo)mUBgN zV2X5F=+-d1JtW@|?G{jLi-)M0?q71=syIRlhORz zGst)oK^C|d6j<0Z0(0K^d&00OG~;`oS=jJjKy=20>dx>|8!Mct5&9BqU3ckAtP-D& z2&QSN^ip?tT>)$JDZnQ`9w^S95wgvDhv>opingbd?>#ewpEOOw^6&SgBJ6!Bat^j* zH;B`-Vi>P-eS$@cp2dl!a4hK@`@?f`B-H% z$M1pgQ1X%d6S(w{a-m8(@4;HzdapJZZXPD=4y*?VWm1T)mflO9r_!~A+9TpdO^V>T z0R36CoR0sHs`2*YLoWjCbsv;Kne zJc-IPhn44k$?plp?+HnGQV|HKr@K1S2k`~GEirdoj~WBsUjOO1zj2D(->B#Pjp4k% zfu^-sNBbLfa(@F27VdA<@&3l}f%_X6Z)`VC9k9P~n=b5GkZi(;|BtpW0gR)z`XA5C z&deTmytXsDc0z0toJ@A@gxC<06iB#3fN+PkO&|ma*a-~m0tGf3ZfGe9gw{8`0;SLtD9}_!RAKfW6u~inc??&ZTT`hF6}b0M#pIE z2ulAYO}a&y%7B=ENDL=SM91$9hErq?It)rv$4K~+G2s1xCq}{t1Ypug@R0z7MUVMM z0q|lZ#?e5yU}VZ;ssVD2wr)@qJf-+}TTKnUQB`-c@_pVu4`aQwf6dBDHPwbDGkR*d){TAMtG7EON0 zD9Oi6Vn;-Pi!}n^3=I%0zfS~LTa;}3B>#o#tn@OfDiVcJaXh0d%2M`tgCh#4m+n@f zh@22pV&VS})k)8H;B}+QEW5G$Y>1{^6it2xo z1}DArmL-&rCyBNvNnlEw1;l^bQZ{%)!CEiEyN=%FC)4j5#bQ?+!f>_12n4upzWg1mq{RHwH&J+Z*X7 zMawSzT7_GN_bA>!k9U*buT=S1{%^#01~YaywhW3FhX#HzlQY^Mw`l? zElqg^Bs$oZ$)>1{bz-1;&Z3p&-&?`9;45?2MP&jj)JDTvfO7?NBF zragv%?s1@gnZygfS^o)YS9s6(PX_P)Z|N0eC)}h^;JhO=5_#aH6W5m4r$zkC?5CxV zWBTX+G!iG8Y(YE}cOcYAMK$LP29ff7ReBp?I$wQX2-er)M-RZ z+GJvwXRY2db?l0zDdzpIPEwaPYsnMgqtJ&s6zQIYEUyL`R$Bb$%?25hDJ^28E&rkv z`LcKxTFeN{u(b6W@W-ZjZD~@ zw*9Z9aI14w!`W@3T)z~5XN#8$bd4L3M*gDEa7NC3>W>WOKC^Z2%vi9Wx0sple@gK7{AnP$4P@(R}+LIp4-;iuv|IJl{T~cD{{pG2gy+q&)$~qr#Zu5s6P% zR`)KU4x8lviz!<6dm-pbG1C1p67t8|Axw>5dmf<1FNf~K{w(E5SsWYbw`8_1gD{%m zs%6(-iyRi30Q)|Wv% z^$FQtk@fRT0UqlHX)!6^t(R#4QPG4P#siT94q%u zQD3T#c0$!E?jL;q6`x-YK3~V@3&H0b7B3{cX~~6zHzi=R0&JFmw-n$lD{?4Q%IO;M z{2b);I+9bPawvq-tQ-a@^u7cAa@hJRWbSz=g*%B+Y|WB-nBHWjt~p%13|rSDbdw0} zJQpF}92l6)MZ_bjBYqtbU!;f#@#Z1or^rna^{?=qa2e#OeSS-m<~@xonKOI`^HaEk zIqt6Q7gAWi>A>MOcoJyFCEcZ$1;P|Id8S$zu>BUgrTn!0L`?EgQ+ibZ{8wnNhj(=B zo~JCnlH2iLMH`AMzXzIDU$13wmoxO#d01%@^sITKPB4R1Ce!;qtzjgKxuet=Q~Ci3 zk)ivyQTG*faVYh^PAxH0`Rj?`eRUMPr~Dt_ePI;5xBqu|AtP|7ypDXnOBv~B85xMm z$TzBFL;$`Cz@Guw8M08QmW3M-`WKP~gm}9kPG5DL8xiLlWmMiKg%+|@7BpXuF_0I&zfN}Vt&y)*p(ji{S}oFZKIo@^(Nyi=9{&mCOKo^I1ocrbV z+K@if&ko*(2Be+Fmj&)Cp$iQq8e*cu{FM%6Uo^^Xz=8X8C_0Y6Ry>_1^#3uxRlLU< zVy;b{F0^8I)^2HwiSurUOo~vUvRl+uik9n7L~_4P{Kgwh{}MbcUogxv%((w0@yx4W z*_>rH;J)*q?iiLkLofdgBW#0Evhbp3ygNe0ux1~fg0{GiJ})?d|Bmct=~=UWVB4du zI{>=nb%!wBD_cspSoeMjRVvf*ph)W7i~0Pn3^Ouj^|u-0Z@JbT-qR_4ZS^F@-05AK z99G`rss6w5h*dtqqrt3v5YGH9oAf?J_t(SapD6&jo4tQwGV~69-W5L+XC{k(hwQ$N z=E+BQTt2!(Z2>yf7ue>s{Juby6v}itX7iN}@6*T&yrrFObUR6v;Ra;*A#0upmlI)n zl@sC0Fb7ktGCo-DD|H~;<^b=0D5rrwE$Y?0zFy{WlgMKZwywm$qL;yeuI9KY9MN}zX2ZAw!gPj)VjcONOpqHMeEz%r23Sbtp> z(S>yhhdz8PF2SnNZNG@|;9F9+UCO%cQLNiSOe;r{ZhNHEZ6PnvZI5K#_NZFj7U5#Z zxOp^NSrhie+Lx$Z{6`eZ^j{IBN~n5Gis>6_RrV_>r#nt&%ix0yv6S*fb&=t^$n-Wy ze6IhhK$vqF;Xplu;}R_UQqkDa=cOY;FFDWX#GoQT^X>!t*8YH9FtAA8L{?7`Q7zq~ z4(Em8*^%MdXn5m@aG2dqvYid1P|=-gNd!*xpSQYut1x9L{bq3is(&=Sj>c)4)<2X`3uz{y3mMAg5u@Ra;Op_W7o&b; zMx=*JZAv&@Vmu>FY?C)NnqusDni$SvjMJqT(S38*31Od`r~$mc56&D9CIiSL)Fgg6y;Xkd^A0J`Z-8;Q!Q#qW8-NpCAZblSygj3?prx zO$(HdH66QKL?~AcM7s7>{lN|Gg&}l_6moNdOd&8bMTV+cGSabhtdYSWx{pvm;vKMGKb`bP1g_dd9wOshB$0Mq9z^%hws$ zBj7PM4lcVD2L+rLxSD#3l@X&V7+&_}Ga;WT`Am)xo{Ywu%Hit<$$`I3rb)Ow03}%#yB@zM5669vb8x} z^3aU+C#<%mU0I{}5->*n-cemMJ9)M`EBL^VrZPHzv?3x1*4b=AWJG$uvLX;Up z7^~KFA`BU^F^?eLnD^eMiN#y7+G7&n2|WKpY+i~Y8?k?nQt;OOxPWe^PL9i={{A?NF|X0fV4IvQkCR_esbLIA&O4iB>r2~YuteLit90*Qs+Ly` zc$=j;3=&5VAl$n=Jak|k8@?|N-WA>%#SH;0huJ9!2JbB|Q03-=Aph7R=w$C?`pVq)ma1jKKF9ph{6|ld+yZj6@r$A&kQ_MY5|&7o|QYVqYU6 zWC{@mN=uQEXClx*=uAYA3TGmyVaYQQcpvplMA2ZgAH#Fl?jp_)8&YwG7^To}g(nxN zL~O;9TN61*5w_wmSQ9Vblp%2uYkMxNcgp3X=ws6HcoG)`@H9T%LDZu1T?`M5^AE!X(l zWe44%038yrtpaSzT{kV{blK!cBp>s3h4pjBiux0wFVHoh_%@yrSDCeM13(8(TzHL; zfUMVKv1^d2mU0c!ia2a#GJ$6(ZLAt0fW3r>`myMaqifmDJVU(|nPGe5fY3{e-$JI3 zUk3ay@f;TTQf|G|WXR1fVAfZUCo-F<832_u=%)Pk5Gj-7^4{USExUM-VyVvP*S>?( z-!3VtViK4|rz0BgG`$QM>SsU@XQF%^!!HYOFdfe@vOgWhVBo9-HkLm z%@U<;V6_U#_Ks(W?oG7h>Fum7b?}8@-#m}Wu{QXR;z;$h;PclwE8U>4o(PTLZ)g+w zL{N|%AFgEr@61h*=gO~>b9_X}^zKHJ-)vC2q?@vvbjf0r-RlScX(nnj7p<<8RXh=+ zuV_Ek*I0d0I6PJj2%W}kVG$pL6@55o z9c6`qeO4;|UVJ86*;Tp6gglR|p@Y^f_OXaB`Z;YQ`O3M|(6j~ERv6Vu4q9YViuB(h z(lET}u;7GrHkY7YG|_mINky=^4Wy!NU{gbCQ!;IKS#f1ofiN_iuu2nws5FM6;&3gi z{g%a=dz|upu(!7D3A9Watc!jP>!RP5>!QneUGx}U7e%*UIhxi*kCyAA=smG6dNi+# z9#gw6ig0V#x@EL=(dalcebn)3`p1q>VY*kgluisEIW>Ib2BDL|L%t198R z(N#NcOd-j`Z`XW&`v1Tx%L+_jetMj|H>P{yh%oJVb*GGIe~gBQpF9sg-FWa|Guc-5 ziI#?2YOj@j!8DufnCBfIu83@BS2+z3vbBIZ;Q9EK4pBTFyQW5lrW{4;QbSW$bZDAf zGc>KSNLtFBQtlEv~aZQl%v&lJX%d9o=+ZSwCa+h zm1?7>YJ2}!&9`;3^WZrb5Oz6?sXJLbKjfffYxi{Om8VfoR48&zA=H6AtQyB7DoM6i z^gFYyfD7!+qShzL4p!7B3E{WA-L0+gNy2g{`k8e86wZR{&HpC^EUC!IOr09M_U_{* zxUg7dpNJc3<2=YZaqd~jsbH|izRBtyAJSD-ZpoI5m7Pv>{F@dTYo`TuQ`Hl1_kT6k zPE%v;=vi#lSUYVCV{M@(udV|k3>iJoj~{Cz@-WI6yIp`g7-NGLl?zy(tBx6ru@P9! z7`rPz`*m+88d$ApSHN>9^z&?M1p;9@MTGu~Hxj%6ag`NTO%IciOz4YvGXY?9yWuHX z?~<@RVh;Cp%AeZfcKn31oRnqrP#^fZ*(@mP4En*U@p;#e8=uvfb_2$=@5nLjSRT`k z<1r0GMP)gSY0Kr9HbstU%Xv&Yu69hD!eiR4HDlT&-Rrf&`%YoIa3gHIqFty^296rp zAKr4jnh?=M{b(_*{^*>229)k?YR#F@Mh1I{H-UF!tgY)~t*z?`Lfb!R$!B}x@o9C@sfi7msG8vvA64{)Jl|&ykn} zzO8UNf$JW3g>v2FjOx0_Vb?wNQ3;FZ6pxNOk$JQ(xFLH64R^GvH=*C#k7gp?z823n zXR5(|rX2mZR{(ku)5}F7<|^Gg#Hv{tEb8Oxym!!4B4Pc5lmXoaq!7_dzh3T!jHmeN zw}Xu?@EWSXR;yd%7G?i|$y6|3JRc8HJs zWqBbIm4DMJG=Ba6!2C&&cHIiKGu!FPRdu@av9b8J2q|uVf?D?M^k)b-cAwv+eJ#YC z%y%S)09@IK{xX1&f04rkO>Ml#U55*bV{9JDlyvKGbxSn8kA*zbaEDxfb^;oBhb0fI zM8aL$9m;U{j6YLm6!rn?=t}f|bR~0)Cnbely^2 z1aR*zn1HqK>>W#^!%-F;iT9R5j8E3fJIT7o(|@^6WFqa5+DdyQXb#7|;J*cXy=M$T z=iM+d2T5sbtn^hiEX| zzt4~ZtoKWpuXT!A_HTn_9G6Zn-;bgoEY;~cuKz<=a7nAI(@v=qD7@upu}PQ(&`n-w zt3@Nz6EoU(o|PzEsn1Sw+zx6-jFLN1f9L%kW^ZeXH=L*pZNc>7=HL@-&)uvJBg0RA zmU5}gMf$eNJUmLnm@v$VjJrMJ`EBCo2~aEik1)B-H(0)?kpx_53}S_y>+Y|k+GN&i zZPUVW45y%P!I%-XXlyLb85BZ#%AgX`$g%(S4iUVuI#@4*L|-V(iSB7t-Vs8V2uWR3 zZcxDd6y+QNU%rl%jm0-cLtC{hH-{!ohKL>=yMwY_tGTy@x+M0QzeD}doLVi4@t8X1 z^P`;ciffq;#?uoin>xQC##8N9*hA`N)Y8%}(b$Ko_KdKvL8jk{nCj6+Es7u0$pCD+ z82K&nYP;N5Hpg(ivMnHqbj+P4`cPYZpCqbQM0CKcM>l1g%whNF;C{@I8>}DDd6#{) z+2`=Rn7X!u*0)yaelhYJ_+9F|$Rk41ejy>9Bcz-ctomj%);7=_gL9g;c-n$rn9jwp zsU#0Eg(b?#Ogh%{g8M?!eIZ3R--Ye$lB%)Eh+5Aki(eiJoR)+Ff`Fgb2Jjw`2zfaO z!L@mIaQ2MkEX&sr&j*&J20@!qE`wKxB>I!*h2c;4SA#f5}a z7JwXc{0zg)ivbs3YgQ<`=;O&Q`uk9w6FTgo5#sHRqh-5MDG=RHLC})L#+9K95`<=E zCX0m#jN(#1H0L=DzT~(o^3K9|cd{L+`rhff9oCv1Rxu-{-nX(hx`#?6S!?g4Xflq= zT?xfKxOja)O%x{)K(9i6{$3m9rZCD)9A)=aL7DXO?l!p&P{LWL0Kom~yf&OQigc}d zB&$gSl|8BFu16j00bxkx#Uu@H4x?S_H|WyI8JDH!1=a7Ir@eV{o$SA2nlI}02h@KN zN{ZW`h*@xz=hjCU-)zpAUPngiU_ES|kU-gM(*{?wWv9ijEsC}m!fY01dXF*8O-qw% zC!TiF)&TWCVqOxbi{YJgywIF*o0D@sOG`K?P&(<4)8RL&x0sG|rv1$+0haHDW|6!h zKV9aTGSc-NLborb>n#x>ol1*GD%~I?ydm9S&zvkEPR}FxwlFrjQW;xC>v>Umsbap& z9}<<4jtfvc9gmiL{vIO0i9!k~!6>T8hlfQ)imxtPK)4sR`g6fqLD-M&j5}o`XSGB( zu{TW%47Vq4=w2BsUZO_}WXBY6(RNoe{N7Neh-0|EQs>#l?y}bb^%47~bJ47GY5<8L z#y+Z}+Gni(m1d#yy$fWoCtfeIls>xUUN{UitQE4WwXSTo z)oZ43WwVpESL)vRg53VJBi=5=8_5gVXw0_h!QYzpzz#M&n&Yxpj&)KW92dQ@mF2bs|nZ=bKRP_zls!mq) zdsfdEq(5(eOM1eJF}ZZvNugkd5*hWtMdQOkB(jwQ1I1vtxpJ`0=PP*r{G)J;KO~gB zLrBCZ8G%g}H2$a(M~v}pa*XeG{O7{)I~ee#c?K2|k$3;ba5R4uqq(SN(8)`UL|sld z6rs)X4AQ7Pf~Nkfld7hfwVHa<$yLEoZnZZ?_{C%IVa%^Xqx?EN;Mdm$4Y!AFbxFvt zCB!L8MqpR*Ye_A?+9Ep9!8Y?NwjL!voPAQax(W+BY0)wJKQ(DT)FMk%3PHm=OfDV+seil47ZYM)m+`LUs4`pAyAI#G({*Uf_&!zFxX17aHR5Xr7gK3Y14#q z%o2nC9Z;jj4;^l_9ITff#VU&B{Y1nhN7vqC8eN535RIzz16l=W^M3+LZ?|wffnp}@ z;&mshxLKQgU#o=Q3=+oN!{&Sz*4*A57A#oHCkPF^_}!62PZ7 z=W%e9;%2Lge$y!r0z+d#D2*o{9%F=)`VM2hbVhhJsqbX=vy|^_FuR-v)A3y$Hf*&K zWwZ#hBTSxuq)-u!gTyT8prCB#{^N&wlf~-;K<;*jeYXpgnb%r4`g6E2%rG1TcjL%?P%(Ah3)9kXhRyBwD39pp| z_?C7}Ee@Tcof6|4@yH221w<^-rOsSKq)z3D4HYEoW;H4f06y5)Xz+SVim7!(S48ge zWga|1qrqp+-C%YE+*>c?U(6G(xMt3E)j{ozy)K6d_2?P{4~myRD;g==JDDS8Bavi+ ztW2;lnxLb11}A8ZB*;b*$i%HOvCzg(QMH?nrA;30=Fbt+n|O1TyOXpP&S7>Hf7^*V zST6lg;NMO9y1_P~M75k6xYBU1XwNR!GgrX7u$~o4;4;1Sie01(qG-%Xh`8*; z+?9IRWKPnl@6#iVwe*7&4S|s!BNv_nXMKixYwo@WS@js=hVnBq{wp5`k%?4Y6hhP5 z$_X|d&;-~ml^roI9S?|ThIslFCy2R%VoD4o>i1!MKQWwB{aDgv6xWFIPVh5=_33_?a-5dXdYvb{KSJ5Y*jZ z6tAm}cuRmod>BD0(XR~2Swc{D0I7tFRLM_KCC}0N@Ag4|Fj&*nC_21GVrgSUb60JB zVy9YD{5ajhyO(tfUPFZ+x%lY$9xs)M)eap}3o~_cVIR{vIar^i!minfXl6d3RWp#7A1 zc}guW5y_Y_$S*uj3@wEsa%wQMG9+FO>r2T`8X#wQ{N+ebf+!j7KM6;S6cUeLuN%NpcnvIK&HQYdahLE0AOaPOvo&z zkiJ2GGBXLVN?2&MSir~M|0$69Q&F6i8eMS7AFHAtCq+N} z=m#nc?c`KyC#3sM)s2kzEP90N`1BLpVZ3^(a)%+5C&SC?&pN6iI@I)Uh)rv|oNhL|~l*NIrffW?kkUaL+h&<6|Q!kSRp#HG7_NkmIl$F{vT z#GWh~-f3EB!+4>1-U*xcy5aFFLSl3$Xb--evT`O-&3qAK4wDI4UDfee?n!!CzK#HQT(wq`r;*+$x?(74};CH}bhZf_|N=sNM5Ei~IW^kb|W zOxu0!*_n@8L?CIT#ft?SamH6ndfJ+u{1P+mP|CE``zi6>#(3KLnq%T?5`Q(v?R4Cq ziiLVHb)#c@BCtJG5b9%}FDA>0>(dTSGiR3;1hmlXh>A0jKi7PGOMvl|={Mxb$thX0Gub5CzhZ&h4X7Sej)O)PBA>>npXSP$C zhRqK_GWod1)%yhkaG3Cpo3?B>% z!%`XST%=?vZW9498P^VSOsm`)=Ae%f09(Dioy~2L#tl{{j(^%x_y2<%S?iTt!IIO&K4i7qbJu#PCJ9qu?W(5E<~oT)GVhrOsxR z0uSGT(;Hp4JPQ+rGX=_T2lOl|2}QqMr0;TctFjtYE2l@{82d};_w64x zY5qomft{jt`u`HYQ#<{CkS&kDnap(14o`+G=JFr4B{2!)pGKZ+n$B0V*pGf1`Ho3Q=Li%r!GcPKm|0biP z!QCd0QU2G&&mYbe)SM1?4V~TQR5w44U2^?!cKzMMb?&e+oSy0sL_ApWIioslNXvdzJNA6Zs}sfZKFHD@ zunoN)Bb+gQ&6zqjy>BA+bi4{LVlj89e$xUtZ}I+vr7};{RX)|Ed*cPeZu|n)bIK4h z>7#|+eht)bs<*rh92I&uXc2qSq_((Et4Dh~UoWqb)1@_Xx|C9mAlBGw{nyqei#olZ z>J$Rn-K0n5oP<^{quGofngJynuU;B=eF|kqG-K1<^%1N@;^eW_=cO<^NX+>OP2!Qb z{X@6OB>#+c{?}o1mOXkNjutuX9Y@2fDaQ)ik|?)$&9^#TZt)Evqt0aqYwAuU()#SC zn13005^S=XoF<#xm+3-HNZ8nyoZ?8Z`E!W#yd~mgpe-+EWURQD^=q2(cTRBVBvEp7Kr0QyxmCBZf zEi6Q8-l@(x?LsnlzFl=b>R?)GTn(sWd+np0kE%`g%2uSqy)q9((siXQeN7$)tzB~c z_yRSyTp+oBp#oee0T(I2MG|na0$j`h*2zV{=Trc_49UHhmSJlu?k4@IV0gysV;3|5g?E<cD5e<{f<4VCKQ+%xszVujSEmzoQSQhc{ zh7Hl^HiQ6Pe7Kb4lOiNca>AM{-U>`KOjv#sY`T-UCmI`Jmr-o|ifR28(4?HMoZ~l` zu%*OrZ-e8v(HDMaH0X{$75I?MNhnM{Es_A%SNUv!FcR2-!Ct*eEobK`Kc;(W9GL`KuVKrcH|kzi=V;a7`^;?09uKM zUN^ZH?Al+*nrGAM4?-<}BD$_Z1s^tl`4c#GfX?<^0qGm`w?V@4I+~}>z;;#l1)Gei zo3xzrE4zNZW}JvAqtwS}y_#x6GMkLq@B&(Ox&`RA6{MSn9TgzmFZ*DL$t$viKGmfP#&hJ_lK$9 zMK?9Z-k3Y&&7{RJL*g1pwczj$Zf8NgiMhx2n3`pSnpBWBEU*@wS=lOZy_l^K<@xc! zIZ6umXJJL+X3;pm#ADc(@yJxZg07;gSN0hsIMgVeIOW-gZ6SAPR!&dH233Or23$Y? znV^|-YnC_B7{usN*KXhbcet0gN$}?pd5#4fsyd1X>bjQlGe&9#mQ=q;S$&E0jI^l~ zjW1L2`?y5(1!s#)gvQTAwD z;C1v12-ifwGm$B9&3PHJ!qN!#&3#T&xS=?q5Uy{VSaD!9@m+s_xx6*^+Z2&NnL=+5 z6guvedZ((wQ)k6E_=CAXuXIl*6}Jy+9&ydC;hN3Hk~RYhX=`SO9(=KE1W1UZ`G#tl z5hw)nEb*HVy5e{;UJVaRs+JeDw(zb594xy-aQT;!y~9a7deWZtKC1ue+L<|xm3$1` zU2@1!YmQtCU?3*Z%2n6Irr1bc%FKP`$(R>}1 z68l8 zbY(Di`KscIw<{(vH`t*;C-m!5JxKjJ5zm09a6jbNB%?QSy&Gh!@N421KzwRWFJEU% z+a7t0E@7;)`iC%TZVdU}mA0z^eMvjG>vZdI4iL^TL?U+WQJ}#7WiGc+3p>sT*5V~E ze8mft?*>&qb^k(;a9x;?Ktf{Y2VKY*e2r9u-;%Y$JdAl2e|H#JLGpEY&9y;dnS%-{)+1< z8RB}+#j8_hGHZ{oW3RJ_a05R4?hwVZB7WC){DIl2_d*;_JHtTgWIB05dV}m(=$ZRF zQ-v-7Prre^Lz294`lkb8$SK41ko~9$;! zPiZ}x&$mb#@GB#2zreqi3L1fB7x-VTg^74q$9dxyP=7;Q`fR~Gk@xIDV%2^xA{vye z#yCff=Wctjhe$}TiHB#UKNjz`TaWj;PlETWTaWjwPlEUCt;bvbBzRYUJYFGUw!zsVf`woRuI6{SuI`2|0lNg|N z9_+qjSFc6eI9n_GOoWwwhjXA0V9oJCED)UX*zT4Do=+$PV=@ zD39kIpJ=uV=M_+#0AESCNVg9#gS|A;y*Dkp(mM;g)@5)k)}=Q%Dik7ox& zFE8Jkt7yT2VMR;d^3eAx>hCe^C78ka!&ue%!v<3wKs+HhcgQ^L$E9R!B<|vDVz$3P z=MWARlcOJq@ci~1eAf;^Fis@|!D$Ii+tPUa(8y`VFNCKVzbotK2dWtl>-@7 zsnl|BjSN>bo@^`h=EuXeue+oiX><{~R;q)paBm>EV*YWOcuZRRZ}R$Hddnv7?xm0D znJxX9o~@;K>Dg9#ot_g)@6&T)=^ymmrerwci7oGT%ifT3q&UBb9we?im0y4biNLSN zb9(s~tmN$Z>CxJQJe2%nkU6RH6PEwmsre5#SAK?{Ca7fou%)4YeO|i*bJyR@*m>wH~*KmCG(XzuJT}@O^4nN&%)JlQVv)PI5OtV+2My4y~^i3M@ zU$V*W&S@JcG~08&sj(k?R1`6AR%<#&>{QUce!v$D^vKTw;Lk%Ky=qZ^>s$+lzX{a#Flok6K~$@byTIk@rMp!x-%F*U{cCzR zeT{1C9%|hL@_Ti%SK^(5jCY>g)pq%f^()-Z_1mytd?4%sjmm@29^N+SeklKM;;CEy zzp(KCOT@DLckq56zrTz3`}zGnygy{qBCr`Q0;>ZaVmAIOswbYyPtxWdp`}`A9k`5C zq*GvC`xNoyLDjkw{BHP*RO2`Nh2mA6>PH|uBBxb*25>}M9t!{jwTb+@WD-@I4@PQJ zQ1VMDeD~XOP7*yAfWYuvK=2iu3kV=|E`Zp=9ov9B7eEu(#gW44WiYb#T)+eN$D9kG zj3Va(h(U~NYtIFkw00fmeaQgdCpZ^SLuBM!01A#{0n7k^`vw~gNu^xcsj(_%`gYak zovHK_OFK#Q4^I<60={BpFf&7Ro2@fi(lO?HGU8HMM#b>A_GG@hFaXF`-s0#FCiR%l zlU@~vHC5c6nJixTX|;Fd!Ys_1^JG~2@-)IEp{h7()7wi_i9B4mF>PkWh%jekP2_BE zo+D=qSDet^xZFwe8P8?n<%(sLct0d=6^ZjJqA5FiCs)Z-i_CNf(ZEH5HYC`wI>7`P z1%_#a`oIAdGgrxl-+wiRK|{0X9aw^ZLWK|G%!JG0MWd%zIW0qP&~hUKnbVzmq# ztX~bPw!xEhv+^*jCy$eQLhC?A=^dO2_@59$D@l485dVD#H;L1-YvmE{#OOi4k%gqC zeH4tQ3Ea7hb+__sQeY~N^5Zv@jF5ilD1YWFg$(_U)_P*Pw@wN3(z%NTJXQtjYc%G} z0o3Z#%fL)DC2e=srzF-798mqJ&8sf9T1f}ME-)3G((WVDEL!c|`L84okA&25k@fO# zNV7mLVgP=)I-Eltd4v=1Vv0ETtAq-X;!UPM>`;R+=i&^P9>;1v^8ml@tnDJ`(ox(l z$MAN9iDAs0wZAAbGzc;D^Xhk6=m}z66cAYwSVKG-5(q}Pa0D+G#?`v^J;RWo^Y!v$ zB35@sDEp5Ei8{OWsX0%JN8R)JSJ=uAU&Nm`fLrus_a8Y@nU$wm*q)?^Sy~G<@Cm91 zURN9(@~#5xw>E3KPf0z&(2mlS52ElONw2Qw_}lxBgVB$)?~VoSLi_5DMC`yJ+}=hC zXm89&hegTarl5IQdg+UDQS2!-ju_gW8vA;$o=O_t1~LyTKOGEPP;Q@ABLtV=DPknb z=3g$i__=I@xqC&=3JwHUGEvgtM8wcQrwo_lMQ)QZB2Ir41rmheGS%P^=ea@Y_rH~` z@kv{qLG94g8vYZqqyIb`z7Z3!2uaV}y?Xf>2uOzz5WE;&uFQ~zWG>~Eq>IRz9P{s< z+P>yl>QZ>~`S;xX@ZdYYE6=fTJda0dZ_J>6$8mla#`y!WmEfxppRWi%Kc=8&<$~Zn zQ@I51x;GnJAe+LJWxRVk0Safwh63Z)TL?Ru6(aZI>1RfK2ckTsK(BZ{f-FpR0#aS8 zQjHa>8uwVSmLt}EAq6%5BX9V)HW#|oyusF_-++r`dSfc*8nLPOwp1qNBa>pRMiqE- zbh0bu4_vn{t3$z`3*noh@J$L1NkrY_8YbjczF5>m=ID%2<`+jG?TtsbHwsvfgk2b8 zA%-O7{vIp>d=HPPL$DV?YFp)HlBKz*=|9pdDbFu(6DOX|70+jB+`O5(C_-iU^K|JV z>{HT3*e&*$F2VwztZg$wA7L+w=kLi!SY&BU`UrdF%+T{dbbU?w2n&PtGN|@X_vz4&82oBJM|}(Os#>Szymo~|EW{P4T*&!k%bXDuEg)NFp%jHAz$$q+l;s7s zN?sXQCF>56SG|rv^VS*Kc84fGUU6;NV6b)_@DzgdiY+Ixudq-+&;GZF_dLnOcQG5? zRxgVwwMm*X@`9%P5;YTmp(zW69Fn$mPR&N;Jr!T*da0#@i5`a&yeM?I!^ zxKulD)BjIjXgyM9F@B+DUXtV0pKP@r1)2K8Xfjnj-->WFm2Yd(iJ|pzBOXR#&gjgU zKM0x9t7OU`K8zw$d2QM#GBt@Qr+p^)x7>tw-?exQ(U*j!Bw;j$DpFn-l~hGaNI_(5 zWm-D4*13w7l=i8}9bJKc81C-gwntg#uXYt9O8lx+x!$nDRY{(D8PT)DuhS6j{hW6a ze}PAX>D_Jfbz5t87p0&d!~X;HvY$w;>P=g&*Pjy1ncuEqj!}7&hWpicu$S8MtASQS zn}hvBdKm-^^;iDPssTO9uR-0e{FOk_ZfcaZ#Uqao>TI*3Y3UYd+RQX<-Wr+=cRD&<~77fLxj ze|KUtcZoTDL(DZMtst2}Dwu0h-^=L@j6PH%S`XzCqH=oZn@FPZLau`XfOSwpBv;Oe z=dv4t%)O@SQR(M@w?qB>A1p|CNZtD#N?v&vk67iOHk%av%MR4_zj2bkg-PBcG6}vK z$)oBzph{iGd$qd$?=WQ<@1eThP~G#(IQV6a^-yTe?<>uD^fq{#mftk$y(y1uyecT>wcYnZE%==%{GAZ~?u zsRTWL(Y?n6vog^>uv6;Fi<$N+WnXkRe^>qDL7KeVfXZJ*+vw##+#Ky@gU+*pn+?2I z1vKbWrftu3;HE^nEYZq64a-VC=bfKyW_lZC=V?gaI1M_h8}ge2b2Ezb&r)u}XB5{4 z?>&(T-2PYyf0q!$ym16)?4XA?>MGT z(<(1xs@Gh z*QukBV8MEc&VbeeWwYfno~_E*Y)DT(HAN&Ew^wCE37xQnjx3=QDPf#TXgd*mNG_jE zv?6?FP9|dD6`=gwJ&1Cf3P;JeO!*Q+uDy>^CxM)`QJo}1ijyp0$w0tTvIxnr2yFwE zdM-pFB4>L9a+V;%5oKnlNC^zIbE|U@$r)a(^`BJ0f;N*KrOj|z#)V}W$7LB8l%-LY zWn5KbNpo2mB4t?>l%;{nf+#a_UrS@8%`~X8G*q{lt%~*Ev??xiRhybfWo{13+$@XO z9Fe#dE?`sGrhXjAToaWKF?PnSXEG(jgJu^pRn4l2n-w1B{~4zLqH$(N>wnnq zq#N?emArBzyvi`I#)rIG9>~IYA{8-a?kSV$45bRjixo6g^W!3Heaj8&J&^TDRF>AT zEUlbZYar`wvT&_c?REkeFB_5dqk{5fseFhsbAd?N7HPLxRfeo=w_6S#yKFq}pQq$c z`XmhuV>7do#mCQzOvWdIrqa1Eh1~|PlM~NO+1aybp9ugmDDgiVk9-4d(vdU5mHqyO z2%Nm(s;hSOoFHAsUmNFn-6Zg0gUD(U6`yh;U^SNWW%PCxy*(1WeMIz&JuZwG>CF*4qO<8G@#g%k)dpWj$I~U9Nmx=iOOQhf3KaiIyz+I-lhtVjzQ1JG$ zYTkAyi>+q|MVeem5AF&DN`yQ%E@7IHt8N4}5r7 zv6+nwkcAlRxzoxOBXXpB^~!e}+r<&1%uP;;~ag3XvggXMT^68@4O^Iz_FT2;UfEK*eq7oU2wi(( zz?$t{g0q-8VPFT@I#KrDm=*4rQ%Uj^V-lmmqZb*PQ476KN;p1d4~<)r-dCI z^0`&y@iNgoty*3|?A$9wsGB6GIifPA8Kzxu3hTYS=*%P`cjRMz+}j&gDYAAzRnKFB zyy;vg)2TM-*Aru@)syEOL<|t-@1s*|aLf9#9UyYblx6FV{cZ%Zw%pdBsp39dZcu!5A5AJ?0?V> z{!BFYR=1xlw}W182m6oKernUb@-gYu9Yb5-k>MYpf9xGYz%%`0c)eI3dkud4q@Zqh zP<6V46RvT$)M+@ch;zGoS+HGn=P78M+mpo4tQ{PJy3O>}&*5Wc0LA?SrDG;W;&O9s zj+xDt+id6OriFUbVx-Y$;+!nvr0w+^aghhZ0<}m66_%uJG6c5Mv7UR-BItXHtGCd3h&?W(A~Tx%K(&4H#7?86ID+ zdjgBqzp)lNkDzj&;1P#i$h}SlwauM`jQurw2hkzu z$Ua5GLS+}C7$5$jdd;0eBd!yoXw>)3fytTb{>nQ;7wNH?ZK{i%9`e-=87jTrBSn61 z3Fm8u02=K|pir~qD5G5ow5tQJ3_-OPDgekUftJ)>3B>pR%y-oNKl6FKLXxWcf54jX z{-6D|?|&HTbFfo?oo!?hZ9w!2*bxdCR6nO(#E27vnsHD*B(A?XCMaHjb|xD;y_*bk z)3WVaPP!@?-}#dg&3O(s0z}IcZ3Z_0ok!gO3XzWUoj*?RP}*)zn79@w3150M4cx^; z*(BC)#5;(_6+MY)7H}#k{pMLSCyOwv=YDh%N!c_b=~T3y7uCf+95%m*yM9#H5y3rw zKM_y`DJ0`uK~LkVAJ}@trE@z*1$V^3*??B@H%oAIQT5pX2t;t-&u-4>_x71j=MVOD zMmvA7r}J^=55jb>Y$@HP!F8_#PB2p%lwa&F`C=pTIj|}kGrZJwAvpQ8Uf!F!wBiY? zmEICf3>V3FMZ4^UtRiu8Z(oNjNyQ+s5bEthS+o0Aqn=e63-#wJ5!CxC)ccNtdS8ip zQ8nt1#zcManh5Ge3iYBKI4SoAK%4!)CG&%&t-3DKwPCL|yV;3rT zzzCWFjG$+HO$IJSV_3HLEZtiS>*84h5z&cC7>#-4>}4iLO`CmjX+VyHw|E1U zR~mLg?9_!4^gOTy3R-(t!y4M=`s#Ai@-13!gzn|A6?mFgSehMK>a-(^EnY+iowj>2 zjKG~WMY4fDx5$RJ-c_(d_m+8DtY^lu00(DaLI@G9U>+B06c$6hX(KJag3@Pxqov`;GNE>96(eqmkQq@ zEWHNdk>KFI^f#%`;*g^t7=y6Z#*N~~BkRQo5FaPt<3LFVNK$^xkDvAhbh2ePH@f$ zI_+lc`}5(zal|a6PagB*lY$8joH>qJS*Qw3;->M2I@~mFc`F>;Gi-Y&il-B-93vl` zaefQ=93RDzuvU48i2-J1lAuY z-fSF|NvN+K@wF8MYs{P8F=$rAZUvR_B744CU)e8^fqq=|d=a&@KB~e2Cs^y}il3ya z7$NbhBR}yhRr4l0I}pWhX~!!3tsjqnb`}0$mxsR81`mCNr-kCJl<)m^YfZkVs(jl% zKHoj7@@+-F+2tV>bPvhcR2(R%Xd^1_u-hV3Xu-NP(ebfVbW~A68#~$_15~Yjsu?|R z^8vKizuQUD27X&dwmN3ddrN9l(EEI~`$ zRWC1*O5E+TFDl5P6L9~>@{S9N9db9he6HgZfh9;c+1kk0b6;G6GkP*Fy}86XT9`zv>Ovr*}dNYg4q#3{MBay&j-y|1BruRb2s)An)B@c6vNFSS{<|2J9H2e0w|loMn;I~Bm4z7T%b4gvgbz?qN{ zh5nNMzbiDOjgP>)i;g-Zu6s99#&dE6x{;2p>Sf5cJLPAI>GQw!&Rg^4_f`Gr*pzXD z-@WRYRkzIVFMN%`nJF6{U2N_1kcyU}XqVo#(^tCY+!jX5PTBFOpYEH|RkSQcdt<-Z zlU9BImtnNlDVtZ%7cpO#(ON0m1q;p`9^Uk17_Du}hO6-JMH#J)qFr;<&G-GS{>3ob zgej-({l#~zqyKW3{HAE%y8g^B{pf%z=J)q~O_fZMUQompRQ3gxK|!IAFB7jS2wZo3 z*ZA{g9)tg~7XbD3>)!Pg z6xMV9K*1ZJ*=^90(sr#R=w)<3VrozQkZe!VW+*|ht)_Ii$DkFfBXH9K8oee4`scK z-qv3t`rZCeo^kVOht{ZRZ9}}1@Qpy{JXrPB?1-ui@=M=>QO%n0^_;NRHY#U1!92Ng zwnOXitMQ0cDtI)Q-nWCXz}9XQUD>~AZhMwfwT_6KD9>Kq%IW2^RhcrqXR(`uq?$SlR_0iur8yS7VNc3zcJduKNp7T_^&8U`y<`gFl^2hlEZsuG zc%P}FHFNCP)TU!Zu3kQ8E8|;SJP;JmcNs!rK$I+@0Ws1+oCHYX#54%P#l$^q<%(0z zQJHcEYTjqO+x}4nGTbgg|u#-VAeUl%1WdB`gs(pkIJ4oHK_qYA` z`~i}`4Oe|@K1t%T6)QH+FRV=D_n>5V?J$><7moi#>5ot3bt7Sov0tXm_rB`{ch!Ht zdcUmtN_sfC4<(r|o@Wi@63K##6bmkrfQuF2VhOlJ@y6875;?x3=HBHC9p2Z%bKRgd zGo`akS1zO~q>L%BO1ayCVM4j%r;w;-(e7@=K!b(8?>Tg_e4xOonfim6sjmnc=w||r z)1$eZm`4B<&LeQ26|e1orm9VPmxf4`mEvyy<99O z%T@P?N9RGo8pXRGKbIG?Z_)ZOS7%mPKOs>2Uv#!2V~y(wHWBY3?@3$Edy>j~ zyCByBoi{b)?8EEBB9fqDlBD7phx4$s&s57~)VO6Wb(VS=PnNXLkpNaMqn`HL=xHw{ zYVe!My6p?vJN#RyM*w7U>BL#{C;#)q9p?Mr34pGDYw#ZR5o)gTzZaM5Cpf$EZ{F`i z-UBI)?&#&usqU^xYpU~q5GPk*Ajh)f9J!xlLndsNw87`L!!ZB0xC*AJ!sndu-1yGo z`5)ZMJ z(%j0O^wcZA5YLVWMXt#v&87=ZDtA$kUAdc{M&%xQwp4yaPqT7AJ^5JF1L8f_H8JK* zQum|O$KtLxLwq%9aSB#ZACzbwqNn#77}{XA9NZ8Se^$%EPIpIxX_b+?ceRi^5nz>n zDZWIgRlXN5Rv8HCo)sApuTF;{6zv(~oUW8pG%rxq;=o8#`SxL3n3gxtlT1c=p$Zd(rP4xdPvNt+3#SP^b?e+8g^!_K%*<#x1;yFybyi$aAuV9{5$?BOG z1S@ByqcO?9k}7<7e2Bpeldc^iTdg*NM(K)+kW0(P|nRkeLNA3PbU|*Wr*v&f|!X56@G402+A#I z_L!%F!KLRRGslq3EN3drQ&IZTZxOJZ0@jSkCZ&6ik$~fLrU+N!^-~&#xP)kw-m|PW ztVTfjDTmg1_yeqZJP3M53enG$BJeXQVifvp^yBwV)z)gMJ5!C_Z*C;dKu}hc*(#3{~kz?r%lD{ zrns05!hsa-m0_O+yKA{se0P~Zs$KmxEe?NzDAN~Eq@YY47)#7Z3B*JUC9^D36+~Z+ zJd9ci~!6x4U**$VndL_aKi{M69Ps08VE5N@#|-{jWtJyM{2J06_NXj5aCD6t0z zXqGV}HK}<1g=&-&4JYH*#e=4+u`U7Qsbk2GMjNBWVRoV=6(<+?By8nCe7P5x#t_$g zi*}L1mO+PrUkx&4!H6WxGK71nsSzPo`d-A}8HnBD8F7^R$m(&fG!EkQAJEL_>%BON zp?l!DJS_h{LfK7>m*mhy82SOX?++b1M=|V3yGrHLNiP#}`t=URAR+2ZeseDC1}ljW zv>Lhbar}5BVuB+!L?V6=M64(1he1BB_cutec~Om@tkY%P{r}GWpR|XFn(etL5U0tC zJA9S|`>O`^D<&!PNNGe!F)B%VN0M%%Ew8uZwxlo@%X=GTJWiEScL}=;EhF(^5Qdn* z{=5W=x;8_(u(ZNaEEi%l`ACf>AIafGi%S5#gr4^5<2;%QVKck8(_2_xT39fcee6Ks zgWxq&sf){USIKMr$H}W2T#EW*^XlX+qTaF4KHB4IajbTKAGTaFOiAf<6B6 z=%`(~oH=QA)m#1wy6xFN0akEoo~q9Ma=Pm;!n6W23QFDC?H2C_sQ7#E`?xygytMcp zGB^>FD}f+U`X?xC0gGmr(s7)e@VnxC-|Q?wa=BPfR@!mQ8*i-VQ^27OT};s3feA)w zkj55HQwq|ExpF;D4Ir!BQ8M_nAlUy-eJJZ=<2yZq@B1OXOLZB3Mu_l7^=L*Hiz4Sy z3YF!j!x%q7mRG8zXNJWy{X3DkF-W{Z#yKk*=bn1Hsa^)19SMpxnErjh-~||{TsvZf zM!Vr8#nJ!al ztlT;ks}jlTaYR}jP!=#?O|)=NA=3IFQh?~32%={Z=Z=wx&W$4a10ww{$_G=MFUsJE zGBni}_(R%UWs!cYSr|yh~c8HpDR<@7B zu?a!-GCo}IP~6ceai1TpF^=HBf-KrDQPf^4qh1gS&1?1O@erAY{!sKT4CA~BEVC~e z!I+DpjQJZP9dt>pd|n))`By!gQsBcI($)RPCf!kle@540qhsSf3+K<+dm?oaoo?|c zf${pzjNu&>CwKkDGYQaYUf^FF)z<%5Gmm$)r?4ZqLHl$;Ikv@w|1=!!(PV_2Osno3 zYiQ7#abKm($?zv3!eaH+LCWR=d9ryQH2~9#04#{J9YahIAhHs&Ww<>J1_uyRW=$)9ZhPE}6sh@9e|I486$Sc(z#Z@gH=!ObZqB@@vad+z5BgU;BcIbX)*Z%@?-A?Zp* zBxfr6JK!~lX*spmm_omj>D$ZESQm$R49*b4P7-4#_WzcMzk>M77arR~>E)((y6F0D z#CO8V_K~R#(wnrRLU$F>qAl+1g>%UK#0=ezq5jL}s=wQ)ow3gMS0T^!b#z~>^1zWa z+8g`!0&*B9j;~`|o<7*{z_>>z1G1FU-Z&%Sw0F$#=6q8??e2z_VQU|ZIDZr)PCg~R z_EuksITukvHbatvl++lP(d!x5zxhruKB+aD10X9jN4{J1iV4I03cVza48Nr8tmx;n z1t>;SY-{16j+HGeJk-kKMyP~M4-t+B8#2Uto>lF%D4yd&+~(Rd#2AkOX&c)y9L9gO z?bLV1ztU{Rap%I-)B%}2e{`E;`5oXvb~`(5eZ}g`77_~&wQ&bdecFzT|Gz?6Uag!h znmx~?W8xLAb9)|;Wy79qMubDd_V&E{BVI`$QI-`@t}EsLlWIdI~kj`$?<6`;BlkE{9Rai6dpvr!Ij>~hHLBE@-9W_f>3-#v6jAKx+Xg6nXXaIQ?-HvujRodmgM6@w6pJO;oxS@huU2=a{aAB^Kdg zuq>t~7SrPKLHI3;!QyiXk;?_Sl*koC7ORP6M6P5cUUNdZTXwF$`; zQaWZhk46{&ANhH<23}E<@2Rbw!N&RCA|w~&=aKe zT9-3cR^pL0pcTs}HcPw~)K@D<&>>+Rrf&HFv=$3$W)8mKi48QMyI_qF9U<;7>B@3o zX!I{_Y|+Dyk7q`Dm6S!tLH(Il>aJLk&uW9inpG_AL$ahuT1c$AHLp16qQ?^hXm7yD zEJk~0|F@VH)f&^HF}_+^{(DfnRZOJI>2^naWEwr1UlY~n{!U}757?YjeP~HeIM9if z7Slt%F(QH2yY1w$Ejm?fi%uEaVl%cq zPEmEIs=3-@>rmP%>{)MqO`dHl($b*WRO6GWz*Z7Q(Gj%a09xI`@Ns=g%bE|OAS%Fq1*U>V86YJgVl0Jg*a(+o4346SP zKQyx5nzcS9i=-yY`)l}YBU=|y8H~B55x*L5o6&F1O?F2+KhJT*uR(~H$0@v~b}?@& z-0e1|_%Up*VUyJGBwM*XO}-;s%vC(eR6NU7Jnp6q zaO}y)Yp8gNsX$;17k-KfKZio>tr&Ze9mWTI_iqf0B2?28=##z3vJCV-{Z9<}(B5p= zq&wPm)aiiV!b@)a2O+?EmiL%yXxQ`*NSPS#;5 zT?K!Io3NFriD#(1N9Y%gjTI#ykr0)0&OM5JcZjmGlBhd30n*P}q@PTeX3lgP$h~4Y z^_g%t0H3pPK9w$9CSR!Pl*yVZ%M6h`tq~$ehF<4g@@mi&I|83pnx1r}%A5ADn@X!ZT2J`@=x9dqBDtF793i zXN2tiUpM&{G{U&!mR5KMOqu}~zN8c$N&D7S09!z$zjY7RVJsOTU*WruaC-_@Dr}c7 zZ=jCDWttodWC#)sfz`gxWLTBTK>S5PKc}t13HXYcTd7&(o4=U(&#)=T*0Nu~S2S24 zs~F-h8Vo+r{+R=D+panRHxwQ)z@`8Y1`=*4KO+zb)}gcWfZn|sk4pD|n{PqFHv|b9 zYMwJ-j0qY%yC^l=EiRziyKg;y;)I&l4w^$W)ktkZNt%&}@co(h=B#gi-e)(|UEk-k z?#-|2YP|R0q))n=ulK?UPPiBb9bCD@ih-9k@BQ7)Ij~mV;uycje!Jb^&dRb$us!H`a%owMO$X7o%|;|a|T1hir`(x(rlv?*22+; z%yXESLs43Ry?!lN$C*`H5`=}aqa^6_JIkD9B|*)6Z`oHCLqvDN=o$2?iMQOihc?a$ zmkj0l$&kqSmRyFY7J6pLDS z?g%j&Z8fcNlQnE0kb@PzruPa+WtGCvyO&uKaPOT{=8jERV#$IM_wt>-+>plCQJn?z zRL0?~R~lV~&l5n=h5NCYSai-Q!*|e96agf!-t>SI8JL5d0cVV#vl&1*qDgwaM@{Sy z1{HfHp-))i0(Sy>4EGse4!V1kl;Q?tq0$0x0FL3(VMReB*Wl^mpkZwS4Ub!PKFL+MTV6MrtS6VQ~9xzN*C0-sy^!HUJ!p(3^z~WyOYCP5o)pXW|YP1i?=*%*# zVHycxf^Gt2Zioqh%Cx4GRqBitd@fp3*lbO?WByG;el5iZ*}~kh)b{5<3;fGB9B$JuDj&?j-?N7PAJGWtA2e-0WcISTdkQm6)L~4f??} zADHMVtb>bH4_E^Y92UA>wp`WNa#e5kQJwR91iax<6QJ?&-Pa6fnX8Pq91pr!_$=@S z3>Y16g#_3c@PdKRidmA(#l9bO$UHqIkG*ou@+bG^Wu<*54 zex#}!)aOfXu@Bf>;R}DCA76D&zE7uT`08`=19p!01s=l5&lvSNqYkjcK?Z)w4xh+H z11>3&ds4~0sY{A?t>o6^dlnK_dK=_*ZackyOm;f+V6tw|)*i~u^ur7vQIvKLza!U4 zNoJXvz(X5*IJbe{8E#+K@1%`5+B*EsTo)yCZDHmTXAL+)?G4oG$kiLn1;T(=Kp!7C{Hal$Mqlr<@l+;8P~IkIG5D z!>IkF1%JjTE9@^_C%@)+1<06UtO)-!C5T4B5>gO$+14SF&B`Awm;Jqv(j?kr{ z9NZxm0~l_vvxK2#m3Z`U`#!83JzU)OER_`oX$BS-u{Z(1LxjJf_V}zNrbJiy5K)*6 zG01JQ)C78CFN=+DP^1-cP2OD9?sbLQs=znpL#fMEXq+JU??|g(2#Mh>4ZQyp*gbeq+&A( zb$gcPeY8>5*Vzxj!5QkdgtD;y+j!K91NeaS$FhM1-7HH=F(qIsHa5J6i><9Je$b20 z{-I@lXDn!hfpaSNBB3kaa3tkl)dHbCO z8+q&@3g|NJEL&u$9fN1I9mbB%;;a~}@hrSX!I%R6BDAdztBOFKlqv|+>Cl{|r57;s zJ7e@U4=E34r)mPbkC%l3w~=rJVU(bKV_1o247Jq=b?0VkS^%3T@LItQhr7p0qEEo! zlUv7f8u|o1NQu2Xn4twS@RCOcjM~LPJrvA@itTVoZV%V^U@!m~;o`F{!xg%=|bF|%D!R5uO0*#6xJ&%_B$;qpCpxjXDvD( zEi6SP2^<{H{8&N5!yV4ZJq=0;1wz_c7pk}jaAJcpiwPCYS(2`3XJJ#7xs6+T6%JtEIU6j~xSOL1;&yT0MWP@Fg30o)yT_&e}-rfs19K%Xah*-(xpU z;^s?*(`?MQ@wvsIr@kvtzpOaeAW&a}IF7Z+?avN(4>TwaHU!1>i-L{PJa06oEYL6} z2r#!S&>&Vcp++ng71pz{SUB*h)|(Wvy|F9M7|LuCXpCk4PqCKSq&S!jWj4m%6*1!! zffBMsfsrgMun87uja-E6FuCeWu3BSxCT`lFdmY%*)D>t7_B0DL1$)|FVH(q{IN03p z47LD+nqqW=EpzkJBGD4cXfBFu2_Xl%8I_4#EdwpEtQKuvO^?j&V)(qb=J46^Mm^L% zaq@w)l^FJDH^hFeaXchMmU7#3&@AfoPyr!3TlX zkZv7l4P)XCD84HnbK7@x@tLzYpqCZ7OM*Fp963>T4(XDD75MmKkB)Pa2ZHKSVYOOT z%$5Xvm~*Afd+pqOses$%@J8&yFbhhKm(-wjHYcxvhIAUu=QQoA30wlf*on(7dxv^# zaML=#FpBFuy-Owb5uGji?6f%3u*D!9gSiuj1{WW%Kcey4)#Dr#(P%BCaZaB*%Y38) zCPk;2G_SO{@hXcvy=RhTCH5Gu+XIdC7GJ3$dM2%~! zEGx^*E5q+*k1>P9Qp?bq?!|&9} zVi_<-jraIn(Czf%q70~fy{tIH8S>^{FXQVoBkl0Ja7F|_G`~Bj=eBYC!S*@MfHo&q zR^$sfkc2^i19)QO*U)#ThVJRu^Yk{a;U@iVoQ2IE=XVy<@P*fT{aV3I{2Ckf&D`2; z*163(w^>^0H7)n+U@}hP`1Sf6P#kc8ZBDe!>qd%fbu#1G!_^Mjo1c#nZ-S*@r#szD z+M5Zt`po<9wppTTY1Lq{1{UjnSRBHMFTMwYW@~eBcQ|1-QD8ccxrTQ*1OpiFG!e!G zBQHW4L0Ltn9){GnYSN0r7B-zekdXko-WBUnAN4E3i5lB zJx!25Ah|hLkUt`Mu4F!pr0s4&{)FTOlKdITS(5x8lKUk23zDZz7v!%WIYg2=k`GDJh2&3?bR*g2enA>Y-Xcj4 zl5a`Ui)8(3LHdv!B}qS$>m*qR$=@ZJfn?8Ff(#&OHo{CK?~=JeB;S!_T_m#~5M;en zGL%Y&ksL3{EF>S7WPK$6l4JuU`^*+(LnLQPvJsLWNwP7LE$0Zb36gP1W+S;tk`W~B za|PKH$%`b}49VG&Y>wn-l5Bxw?mR)ZMDl7$wnB2NBwHito-fEKk^?1q8j#t(=}qbN z>q_kF%PAeMJS5Xum0!zr{mO4-x6v&y&9v3~h`bZk)m6CE3tyBFZGQF&`R zHZJc%$0p_d>6q;ksv!GnULh^2EPVnqdh*U-0d>AFm;?c1Iapz1$k!b zu+s&}Vwrmuk`GFgWy@(oMGPH!}~zYjLG!L<_km_%>wS3joUTb_A-Rg163 zJvGtG+#>d|RF59c_vrQW>+0Eq@*Cy0R;fQTmQE^lL`Fna>Q#(rSpE@|%QW2mC|-^> zUk6mx=$qgN=^=~TWOC#Of#CIAjH^m+CDB1OaXH#byHK_Dl-FBoehQ1+WqT>++^5IDsf>$$U<2FusoO~6&Z2>b0?)OA;SB(MWZv0`JMKxiJ)GaB| z+bS94O=y^48OEE!Z~+YGzz6|QqMt>H-4PF=ngMDQ&iJ$lRFiEO{T{cWFvEt^m^Vn}qYB6oEo0kJVwL+Gb`ivtJ%#>L#$N9^h2 za`j7!_f%*6bms*%AE~{TRR~JNSha6g`HZeBd;BgF(AJCQ$d3 zDF$v)La$NdyE#0>Qw*^$mxJ~k&8Kq=62!e%4&$~OflMX30|m8;D!f7dX`@dwqPYsx zAPm-3`RefopDOqeti|@sX|5~(AGMdw#bhYaK>HiDe*xx$?-PY6%s$roDow|)7 zmFMUYJLv1+DSuCPDm^+CH!_LA9P$&JLl(gt($bz>f>Q~?M;N?BW_P%~&En;Iu>dWL-vk@mity+b0!Z|}hQ;0OR@szihEc|)G)}Xf? z`s9ehqD6z+)EKjHDNP7v8q|~tr^xVoB+Yoda4*c!^lm;5IJD>MtH_qA*rR*txhm#u zYs38BW36ShPA|iuw5l1G|502h0&=e-jnx5*MeBbPi`J)#g_HIP{7kX5iA-Cj8vhL+ zI68`Vd~{bucZ2V94c_y8t|f2$cgY#j8RtmRbm=Me_zA(l$_u6X>u^FVR1Cq=o5Arv z-Ra0*rW%^N>Vcm5R$JnKNK2&9Q7P1y^Tm&)>A`wxpVB9eOFiLXxQACc%gPI~WAq4Q zwSvh33Cj+gNwKbRDyM_a@wks5?XzS!9h#knAvJ+ac8%f!CsP%ARW96fk;l^q(No#DMnP@jN*;OQ?Pn)qXOu4qO#7Muk zu+*?zTfl6*wotxFwqR_NFWUGT^1w2&w5!IIUYiF6Im<{nEyATv`L!~4Hj>Xvat@N7 z<$|1xj*XtFphnq`=$MGqL} zY0+%MJT01In5RW^4fC{Uo?)IA%{R=`q6LQKv}mDWIW1abSWb%;3!-WXGmoDMC0DRB zq1h|gnb4yv*qPAg73@stgB9#d=)ekgCUk5CI}>uQWM@Jx%K4d4)0O;8D0d}46Y7eI zs-<$B+*htO*dCT=qHSY+k ztsQ|>Bp&8j4_mVyrYuy2+k)aT-jOX6$q*_Qh1OVwkjVK`IMWBsUeBytpX$t73rfzc zCgZI|B`Nvz{#t+ST3j?7rg4P0w6kd%{d6k2Z;TF;Bw%8%Rl@p(f$6Kkh$e07lf z;ZpbjWYk|lRC%V-ZAXY@>Ti%f3WMs1Z7?Z_A1JGk+$^5bhFcFc#4 zrVq`T5BEzS-m>`6;$Ql(Bi)Br8E`WK5%l3T?!&9;KJ2LB!!B<7+x)mY)rU@|4+YGJ zPoxj~Ek1Pkmp<%D_u*{@+=f6~^kFym;q7!EcGd9VeQx^){Pf={|hGfIAWBhCY1AefS{Vhxcpv@Hw~r06%__>ci=#50^3@u97~ee$$6R z|I&xg(|tI=fawVIM<2f6J{(B*;qw|ke8p`)#E)O6`cP>4FogN=tn|TU@nPt{^x>;? z9}Y3#UIb$3!`Ix0L+L(zRl|qhxb465;~%L$oMHM<$$W6G5BFDtKK#Xi2N1Xw zeK^j2_$%FqKWq44_b}TX{OI(g_|V1l;Q{8uT3>U9vp7=;zVc zr5!zqe2kl3zU)FI3h^_wI$HczAqy6C7WK<~>PBVpGHx?{Dqvvzc2DX#35x;ezr*Cm z_JZet-7WgyH1h7$IM(2?ftDIPa1x;OARcrk+`&`+#c=s4i^Q22mv)(OW&jN_`U{P}dr4re~0@GiuRwy3lp) zsdc@Ny1qbNr<1PJYtdCGbUlA+U2mhVnW(FfbQOBU`#m1eHJbLy$M4Imz>bn19W3?; zW;}2ffcMp*e=o<&3eLLyMZ?kJcY3IeT?P_fm*onc-|31%HRbkqQTt=3wmM$Q(8G9D zLyx$WJ8q{G8CmXmSecY*i+-o@&;3+(2c>3fr5}>|gy^f2p?i7na}4ntxwve`+NATYsvR`28Lnf$P!LBjO7a-zeZa z8}x*{xh_|@sHL}IzE{QW7lpF`E$_R^TVeRk>lM8XhvM7eCsOsm9Hrt8B=3Zu%DY5H z^lto_j+?9(t5G=d&|<_}dbv+?!`XUH1JZ@VTYo;h^|!{OzZnnw&b^0Ub-2`=Q*e*- zbI9jG9(;`0quZkgfPeBjXv$u73ZgC@pG(a(G`+(<>)z<;atBW(hqrt9ly(_E7V%@T zWxT~YpgkB816Uo*H|t;|1MTV*bRa(0V_ssaU3S4qW#`oU0OQq~kmcjAm zC&5>wmvx(Hhjbf?YC|?wl4If(Z{t8xYysXypop41w{oQ%e6-|c7S0clb1(rFFJpS3 zlu{D|se4JQ`m#EtDcm04gG1Bjj47{iipXrsv}Nk!jg8;PNWG8o(kbs_m|Zl+$4Mu> z#@`#?gNznq(A|_Eb-7i zpUchu)Iheu%PB%7tezH|t?3497PKi;7+;v$Moy|{$=~Q%R9m}dW7bfnVUDQ*7Bj<8 zb{@a3-BVn57S%G8e0__qack4p;N=n&2zhd|n5fRw>J@O}tu5oPjDG>9v9FY?Q-)JF z7=fleC{4q=biC_hPR@OjeI&7uqTkUd^pI6(Bo`XRkE1Q)hPcKlZ68Ci8N-}jYw0Fq zSvSF)iUZg+uHfp#ajbQ|V0FONtgbmM7LBsO%p*@!m zf**dFmTu8LK`SZZVxN%J*@t1gOtU^?e5OhtN{O!#B>;dQ2GQ+vEHfQ4TgdS;KI}R^ zTYn>p*WcHf#`fc=Bfj3cVjj<@l=0RnWxP41U<`0i5V`t2 z+SEADt7;XWV9>8LvwnaqI6?8Mdc`PQ9!^BFA5#-$d;}tmM8%)Bj6h|kAxirF)2~lC z?%)^Fd0kJm*7f-`{+F`4+)%Tw2Pl^ON6h^D?3MT6JiQAqr-vAaokolJqqX(N6g`jq zBR!9&>uD|ZV36B*%3pujT#`>B_A)62$gPP)wu@Fl*4fGnN*G+ z!3&#>uF{^@ka6KnqN&!obt<2gZsNyj{CG1z-olT!^5boI{7|+b6oW-6N~z8yGOK>a zjPc1^St@xO9i7RWQ%Awud56TKoqpqA$#Z*b=a*3XxSh3+gC2T*MdbCj=6%WXIx`@C z$YVa^ks;5oIPce{9$cFYu;zV3c@^1~Yh4*~?&3V(rrME`_Z`bKU7Y6;_dPRYd!NU6 zzZZJgwXgv)57$UPq!^M~7MK6ol#f8(K$2g~<$tvdSC``uwS=uVoC^B2N)fy_!aCQH z9j5C#Aoh#wgIDjyD@wBsUcOUlmnyfSb~#m}1s7XtEfr;^$*w%9>^ms?0?IBsiR`MA z%I-&52m1QpNn}@_RQ4dsMp1S-YvIv082Q0!0)1!$Jt&_h1@Z{cWgKlw=rWEz$kBF$ zKFHDK9Bof1>5r)itdBOj8j9u-yhOH>UhhhQ*vD1_BiAErAJ4&5{u&Q|R`RH{u%frey5HxZRK8;-Uw6ru4}6zd`E0~zXl>j& zn+wA^TI61bUS(cc4Oy=8^p^uI~hXVQ=TH|YjU`tkoJ-H=H?@!zByG3h7&n{;C){nUSxZo;IWM(K;R#Xm*z zT)@&ArJqB-itKR_e4{@e|`@j!O_ev8m`BgL&H|U7GhteIguVA8HCi?7uD3-U*=TLOu(LWw<5Sei{ zh~ewA^|Sj&@G}D06SISn`B>_oX;Pa}YRBmI%_Dg*enpZOiujI;JcWm=vd3lLkliwS zthF0$A)$+3ye`rg=84E_ec@*jYNxUWWM7m$ATpN~dl|{GPsoz&R=LJ7$Ng<=+}FJ+ z<364T7SXv^v)f^ z{&v7;p6Lr}(My57V22oI@!MoErtAEZ>&i*d)rcF2H|(W>x{DcTEoFV(9C1yu#3ua5 zvD{?_Kw)+?`3Eu3aeaqy9a|kWZU`8k%SANq@tUV%Vy@iAmW6_RfsOLdv$aG5$(#ap z3ewSf-jrGP6_2<-jB^pY_VEh0{}ppCI%Fs{pH+B;)$_}>tz&lZbxdvdQAYpG+QfRT zdIu}RXNK}+ySef3>CNrtR->IljGbR(^m?u5!`6FZTxT6q=g<^Mzmyc$sV0yuA9+%) zZ)L)o3pYLR&~>V|wO!vzmpk|m<;qCzff~IQt1gZWx|M1V zMJHh@U$r~3M@O#`{qP)FZ*0HvHF)3XJ#1n2cmbZ>?7?&>TH&FmyWjWF`TB<*wvQCH z*g1Ia^$u^0pLqCvC`zzP52qdntWP1n;HsLe2B670C|~20@Lv)k>x4;S%vB%R&{zU1@bV? zgQQpGF5y=Xc@jUu7i&_I+>1(FY66e3=~v_CS8pQ}PGX>PaM6kFq>rdi9{D^^`JxT- z>UQ{eFu9AYxenu}9@nPAv0@iqd3qbY*-d`nZ+x$fUXl`e+-iL;oMZhqZe4uzKZ#x5 zFh14o@rMlj{(N1gC?ty0qLuvmh^-M>r?@?e9lwpMLfY#WV}qUc+8u)TR4E{ApRrw; zqk3w%Z3_itB?P3bq|~FcmQj*bS~A{Szf_NLdc4mbUuNK4QhR(Q#+Q2#?r@Hp#SO|m zBaGY9Q2Pk5dUJ>3_tW>3b2V4=JKS%I%Vl*42b_5>HQ-0^vE`@<>|t%P7@%qix=?VHBfkj8VwLwq4A$XFB5dV>5E|W)gJ5poy(y#(2Frs^h1l zoo!p_q4p6rY|)u!rpkEqihdB;_y)Wh?g==uhGpdkTs$k_q?b{0{U(iDa>234V|T}A z;oEi0812l-v=a(bk5|lVXwUgUjV7r3Vk5yPWvIP6JTfugdb8_rLMndpLiG?q|A~l3h0$ z_2RUxCOg8BpL<6Y`VMVCozexs!~v*w8u$zje1V-Lq|F%5-jt&G9M{_;Y$-CvuCuX5 z@e676FzE^+hv0J>nm#12QTd?_;>x~m`TF&fIAUsgiPtq91#p+S+`jIBqc&~J@yB8n zJ@^rD=&{nGifa5Qd%*D^i4BEP#TV^d1&_LM&P2~?E*=T(cqH9Vs*7Jw)v`nF&erO; z^J!W6S8Mh2lZ8=W(6T*Ub}4wwU|-$s0Ds5$AMVV38T{eXxAT;|$|aKBiZ&bUQEqIyj`UmhQg4 zCQo}z&t~aP7M`;p9i4@bf2q+-FMT#3_^#&td!*}~~ zooa(oyM1mgd(ep8BOn20pkiwNEq6_mX7mtkr!nM?MjOT%s@6e;07p(>$r>GUB1#o) zQ%u+8KX$OaI@LH-sb-&-7y(*Bjzy9lg0!S!Kskz{5ui+#;VCSaTUbIqSVD=6(U9Rz z5pq{&*BP~lJ{D2G;60f&6vvM0tdXR{NRba!r;y?5e7lybYGYspU~$oNDw(Y6d`EUw zu9Jf3b?J>q;kU)DWoK1K6wnd_;~*=7_W|0ogE!X?iCrg7wAJX~m2$&S&b27D;M53_ zv#I8%FobI|)O1&m^uYc1oOJcYNDEn{ikt08u`8_UygnkzS@=O{tIgHLl$Gj9xZ2e| zGZk?y%59O(Gp21IjcLpxN1jfR&9#Nns?LG#g?+h+leCBtvPGmaRHua`-=U4kwP~i0 zBZ*5oZ@MxHGjtbsp4wUCf~k#sxxG>gO{K!c)r(Sfrz)%lO~pQUsNFMJzTA;19mSnW zrDz&nv-zjw4^7D*mQvEZ6usfLqT6*OF-;#m~gecq&?mdMdNw!+cw|cGF|`)u@CM{mJ7r3$l>u0$k&p9 zCPnd1B!$djCX7ts;$cC9>yYSZt0Y5Jv5M#bmap%?YQi*x)mE?{JL z9~RUDMx#;nhj}Z{2iF36HGWVoYgACrErk4R%5O;d=b8Co%+G@SI+Wjl^81K(?Xr6TkrlB(V_3O~2!3Ke8jp3MvhxNvgK ztz*(-u*QOJsob44GKrSkLt3;cRaFlBp6P+9y0SOmF6l(r>Y~prK@1qJ=~%$rbb$3@ z1|SqN7P+9K^4xTNsX;mCBta=+K`AnW5>5?DI3+0AMymdQ9hI;pDq%N|N-OL)5l6s- zP1mD`M~+)42w2ksRk$6`Ln(TBnJIjQYajW`v7aR<zJw#?x3rF{vlI^L^n_ErWG} z{**viG9l+*2SSR=XqZSS2nJ=ckYv^#lFUHh6d?&%LlOuCGK;ePU?rxCF;yqvPZ<^X z!od}4tGU8OFeSTuVJN*-R~FNxU@tU7qw*rgpX;i;kfm_L zYZ%j(CxB2PB< zIBFStw16ginWH+OS$i4M|7`5ZYe;LoK;7X@_`HF7g7pfo#gBE=Nf~!omC%=T+Tu4x zpjOm?;fr*{UAV2ImaLApxY2zUZh?z6aWR_a!J6pDQo$gNdV!#L4uYpvbI)@H`?I#og-*l1*p*z#0y@n{B)M;WPmr(VpjeKnarlTHn<^NLeL>;u^u9KJ!q*nzSm9G)U!j7@!ph9fy} zy0NHbR-_3mM;29KMK<69*GqwOE$Gz}?QJde8VUEY7J9RUak-M+gTqx4##K(Xm&273 z?rT*tRl*lo;iQBww8Ga)_#%s+;YC&bEM$FfIcrfB_6NKybBUMV%D99B{RPmU0|Nvw zfCB>sFpvY63gA)>3=+T~4h$B+U=Ca+fXg^gB!D6g6bpb7{G5JE>V2H7>3`T1wPmQH z3pAx=EyL^>Z4bX{b{07tZHq)G+8Uc)r0Q8k>EKoyMcZK8Yh#aW`;dUf3}|GJC`Sos z!T?YC#z(~c7DsqkxPz{Sqq&fS7mhn*s!{9&P4eA!{)Bh=#<8J^dK zD1I+*tnh`^OcGC9M0%(tJc(ev1hwHmv$z} zVkdgVz4ts29*fs@@>)l>FKjdwKhIcK)#Gzj#n47X?zbs6{>fA|J^(x_IH2WRA@9}R zN}kRG-sJ75l3gbq4?4%ueKyQD)WjWd@Mw9O7S3-I%2Devxlr;>9G?sDTYZ>{j>0eQ z-R7kmPskCLtd#FnVOc;jjMniApH{Gq_Ul8joCX#1an~|IqJOkEmb4}Nc!w-Cfu@qt z9XwzJ6=38BLlx(H=@tu_o5UY{{VfW8*6Q+Irpwcr%XFP?xTwDbG8oL+JaYCf=Ijh~ zw!Nw*Fi|lSeZ8CcdYAB(I4R$wLd;2o(RfK&D|mriy*t&_yJcPGf(@lMVFUAZdWx@i zF<l6UCi=OD`MF#8NvxF5 z>hxVn>(RT-I^C1%=pJjGmPuQfpL9ACvkC;9mlRj(8=TOd- zRL&7rr*19W1wR@<{*qAQPqd(W-MZ?O<6eB^Bf48vG=2KHFv564zT7hy9$f_mxzz-v zp{eAGi}%qh@xGwL1uLiM0!U6q!DV!1NiTR&btO-*s470%@-#tY0;zdHry6i3kFwAn z5uqik7zYFv4~$@zTxH3)LUJb?_(+PJ|f%IcpmS+ zFy4QPc*ni;Dk&QiuTc|0vZyZo*7K#@pR{m=C_hZUStsSHPx%e#w_)vE=|_;dg!uc@ z?||B+D(&&_RJ@fq5b`^~!uSWGE(PkiEhm(dU$GS2sv2b7;20L0KLb~jSdL-Ofi>Pj zye$F8MXE*dN})LBhFmZ+)DTuyEbq2Hk= z4b(8oA5Om`PRccs@<-9{=v1!!ibv4lF;<5Q?D18|fF|eMiZ5IG=n0~+cyKzihKBR) zp@;=NKTDNI2keFeC zKqV@<$EWb`cWB^NHuXi6H<(_Jnm|2Xm@DAmQxnJ^bQI#fJi7xwuOa$~$3+pL}rmoh`$~8O}3XznLO&tqvICz&a;;Wrej8-kI1F765TirAJ@O&}e{r}@+=^RRn2~3AO zuA754$FW$%O}^UINn|*ZDr#vdSi~a zq>aYgulab3+pH(i2O4L8Or786n^9TlGv{1ZNBi0xDrdL>A}=R>@fc?mT z^+r6_vBfWtn;^?)TuCqGXDaav&3%34lxwH0)99HBHG#WuQZl*dth$T#JrZPNk!&M~yc0ibV%j{!U)`J6Yuq zFwEzaS>2OP%7(fh_;+>xR*kxEk5;~(TKCtIo$XH*uh*HK?YOU` zz5Wa=&R0s)tRpoYx+uhDIa`||DCU{8onmc(r;3IO^~fg=4;4KAD@mK ze*eS?daOP94Ks2I_mwn!E86KlkpH$8`R}alJVn0tcK%&0I=(-Z4!N#;^NlyUG9BO7 zqT`2C=}>yq(D6epI(|H<4&H9k;_+iGIu4)Qj(KzEcB>JO!?o!6>Ew3o(rdBfr&@IU zd~!Q52sP~ZxfUJ&J5@|;8B70Hi;iFZrH)@}(edjkbo5xzTk2TSlj-=?q9g5ny>_g> z-C*{&z6`X-ua|ukJ1}A?dyL{9IS6X;Yiq1s*#0A2_jRW3ehh>G;OZJO39HOCf7k!p z*XaMZV`Pq`&Y4pvHn+?8-e8FhUzZ(WvAK=Mm$V$U#y4F@M$L8o(OPsIJC%+}<~T6v zd8Xr-MF+;a3m-7Muy|F~h!^RkY>3y?zl+ydHR3f3tvrz$uO!(ytG0FhHa@qXV0Kn> zUrCGNvH1EAbSR#hI&7!VVV={)GpC)&bl7Uqp`KjFwOelNUPFg!(Sb2PpU3=s7W3O` z#GG_eHpKk)zl(X_)R>zu!d~F#7cj;Bw@T8BFmx*1)gtBo8{%px+0QTTzhNqRF1}}Z zp`R{JAxBuUQa-!?)=$!U^c;`8|Au0gE0h=dEtlV~QQ7-tiA(4=?Ikls={2x#FPp+1 zAo1e)Wykz>`5oGIXn%%6qY8c(W!zJ$(!5ep_QJ91R-4j%;NOMN^b!4%$b9c=5f%D2uZah9kcB@Gblm!YuX{@D1U< zBvGfrcu+1A{xp<>KTuEif>p9A`%{I-KvUXm0c}wmq^h=xRK0B?RlHeImbS7fL8VWQ zknl^sKOuMfYl!^`*yLX@wRnq2ZIake66+yTLu6`+X`1+gYd(2qan#HL)^19Q)ow&X%CV$GBh61z&qW&L`VGL(LXjXW}x zy!tlo+w3_qy1Z8RDLb37mSZT#{}3^7%37%B6seho%#Tdvi*+o1nabwPBIV&JL-8L} zINzoF6=iH&8$_tleipTma?k%*s+BUC$FGUfXn{ge%TXMyY&>=0PJvzUHA_M43vFD> zAfD2c2SUuM9A$2QAzK7pb$BDR`Ae`0%g~fh+$>gxGK<%FNO^v;(D&s7!oI%_DqQp7 z1*~TBmEWQ5&3+ZNteeZc%vWZQ71&DO;;k&zS-Gmprrf1dX$wRd8y!O8 zyaHB6rn37hCeci3CtK6d*M-C%KGAl^$-Y(ZsAyqVG_rAj$F^Y6Fq8p11>gA{ZG7C& z=LsxV5!fw9gw5xCD0<^ByazN>3Z*TBHj1A2=;N$r45j}F8^;p+M7{M~EK(hKs)^zn z$67=aW!=jPPt812w5IH8!PmME<7;kv_7^rUgp~cSigr+ZL|Cu16w%lzu_L-jEtS2t zNgb9tQ~7LxsJGAeixjLFINuw(XfHQR5^bZTp~yY)gYdkp4Qr=4%IUIKoIXOd_M37< zs%>|X8Yex!Rr;IJQ)p@RJ?kGi%I(#nr!dy(=uClZR+Au|CfAf7j*7yIcRWrmWBn@Dd$&WV~xU((}$gXviTNI%kZi}d|- zOB5@m$#DMG#; zBX~yHHdE;jLg|Q%P{!C^B4pD20=bSOABJokxg8PEqmN}se`O9w_Wh!8WP$B{LY@r^ zo+Y;L2zh0JB9R|h>pdip<+fvr+m@+x&Sg>umDM)GhCJV$&Jee4gAFDxKo;1A=ErPx ziRZmpLeCSnu7u3GO7J`h-4QikDK&4jU1~$Wd^ZWdUa$=(sYhiDU*pKx+|&Kao3;sr z43IoKZPyYqN+P>#RfK#wMnwK?+iisWC6V2>>4dBtE08_5YC;Z;6?)#cEh6M%$@78j zK|*#*?js3QlY)j!JY8tGl5K)vrY}*Mb zXlIkimxN?|X7V^xL~i}XM1q7YuVYHpBwc4bn{U*vy=oU#t7_At)ZWxCx>aknwffiA zsu3cwRjJrpv`SUAqP1txR_quhwMP&;NFuW2^}g@#cYk=!hv(Zl_jR7@JmlET_du`uQfbH>3sRU; zqnv&X1yqV?np={Amg>d%=F>jBYn%j?E|bPi*&DW zsv)k=5Qn~+e2x*U zfpFHwcUR4C!4kauNdJjcq{Pl!jBpBYCn7CFUVt=y$Y{Gap1AQVeeZXOC~Dq8Z#yFK z>aOdVTGDnzb_N>DvBrGm^7^TnUzpyKtWjqx)cxJcyo2GVzLcNmG4037K+RsI3gDw zX6ofZeG&eQ?Oox!(F{FWwog^0wYmZF(o>}@8kaK8UlfEs8O4j=?_-FIj4a_hc7?Fp zyf0L)$QoVb5jg;E3V1Itvmd#lY!BwQcG2CW20-n5|1OaXWyPJHki@@0jOG35P4lFd zSE(g5@r#(Ky*S^LdXp`syvRIVSjEq-jz>9-(|U!}33(1LgDW2}6Cwp77B2$=*Qy87 zeAD(EFj_p~&TKa=T?|T5dV%mbY{yDXi%==?3$``Ry?pN0EKg#imvzP>6 z$)AkELFGMN=`fdgh#z;!+m6uOjL5tG4*j=h%H5~Qf=93N(mJ$@GElk#jo5KJju$e7 z-6?s2;JKiWn5b86g0x8a%aM~$zZYdFy?5}EmevH{ll_^M;b@%gD${ztidhTW6@yXQ223#>{Cscimn;ke1}~EF0qoUTcL{GG zN&S-=MC#_mzGw8hyLms*?cl=pa}I#! zzVkV+7QAnw+$UxotEKsvU>$J2mZ! zpf2*2ckay2q==As1~s)4w$UxXr*aB#W8jYN(b1e32*uG$Azd))|;E; zXFOm^+;~7vOjtXZ!2CmP$t9F@dThGDc%{AKR5PmZcg>Bnjyt|A+4S?cc)+$MIa=*z z>z}~n;oDxEP$EI@cSz^o4kvIy#xg@JusYyM^))kTLiXv`bb>KX^NxWvp*d7s(<3qS zxC-}5{innfamW4uY9~`1OrLpUG)EBK0(41RcouGw<1!3nR|6%ktnsF7)?(T9V40@p zQBTeD>?PqlBIbj#SzF}z42axaBtb#?PPM{NWy|LLq)LXBDx35J$=I8&?&gj*P@md! z(r7s+f9GiPHW7{AuZF_4P_R^AtJb~f+IwQ)kt zBmiY9M?*`k`%MQzKKj4qLdt93@aZ@6{@|a+71hIi&(iID@Oy>o)GE$uv)a4nVUIF2 z%q4$b7UTffU5R(gX5Sjx6WzPGtE^Db$x?XBCXb~xDdUdtnOMPRP=(EiPD|bUkx19e ze`73KAKlwSI>xNdKZSimtRJTQ(METta^hTRDH!%i5=D z-a6Qr6(QXJ#T}W+=CxMUI?X?E>u7#IGLEkuzvGCKH|N1k@B{KPCM*Az){Z0qxv$kz zAphV#ElsU~Q*XlAlG1Mbv>vy)E=M(}Snw$0&Y2a5hY1^soinRO7;vt=SYsH05k-p1 zRwC0BglaK*D1QD3TF=xGPhvj72vvW4^&^H2 z#UOIr^C0XgG9c!|{Yj)y3f0O`b3P99WoZBN)X%H-p{O9V-(+~*^7uJ3DBYHeY5%;r zzI_G%GQN*8SG)926m%O;huvd@0g@-ZB1*Ar;5 zyv(u>)Unz-4TfKTr*JVO;y@|ny~yZ^?Y?OZ`H}w?aPC0qI_#JVXg=Be*m*# z0*0D;kf_AvLMC?d1LiwML$SiDjLb3*)y^zG1}*k&y`EBp<9xNON8LUJdVQzpPvFcn zd+K}K*8A#XraU;IBm0HFLq@I(7FtH`_xs#6Dk)wFVLvpf3|s>cHL@bF+WUb9I@%nUr2I9UI4SuLP?U3tjs56`q1!>uC6BvXU-2|M)4;x^SI^&; zyR!68oKHTAkPsyGbuwpsXL4AJGMAsPvALfYms+?DHf->joJj8Kf` zsLXBlC72d4VOLBsLo7{QdNRU=mRm8N!bjwYy?@E=JU*Jvu|m23Ng;R9FaAsFoZio% zPE((AcmKecHH@Z8eCrwjg+Wapy}Aprm2tj8mv3+-JFJPX0vwONX_5JmM3A5!ui7`2 zKTe8v>!xQOs4X!WbcqZ7*)bnP3{)HVgKy8Uvs;DoTVL>2v0G_Nm!UDVzOB&q=BgG+ zW02KSdSbJ8j=6H$i>q3quTpl3R?u7NuJg`zaD?A-hK2n*r!J$>sG@W=>7AlKxSf;qUM3wSy#P^x9xeuIdqP^1Ossna7tC0+5N*+eigx2fO3M(}}VaXfvS$_+; z5)wTa;_m)n>FtH3*~*5J{iF%+gS2c()?C#~XN9(T78hq;uEvP>_R3fZ*?xb+&P8WV z7$uy=Chv=FwmDp;Indf!cKtthp>sC>C0-rcZ;juM##|7Cg^y^)XK;DX1%|A}yc7%7 z{YiZqd$upTF_Zv}j9Gs71AZ@Oksoj%?p5G0V@~wekMt2Z%D$-&@X3ZclwQ;@*Bh$u z>mK)cs(M!ZMhs?9=_yW(UcOAW0cSN%_h(JADOozM#?0j*IQ^DeWuR9K<~kGNK!M0E zy8$SS5C+L+2q1aP8&u7aw~@y)RW9vwk$iP*=y}VOSYfu*d+={5> z-EDbk!q=*thRkm6`Ce!_=m6x&LiON{3|;7Uq8iE0DEvNA}3rw$bF}70O#*s-57B6G$T9^|qdk z&0O)VwWzE}y!*Xv5%aI$>zO9(E`rx9(*;(ge6J|&}osekJRzk+m>LgnQ^ z!{aY5d5-;IsUq%Kk8eM-^Nt8AJ=i%jI=>tj1gd=eyERc~ncGy%K;wSHl;UOGEPSNd z%3Zh4h=)8XPakQ$`fng3$$d9SNMLK@mAT=oK1K1Zt@nIK2UfAJtFJ8k54IRn0PPt@ zXnl1fnVcVs^)?|2)c{88*Eu$Y&BgiCeN-ihi@cpi9bs<(G8WMLuL;MpvVLZxEV33# z-0am)Ix&J16;RXtqhsQwrdySf=gxAR7?H{_aC`rfVup*jiyUBsseE-1cm50o^Mawi zoXkkh^f#47W@|6f@vr4FM#QT(r7PUm`VBDbYuxD_f7!luHlw7u%GLY9u8r)VhGFp~!vQd}Mh!?NkR>^?r z1(QgOBvHO^u%4>9h%Go@9Ok5VL#70?BN>O-Xn(gmuFr83-LJispDz=D<=19oFdKRO zz>kMqE58OPHZ||^=a{()*rwDH$sY)##>yF1UCh$oqh@p`hIRhzFt2`xSZ;lfwl$Bm zgCFVM#XjhnjFn+iyEAWqN`)L#Xap%+O+muDa4cDXN_^Z{FXb zELiApo$79d7FZHL!bfgx$#t-*8;+I?h6+^Wu7=Q7n**X^j1?Kg2teVr{6#Pg)a z=udCAbGxqnzUS1m7@WTLI75V;6aq=<7@nm*5(K)0!Zb&O*WAoMKg!_k zlze$DB%x}(%PGazg=^){tFGt-@jUnW4TI&z`1=rYFLCRwDNvQbVKmhR<8b*;q#wBC zlmM*Y@G8WzTZX>Y83#S2yfj_|m`?wx@4Droj11{&dtn$rDyll%J!-s#p24cvph?51 z>+dnv9>^QeUtRT+5%=kpFAT%z%QqzR!8Vs5b0$~cS9QWQ-dA;drd3OB3lc!_@3x%82|CXM_Z-%)i5eO`f77l`#T`@%*KTCpzfQJ z(rcKM&rk*SfuMqZD|7kK>zNq#!qVqg=GeEI7XDHNq%p?cR}9#z>n;cI1*fviSlaAN z-WrMGa0xCOz!^)^K$@8lj>4$ko5zAjl$pnq6|hYt(y z!cU5nQF0e7or{&x0w=Ko4w_bqgR8?m4>X@^dp|y1{<`zDF$rM}_eK2kO7a-NnMB5~ z5a6DO)$6;D^h+i7j6}YIgvt|*jypmIqvAaWJRDX57yCD-rRve`iRX!+{!LVi zTcK<1_53H*b?8!YI_{*(r4dzm$Ub|b6 z8v&mFY!hG)#^_spt(_+dALKTbK*&u7Ba6WRC3Lp^>WKYpbN80-xE9uwSAy3~jh{Rr zT=(`w>-ImO_DQh%k#Amv^5sKq`*g4p?Ykm++MOEeLjCEsx(iJUa2t27D2u9CP^mRn zcn2=Bp>|w=uji0%o2Hjt!})eKRJk%oJREcj6i&+zmUK*XyoP{9D+Z|sg_&*4%s$%O z&B8YR#>My@M2Qm9HI`~^D0#L9thUiE8u1*fyfjdw&+9|%(EXoX1%#vAiymr@o_SQ$ z9JOSBBl5LoM@V|HD)0|QafBA#{e!7HgsVGTFB99fCZ&II>u}(MNof)^Ur67Y@losL zi2uZPh2ZC`?eyjn?GxpGLus7*LVi=X%9SdCO8TG7CJVhumw?(7|6SOu6Kg2tobZ;9y4deMq}7e)`|-MTbq5b} z=(l4Pm=yoP&gzlph`I(YpNr9dnhDax;M{aBK!*Y0%!0ns;}Q(4xu|a8Q1@Ij&{X}R zJ6jrGl$PG99Z#SQhkC`eO);K4p;1MazMJu)ax`cI45(3;{!cAG!Nd@8;F3%Gdp+GR zAT0jtl!hP2&TfbCRbO{bEkEuMp)v(+bqLtD;XUTffmQkUN<*b7qw><>xsm`6CAl!m zYvv7QxoaVRcFfYTzYJeb>UQ0Ll_tAG&+ALGv^e7NxphmsOr6A}>Dr?(BN_eCEjW!M zlE4C9iI@V)UhQPx5*3MWD?z{B)Bldb`g-EJmT!JMowcsND|TB7JiB)i66v-IdT|P6 z`6f3j{de6T1m>J?7pYH14(Ex$^4yJUY#Dif6qJMNOj>O7DH!FpwjVA zq^X>%;`+DjVB_x$FCc*X*SZ1r18Zl% zjV|pGE_@pPhJ~I5lz}rk(b;)6xube&#=v4@_C>K=%~zto*F`HhIJfiQsN`;O!ucCr zOgf`XzMM-XY$B)hSIXbz|<_Aw}DspS)p%g|=eFH(8$LE9KFcZAF zF}w~e0W%*cXt6F^isr~Y>QO+RfRy24gGH~8td`~w8k8JOR+qJ-pa|xiP(1o z|9i-N{#`=!eYQXzM01n@r(Nftip6Jl)iBN5BfoHFRmiK1!fH(N^QH!xA?A- z+$_+BA-OpVW>B?5nvET%-Rj#efBQ0$UAAVA9r{DAFXQLc+EN9mg z5Sx$VARYJ!=MO_ODaMtxrlg{n@gC1x-gO-n;MaZy9hsbw@U@x`-8#9ZYPR6}5~TOT zW4{u!*H5CL%VE`+g1@*fp%Z7z0|i_9gCjP>tT2FoTi=c$EIHGV=g)Q=OL_OZUbEJ2 zSOQaTPfFqqxAinq>KD$cW_0N7kagBg`*O9^XuBKuUeMTLd=C#(_dr%xgGq#(@bD}b zu$k@Ul-RdNZ0klI44qhsmUfYeA>KHsG8q*+Hu;|^l0RzNaI7XOK3~=-z5(-7yzIp# zeDpZ!Chrbo^n+PKBcAv+2X{xei?=|r1kdLR;x(Li9?XuU{ZV_LSW^j(+K+!A5?>69 zGr+{aZ4F-InWY*mDV+A?XNMG$Hi>~wJxL72*{y9GktcI@l z*alo(7fBNV+w1+QaAQm8yS)YZ3%|EbvM6{=owDvz+j}{N6MW>bTPD~uF5nwqAriTpl@1IH#&!q0OoyB(jdZvB|*6MB}LSh)F3SKU<#R=K7W8INGx1N@uiZ zr$zyGA<^Q`Y4g8kmKYXqcVCexe+8PCTPF2sR@c1^t&Q@t+6liaa- z@qfcoK<5k8ww!O)S(0j`Vw+QA@1Bv7p8i$O;-n9-P1M9b>-+A2pKtUwor-Mi<$sqCs^2y+wZOn-Vn z!Sk_!bsu+s{YvEZGC5U*{1s$$%slGCu~=Lh0+2_|aH$I9$| zjV$e)IFY<#8zbLJ37CDn({K1d`EM!i?qP=I$QKY;1uPpBIjGz9nh8|Q_42XUunJM` zby6%1HyB~pgcq(efn}@F^l@7r|Us&a-#mVOjl7u=RZEFO2at`@Pc!*A~GT= z(@aCQt`+{Q+WDZ@eDuDzCKC_XeBZ%wwnhf`Qs|Wn+;UJJ8^ec63|8;J!u`6yoRgGX zAbjl{o9&q&7HSc=oDcG3YlYXF?+S**<^DkmR+MZBuqh-U6Kl5PoGPViWR3Nka)7JN zLs|P%%;$wDLDle5JouKxVd^keFKf}IK^mcz7uoq+s`U^2@UFXz66SrH)7SZB$rn!E zg^*k?ntDZazBdRf>}I`fFO7b5Z+7z0YKkn6c?Fe6!(Hd5Qw9OU`(nxXFv|LcbLe=d zcUN@Y3E7JL;Qs2Ds=v+dN3Sx2^kmRwmqCO)z$5Ef6Z;Ko$rK%47abnEcE>V z-$a%H6RQZP!37xtEFXPWgo(>GiZWn`Rl&VVJqdy}JTGggf#Ja|zs=m0=wDAT>HnN; z0ao7Xt=~+Hv!M2U*G)&I%H-1B4N(4i*z@@jZG7ihZAq;ar!v97=);i66!fS@m)sw? zrB}z|kiPbVX~ch70hPn?OahSavUFV~V&|Cs>cqW4Q3Z6N^9J$UmTz2%j%o^A=Uw#A zllIiHC#%=%|K?u~dgItP=e$~x^gGC93Q67@W=gXg;9OWtP+~9{v!|wsP-q z>1N8D!UTLxKw+t$IxD-*`+{Bjf=NKup_W(a>El%|*joD)%t)<3bGFxlhtfAiTvfWb zNB=D+>&fJ83acTwQvB1Eh$kBk-x|U*e;?jhxtPu3XU`e$NV@Q0k^B5tm)ZQ@3DJ$v zu)#FX`i+)-xHy+2(EL8EVFzS6Y&{PVMOOg8iNx3!KRjNmmW;FGkt|7EA@4ft12fnB z^VzQE+D_)1pF}oZ$IkIK+$2Mo^C)7JAvq>*kE;~Yw@%Nc0!7M_P3x&-Jl;%Ht8;T% zF@A2((u{#sOKs1x67m8bG5&eqvni}?sdi`6!LaNZJ~Tq8&goTPSahI|uC6-s%d4(@ zEc-%GO$e^M^3QFgZI|P2xBgpLe!B*8O5=;~i-wxA?`{*4?-slk6+Q?*>5h`{bh>En z11=(*!xGt^%SAtw!V?QN7qhUu1L1BH^h;?+Kvq+cZ|@^_xXmIT@g78g?N+6t;m_2G zYUO&5Zk|}{9ryt1QYv)(nNH8DUaY#Xp@W~SuUF$Uf!`=`|7yH>N6b))edFbMZFa`8 z90rVajG&#L{564-jZU$8`K-wc?Qr)w0|t%$qV^LrxpCw_h)Y)#|~$#CNI;gyhhQdy^mj=xBE*J zUE&{6dynx+1xU0^nnRk^D)T5sSdn1yy3W{nlLvbl=~UL-Xh$EtfJpxDd664==0-(e zaRzWeD!NuYDJ)M!0ijnm_kf!2*9o$g=3n=bWXQYFB)0P(Y!v$vF{M>kwtEh`mlFJ` zCHhH$g#D$4?80W*>H0f&lBRg0^iuZ)CA^MX-X9BR5U!yFHkE^JBK{c%XzVwCezuLJ zbltkFAAqAF{O9oe@(<0)x-z&0(z%F@Y6$WCqtE&ibH8H?ff>*VJWS2)qQ#p+1fAqJUk2CbEYTOI>hltMP zGW*`*dzFW=bxYo)%s~HkSD0m2&I8aXwLc_BL3*!Jo4@kJzYZa5)e;%%e@Fb@N*{R?ak`r=Zq)b8i7X-HS}(65@jM@lr$-PCkj=G=-bK1Ct2)ZR$(p1 zCZjM6shwDWh5ICRY1`-fjwN&Vql`t#V#+jC<*NqMA5tp~xAuiKNUHAs`6gEKo|5kG z*-B4c{{8(>R)|&(DjgmH4wnr-ox%^jXLWm~Um$IWy{Ar0jc)r__BL8wsw_{h@#6Me z<6A|Uo#4X_++}4gj-6k|I6$(91ZfZmPjn|t?5*K8ZfNK&3bth*95`0+>Xem5j4K>F zHEFotM1`7k3@>#Ky7aAM#(^aPqKj|{16!*6aXW0y{u5C&l@Qdi^n@{8_&5je);o}8 zZ2oWImd<96?(ZRN@9T~w<=CWsBXoiK=d8;2jss5OON zMO$y>3lg3!u7&!k<6d(Hx<4La4RTro0u*^%FY=x$lCuqY=LT^By7{dsG%-YnPS!Aa z?v_;-!}IPFr4Q~3Z{Vr7Sp6M)aii6|Z~K0fmCz7f^V(|3+ee?!O;xN+_u>GZH{3{h zl~a3Wpb-(JZUoQBoBOtOPQ7L|BCrAT(N$#r6{kBtPd1*Tw`~_T&=l$ZaJ}`8&bRI`g<&=~fo}jmc(iuM&6n%1k$;vxfnF!);HA6z9iNwFCHC zjj7(a-HM#JS4(-K)eS;{xi1G|nQ?7s5_f{)_(7D(Sr>6@k7)tOHlZW&VxI;kdUQsh^46NNR z@{Ya~tz;$@)bio$B3P^iAgn|XdHyr}dh zME893hq4Vi2o(J#$xKXlDdVOAv>}|=0D>r{si9|8kE~!whcGv$% zN^kimaQ%jQ>@vyHnhp$p=mRiuQ)#cv{ zUS!ND@n-wWZ=u|$QNY0php#fUXukJC23g)k34fZfsy)l}H)dlVwxRWNBDP&D zTECr?%#22hrY2$_KjVw<#hci78ICWDD#6_W2c2ssGV1|?eSI-fxEK!~#wuINbD$|L zH`Pa}8vZTK<8XR{=djo!T}_(wB>$Yj+fiwR8j?{tKpmcDEmf`4iZ^lo;HRgmd(l;n z=J1l4Y!A-&W=dUSHInI`bgH0Dyp}@;+N~bHvOa9jnXFJc`SdrtjWgmtKKjsO%I5>5 zfuf+KQ~X!+4td5U9g>4~)TiBLpq6VC*u}y)_O?}n8k_XrY`)lZoEU9brSE+2R!ph7 z`fN!7{ljin$73TTK=)G5JkZH{G@uJkctP3qCFqk7J07CGIox z@D}o1fa2i$Jka`D&>)iZRrYe{Uz@rbyr$hhfPk*!TP$l!G`go!rl+|Bdv##_59Bvt ztR?6ReV!d(-+kZjq{o@MZtpQbaNXlt_5rx7rx1NlLAA&Fl${Qq4popF=seJv8DwL` zxvL>axgIU$go0rwU%a#F=h6(e!r&sSh_&fv>|I#200|$RDFByIe$>j-pvpn*YQm@~M-xxi4!j;y?4APf&w7lF%9_vSK2)bOLLFr*JP?-vUQcEdzhy{o2c>Fs$tlS|197Bw( z*NtY6HbN7nzKg!oeT*bHt&!PK+I~f^+?TuRVOpo7m^a1NXk(&YcGq;<7f2amZ*WWk zq`$;1-b>ks=`8@HDF3kneb-!xB?vk(^0W{MSdy4s=Pm7;MxK4|(;IX!G@ATt56$C0 zVNd9#e}kHmCp&$!zl(dk+x9I0)zTRbA7ZXhwV*Hr@8F4QU9=Nnh$$Mpl>eD-^QLIW zUiy?)cae${7&HT&S#uLb3Hsm5xJpjh4f@JZ4gllj-Q;?xw}y$;d&^eXDnC6^!Vrsj z%!_i2qw{c-(ku=B`5L}PwUnxfe3W=F18Js~?5S@ypTAi3_nLYDe21Zy%1minjNs7# zU&T9q#DON?4)~R=W1{@Rx41Sj4y|fUg$SB)vyAdtpIfjeIY_D$hE>i((|)=`RGtIpVFVym_dqz_n9{n>t3QO5$Dn^`c)-#v+f+SBl!<&mgrg=Qbk%vw4c+F)yg|^I zQMjz?x)+pQ90JsiSniVBNU0IWP{~B}0(wHr1CMKJ1l5APR!CWWOAq$@4iC`w#>PyD zM_Z=u7F0R~=;DJd8_vJbvA9L48>OU;lAbt^A{*C1Lt>%`3CS;vdC zx1|t}v||w-^>EGu8`=Hmgj?@{zhvD@4nwmL{%fzKgx-)=IpT_vt z(j!5V8__|sRpCl$n1AcH$P@C5QukNzRTg`==`&TbrS+&;x1Zp)y5cW+@ETVd@DVoL zF*FzVd6=GPC`llll&zmq4ZAX4mZO590ly-mmG7pZ?t>em3OwRlppAFBLOc!%iBA@& zZYa@q!P{l^Zn~qP#$hJ#9b6=M&hV6oGZ@`z6ZZwHvU;9=k{S(Vz`3C2d=1F=9HGfN z85lIii~5z_$ZnQ~johbS7o?V5)udue!Z#si;j7%2wy+?mKOc&uL4NQSm3)03dYjhS zG-a|L26dh$P0gq^(3gmUZFKt3KK^+r;^sYq;X1zX)bMrwA*feA<(FPLuLHwQ8na4z zPdMs1DN;3)lAqTaGZWb17`{ij=Z@MM4~mWI*#{br;Uif(!CVnx(iZ_PlcAEqO&(z9 zO4~yxjq%LxL9ng?~+tZx6{Mzy&^-0x@f@^x|A?eK_uBVfy<9c1OS&Q$HWkaph zq@N%I8YIHbTB_z!LlO?cf%bpkQ~CN)89XzzEz||-Ujpjjg*_M^Q_D7XRs>~lUL_io zsUz3||Cl?dMJi!Ut}Vt;TD8_mN?k}?78cjx_jw-MDGPLo#T_0#II|VEVmb3_@}U`v zjO@HnEBk2Q<8_TY8$D_cSNk3s-y$M(Sh{rWDa~#fTOO}07wvTQiy#WQhs~Q*2Pld~ zL~>1}hB1V~wXnzIZzMc&CSf*Yq2myp;~fY8g|peh*@N5J3SnYIIy#dH`AWF}HSTV# zbSOUSJ1n(qztZI$VN7e!3HelF25Bkzu&aAYU_7akrkWefexm+0R7KLVyFA|H&jH4M zsk@xAzCkQ_uBi1ijn@SbOrw^{Ogrt9pBhS*B!!)=K5khvZL!Uc9IkBmy3u7+o2>(W zRUE@M{(;6iEqc(C8PKmLZ_124@d6bdCf~P|op;LCPX71E!hH~8MXVA&6oV(g4e_D| z6Qq;up0nX9avKsZ_pPR}>z2Mp-T{d&12LHT)qx@lqVlbeIqqr1jG|{@ze($njI}j1 zMC?9M3Ljzs`5EC@Rb4g*$RU(}@oQ+mFY)W|C??Ls)^Il)lf-n;B}Gb!F8&7>q+Ix6 z9cH5suYs(GSh)P|-1sTvStHhKusp=jA8s?D2|O2qh|_EHYp-#QM}53svWOFLP;1)* zg6~mbn9}2BP_0o*nuwfxUt8dOH#sO1HTeeUiUHg#ES$jztb3k;jiQ?1l2izMg!WV9 zyYYYI>`Tfy2HvS%5KM_v2QnayHaBFd9%y{WOjUt>=lq|m}Real^rNdt^hAAEfi9rf7sSDplp zX$AH^dKI4QTsY?pnS2gnL>*H9iW~DrHf(GCx&}rB@StQ~E+p4S}cJ5OCAKdhYcPFsuwLQ7r zpen-shA(*6h>2&GVSk@NyN${H2Cj9`s1N6yKX>SS@a=bHtwPeyIC652(BUcZYrWzU z>!}hs{UFpyz1}w6pN;(BDvPeHmahD@lMDo$2{U&?49;kr?+6&&!hgjC+keUkIgyS zZ}(k;z~OTXkT>{O7dOIdw!QY53^;3)cDW2*CD$r;(3v}=kFTnIka|0+qVKQTDfNm^ zr;oZ=ZssaRTKI4f2%r;%PP){n0BO#7&lrP*G9hZX8fTi(`=eh&@zvBLZP#8ZRgnBwxo&hCOooAX+0G{Kc1 z5|8vZr8i)bM2zcE6vN!(nB>t|H4a0iCDMKlmX58=TT-!M4YT8_6}e=*{QK5&Nz*bP zX^~iv;8k_OK|hrl4XQ#djK~xVkw>`vK0^xSiEBoLM&I{Ra)zA8j*}x zs)@eUI$!l4S%6HQru_>@@rbfBLac{hm`-u?W-ha(&)QR>D@&$(TeD1ZPj;M1sx!@> zfhO0EzfZuYMc3N}NIYv6PMiPHdVohX8{oM&cBI9~#FM>fzAxaR=Qn3KZ`=Yc^^z91 zvia%M&ZO%d=?iM#Tw;%H+b2+2*m_Iw1=ZY^!ppl?4O<`f*^>`dS@05~us0L?IV)r1 zS=i_3ioMo}B0t7v-$<80Tg^Zh#fU2=7pH9|LtW9uWVM@?h{|;u`F=CLFmfs4iRKG9 zW;?W$=vzc4*4{929lKQ&@NrSiYwCvIiLfDY6YIq>jQAW-=TWFY6h)-aPPKN!{ipvJ zzP^u|_a)s&gVolL@I+0O!ga%-rBO;LiDs8YcD6J4|D%< zPs1D{m&RFNKDeh@9o=q>oMM7kv&b{Yfwd-nN4;zVlR=-ly67YUGW}1RhQ zU-~I>3d|G>8Ipid&;I-l%J!1#O4+rcc49=z#S)F zjE6wdxn3|kwpqxVn6Q-bOm8(&J5-??cw?;|!g@DLFZ#4dXtVye|AQ3tUb#p^cIYeq z0-v`Xm~fYkts8Z@-(<8(aE~^^8I%H`!>H;FU}&RSXmmMlKE0-~TPt>XZDRQ?yTb`Z zqkjEOx&N@r@RMQ54mg~y7FK%tdn1{@Lk(CxB(x2v(6hil%C4o7yO47~Tcq%Lh!U#o(j06&H+WdW2F*DJl6l%rUXUS(n&4WH9wpmy*26KPaL37ge+lArZ=XJ@ zCORlbu%D*ic2^x0F_1*X?o0>G)02UTdLFCKhpQe|twpMv3`#W$5Qu#AKUS;ydo=dV zvki9ex6Q(U3@}R9uZU1adl0unlMy=txOWE~(BT*&np)}weEha-<61KG1r-zY{r0F( zGO-mrFl32vi2hu716rSFVd%ddF&eEsJEz;l$$k+JEDMQC- zLLfPP)JtQP=L@ZtR2f)M2RW!xSWcSzfV>lU-=Hp?Y2E!2$0DEPD2rn%Q!<{xUM@!K zO1BAOFbH;gaRfRxhq9%)d_dSnedaRY%C~Lb;CdeBe+gfNdT-+cl1x?}F1xg941srG zuD>HzYw1M`)k}s(NB2;)MueO{%&~hMk8j!H!k6(=Om9er`K@3hfVMLu%QC>6&6iWkJ}T9FcCsh)eHR$HRm3cD-HJwzV%T@HK9+uw<*^}NNp;21}*eP zkAh6d_C6)aPd5x^CFU&3CZ znnEIF_UV$-J@cdS!;7Ctz<%+}LS+3gp@eQ&FO7i@ld9nBIA)v>V(Qvw%zve2u(^GK z1>eu&Hu!{U3Ta})iAD=KPth!B^wEAgZd2j=m3!k0hcJKMb)4vhfxU>DIXxE8tTgib z;bNBBNEU^XsNlJD8+-%$Tw)z<{BJh1<6N0_%X~@)ebV*v@F~a3GgV8V#boIG!VTc! zGX8cKbnGuYoHXO(F?9HO5N+JN@$n3~pBsG$1wB~IzjUZ8tA^EggqIn2iG#xL-=p)? zNH%NC@84MG9&F7;Nqm+>#P706sHF`1i#CEuk>TfI9_y3iTV;(>6L(6rmPy)416!g! ztIrQ;q$1+Y)|L(n0HEytVyZyfO8buB!kZ}N+shi|z3VDt%EoGbl8y{vB+;$t8q>0C zoTVVXH?M5rhGJXs+A+M_S2`Q&5_6We3<5nx#;Q~vY4MOE3up7m16^yzSgc)Lm!4%+ zJ2n5m>zPuN=GO+d5!q6hs9su4_uoU&XG5^1C#iqYA;P=YfB>s{GuLTHFL$E#o8FKh z3?;vLou(-Tz@Eo8>n%Bl7?mNgXM4rSU@&APe`3)1AI)e~P-cYi?j3hGk?O>TKK(}j zPmecgnF{q6!c*)Yu~oG#lu6!BMm^m}PR=f~j+;ZGebjAs@ArgItwKpFyb)Oy?@Gm^MtU7do zA)hljpXt+4EE_J)!9HH@zu4!W2=K;rBQev=9v5jnT-oE~` zt8E5lCVJ60_rMriwZX+D>S@AfgM$S-=!MIRu;u7~+`uZp3TqdtEu3j9JYZRGEm`bs zJy9p{)Bz+oOOeNqh@H44ikYM3S8<2j^VZRF>y`?uEqWcuw3V<@G@fVJ%=!(Ld?%ClbN6@nSYMEAxJZm+@+C6muN`L zyH32Jd>vTI!Q>K7in=g?4|n+_g$Sh|dA~nnJ(AT!Dz97`FdPO+{OTCp`OWOp{_^I% zLU)%BxS!Ag@scD&S?l{Dm;PZH(kG2>=tsr$oeW9RS8oP{*BJPD^S2;Hqg}(&5weq4 zQfJIxsoR`I8Zn3hl^MFlaW_`;gxc;%PaIJ_7)mjX*Z#rd$kT4LB(G9t2FR9yMKhjk{Xa{1XyY=6wXzzbEx=N$ZN4FX>eU(AP+zH^co% z@=a`%EsAL4j%Yg6l}GZbs#I?&s~wAo69K|QE|eNeuYsRL^Qe)c)9GjW;`zK6F|lLb0 z>4f5AFy4YrYhBo7qd8-E)Zqqc=t*$~C;h;VQkQYZ`4GR;@)i(B>)k0YG@o&fbl4pq)n74fqNAp$NcO ziYMwiU^Lnp8lW&3UOyT!21kAhZ9TQ^%9mRbR;)U@O`|2NjAj93-F)%JO%L^iEeBlIr#;rjKKVbJD2Z{9}m4b2hM zoApWL3M>~967E3jaJy%ckNSHS&m8gknk=p2bLV<~?e!#=6Kh$Ti%A`RdLB|+ST20a zlCRrN&gs7N3vxC+<8&f#@d6SNea1KhM?M7qZai*2##JX>gt#-C*n<2!-hf8B-E2(e z7S`3G%gS}I&c=c5lT9o`%yBw%er-oW-0M3Mj^Hy{Jtf{_0^3d=b4c^l8;L5UTA5xa zGvbF2>P?X zUjA=nt78z@GGJiU@1^an`SLl#32uB9pF% zsN?K6WcQqW4$E1;d)6-FP>+3nd8BA-h=4ajV@bYp?(jmLLbe7I@ERejdWlW<%#5gX zw3V~=^qb3vvgg)_Ey|xFg7rmt0+!^zO+k?Lh};0s+yiJk9V%WTi$t^8w>29=;6oUk zy--%Izm5tO6Z%~{KRkc$PBp!i9&ulK3vhD@f|bL1gl1zoD72xj^`&(C478Pko~r)q zG5bz6NV>n?KlRoQtq2^;1TS}-`y?k&ajQy>7G(>UUKh^^zVfVF=Ov0rgQP}(|HqYL z^f~wGB8uMCWQGKkG)+x|QqplbROFeE@+`q>n{GDYWJ62IGJZI*V;k8};hcxhzh(wj zGD&SvxIb7Xw-ql(i}atjHW=CY=R_CT+fg7i=HeSB(s5bfnw%#O$zZ!9SUy!#j;?K6 zrnY7A8UN_L=^qW{3b?{1&>t-Zcn@Ahw@Mhg0`6aQ=d^`J%2`?lB}_oHzgT5 zATG>w+9@M$dGzwHwOP;&(HCIkj zOH)&GWiBjtnz=P6Wtm&c+<;W(&Q*?bk(Rl|nYo~H;7D=L6ip2`iUI-xKi==}pX)l; zecy-Y`M?LB!+q{^&S7xIA>#9)a@8vH@Irm#a*Rzx{l^IA>pP`bAxMP49Gm z|4h22_Rn-l+aM3QmJbsV9s>*VYr}k~W7_d@R4*>U-fcHDZeRT}mam`8N~p_hgq0$l zZL!xY5LK%fNlJ1Q<;2Wbd+{Sog zSse@e{4h1p^nTPSelB(5UB4mk>7T!oSql~{FufP;<-g}&$i#wAraMwz@HgGxX1FH3 zat^NFNIp@q-n1Unp;IfI5x^|z+|vpDo#docih z8`56{*s+=&`nY?-*(`~);_i!jv2AZ~IJwKFvG>c6XzaAoNbY+9QMWxb{A$H{_3pEh z#_;jBGpQQHU)AVVr0)r1-{_bPnCd+*s61*A#3t~G zm!MCV)Sf5~b2fLFSzHXs;+>nvbL%nIu9gk$c9H(X?d;nW4G5S-#g!c}*|W;pOVAp! zE+Ra)5Ju@sk@v-U?&3M5V~$0Hn^Z2nwiS3O(cKv2dh6<%fZi)&(Tk@dN^KxeN!N)? z^|HhXv{Q=g$r2x^&3aQchRy!-?Vb@vAY_v6;ZS1pC5;Rmp2JpMu;c+7BBN_=W&5_R zr&R|>Ieww^xY3E^N&`_#=$KAP`!Fb*l*HH-IrJUnBN>3?WcEqo_4-v~r|P}iZ`q?8 z7tqcCJ~L-1T^mm;yBp;m`N31JlX@<+b3eRto7EY$OPb^&Zf zl}zeXcGn=f;j@i7UEY@h78G_iQL$8;PSx_@@CZF7%}!x-6tqE^hPNdl2M(~xb^2Tv zpva3KC};z_D$qB20QNHJyIJhdlk6kKs^$8RG-4|ofn1iT5SobJ4mtCvdJ?;6w%P_R~I_6B9%kUyH^U(T`o(c&Qy!m!9#}HDuRMi?&ZIP2p(jRAt8}qL9 z46iIGKjm*0plM7A_^1>4z@mINihbqDzkE|ID)xgDXD_5bsy-^TH%-sAK&(WHTv#8QrpPNvK7CaRdjhjO zU*NM5BS6_ydYW7cCqzQUkK#)4jrypw1-=_jFut901&=l^0htmU1>U~+>+TE#m8t+2~1Bt-o5AJ5>xwiMhc+weq2U z)R@KtF0b@6A}@Z+t4zM%e-B@60JZDag4FFpp~Cz}=~hAC}%9(i+GAe1ELff!;s z)>2|iuF9uV;--(@kU-%^;@9Ah8YNaKiwbQ4qCgZS;A29G^!?z^Tv;;Ri$$sSy8q#X z3JYtR(xE$I!he4w(%%$IbvSB#Phay`Kj&2LI3q5JwrVs)3taBo`=CqVHf^~!FXZqs}$59 zik-~5SfP6J^G+>O?Cd7uJ1O_hChC^_g#)rSNW-WuM#2|?mnwbJFddOOU?j=p-bQWS z&h?EjUSDzNtQ0!bn=B9btGR?#m?&xJ)N?9_dO3kz*xZXp-vV}8@7Y;Gv1aHtZTB** zI$1pFlM-HA@q*r-=?;D?^u$_Ji+k;k=6aqFQy>}^8oQfZ+hl-`2pUoIjzM~CTnv4; z=x9RYCd7Qv+3IlkXsSC-HLbj+&2*>){Xa4>I=#EJxmqBBL?4~M5xbJhHZ8KD; zEP?G|^+N2Q6Pc;FQ}U;G=w&f^xcx)}Bh4H0%tZO5-Jq{b-bq3C2>34kksqh!xW6#J z(Bb>J6zGby$8>CwHK5)bN3!CIHkS^Fme_JAkw*BzfS-0s6mA|y>Xk{`dJLtuA#sN_ z>p7xf4BVkP!FxMkr0t_nXnot%{;I%dG5}#V`C^#o^B~w#+&H(*{LAotKD5xrDewcu z8u&%;1K}o(b&W~ZY}0*A8`r#R5|k!b@+ko2IJjm-y1LNp3z)(bciK&lGoTjw^V_&r zix+}lDnhl^h0MMD+_)Dxqph^ImX9R2u?e?PHZP+|`_$Cq%~|w{=DC^#2662uYM7#& z7cH~1velk`8#N9u=^Q(70FMB&>XCXyjL!>1UVUv3-B--dj$Ae|FC~rSUg?jDjlTTC z$RAGfc)W@EEYg3JpZDgHoenu6o_Dry62vatYv40xwerp6QIzyiOYZt9&uP@pDk66Y zhx~eO$uqr;hvmKN%xVRr53zc0N>fMS&K=A>u6s}1REW<`(for~^wjmVE4D0x_{IiFNIrqppySBQ_V@DS0qSaCwjH(VS6JC^BR!$b+W~D-bH)uo2jLMJnh2LPY}*? zXNG+?PW_EhN-3S+XViE;b+o|zrTZ2xiRCad$xYz6)D-+)u7rD1gzm{s~C z+|tRMds-tO89$5_3nyJ$%CbuR36WR+r8;ZZ=1wtk7=w0O4LK6t5}@I+g%n|R`J3Oz zM!%e|Ka_1m@#YkD(F=LRd^a3^W1W9wU!$kYVk>hPz1zWI7U?cEJ4)h%)BdcTf)qQW zYe}Z!7Vt+fi16?48WK-vpA;8@9VNbM!r!oJ^Z0FSM;Ddy%)0a`!=TKY;X9CSLcTZ+v(v$O!N=FH{?+g$x?k& zL!-G`|J|D}U&3oybfOLna;q4GKfcCKUoqE%%L>o0MzZ{=Y9$=cb*s&_W{>V1?)qvo z)w`-bObrup9MY(YdXLU?MM3<&@yD@|j9OCOqX3f_XZVFwaNQs^%SV^5X1Z*xpD(qg zq#k%h1Yn%5Tr&O6C^pZKmh+M%Sg33Sg3E|Ff85YYN87`VK7E^UEf}3vc%FJ|G}zJ5 ziMO*2@o+P~1heq6Gj$!c!bMe#tQ{?F9b_U-;Y2tBsCIk0kJ>8=X)DIPr`K2U9h`O` zzMagw=~$_i2su>HtFOv8-UyB;@-;#0ZEl6;m(Bq!-o(^c1BW9l-WZL}02Eb7`EyaQ z&Z**)1lOvZOX-byo@yh_wl-=U2=ebvya%?KpB6c*LSodY?e<<`$UbL2PpDQa>Y1S( zq-Iv6TA;Yyg836j!w`>LRR2{4ZG4nFLq@tSwext$gn5IsKNoPhsh;+{vA#TY0q&Zr zD!xMu*0`WOw}pKInH}|D+*=7XP10}F(@9M!(aGDH^@XhaAYi%0*c;)KsKN5zXDQsx z(#dAc=yFA>`qrce_>D}V8*5RnPNmN}57lt0Fp%O2ieDlZWljQOnl}C77`K7JLWq%;X~Spm(A+vBk6l zewL&40R%g_Sd`L>t|hG~i>NGYqe1F2;m?T)5#7CSf=CSa8~5fyCo=$VL>IQ#KpI7% zjk&PNz8UcyW}Oon?I2yY{)QHM?51%pIp*OyjeYvftx-G|l)02=)85_*olZrxv2K2R zCTP6bFi6)~`F@rS!KxLQwQSD50tv;P!xCb^l6LylgWS}dZO zOy38CB}8Nc=5$u;_mx;CAvWSIirT^EKICC!N}9lqH1)TGYMA3_0?7a;pch;fgyDE( z%nhb_TuhIinJ543TNs}#s_{U)d8@ax0}X6i_YKC1ezLFvM+LumT|^=*UTnAAakGlK zL6!}O(8X;H$w(@>L-_D$gGFcR^?98HNL>>$W{Zz7I+p!z;~3^bH5Vy)C<(u&=X+vw zCIgcbQ;z-0rJ`G)O*V#hl$BP6&~R}#uhENGbsdIpUEBVs6zXS}GFRz?y&38`F+ZY% z&7v((jFfdFGZ_nJ07iwKq6t`M` zXt9f(=K)zv;~2-hZ?R)V9lO!51)B~{gFuxdQaLdl#(1Y>XKHGG(V#2lO|cTx>;3In z!xUHQMtzIb!DTZE4#ic+M z^$41Qc<&8ilrI?O1SKcEGGzZo#cYK>UcY6b`NUl>G_lmKu@<2HbBs#ydc1zsLV338 z0PPw*;ZX=Hs6zT1SsKdT7s0re-4~gbR_g3OOt%OQ^0%HJsmLk%6)g&VxM4I7To{uG z`NbL|Eb8I}+8X7!C~p+t-ZGTg)SVM?hK+}L{SMSo)?L%$!cx-HSbF|=I_`D*SU+TR_GYQ2(RQ&2nA0kVZU4#Kg{COynm}6B|5UwWspiAK4cahG3xIqT9v<3q z_;QU30r+n;4iYKIgi-*#WJgbtzNI|3I5HjX$D~7u5SOt%aj>P2D{(Us^ zVT4gjNZ258)`dRy+F`!TDT3I*mEEEEN`-!}>~n|*Yy@;57dgfKHfp?^nI`w6 zXFW^MtgqY)1hz8%O+)C1Uu>P{QyUNCzP3RhU8^Aj&WreOSp22;{%Zk?xpk;CQR*$E z+9w@QqENKRS9&HtU?aSGJkGK?6izg9{)wzRgiawJswvW6hSk^2))N0{iesKDF2vKE zZUi7*!MT@xLD_YPYU0|`?UMM1gNopj_z0KynugHX-44JxS5{@_H~r48Dc5MSHxLyU z7~aFZ^{uWZX9_m@*mfp-Ix<_u=gG|Z>7)12xusnao21?P(73015@1D3(PkLQRlBi* zyLGB@$OsfK-WVXmTHq!L2&q5l17BmLOn1o!4+Xc2L;PPE7?dW#=Nqy$=RmJ!`HYd`v@kkYQN z-3>LJQ*Qk)cJx`<TTbAXraR1m19whP0=T{VB3~eiK&8$TknNJFkRjshLlct0fIwnhg<<>+5 zIeQpxVkxk&pM->GnLsuA-Uw9=9MH`pMVg^J+w)I&7tWJyhS&`C`#xeLNH(sPdPOAY z#G03N8T2&v4iQsIYn_GWcuLoPayo(8%8=seoTJrSz~tnNzyBM z_UumCSQ^T7UKvyOUM{hC? z&o3}+HxZ-dFsfRKDsO3aa%>SgS~J@*&{*^Oypze0(8A(G%qFCuvy(BvizkpJ0I+QB z#Wj3t07C3P32&$j?-<02R#c0K{!fSang350n7=Wl3GERM-Z*|3Zv25Fx_Et z;%qq6(N0u$2K}i`8+ZbZzrKQqAJF9`ZsC@_r2Hy7N{9!03-)$g`98r`ip>#H1A`&v zG*nL8^--Wi^Q6LRS>0_m0LYa1{&6tKJq&tb6OZ0{^wdZ%JEox%M$E=O1~Wy<_xedx z(ejHv_+1DiHPPpzc8bJ6+c{QBK><6pWo+1N6WTc6hT@t$F{%R_$9HMi${N9M-~l&m zu~&Sp9udPEI_Z}7{S_pVan(}A&6u+YOtW-}gYjs-v*u%WizZX6SieXOhg2i)^$Iv# z-J!-v=s~A$l-lH-P^~FTJ9WEGV{|7=)1A*cy6j`lcR#s z7OhNL%5y^A=K%c9QX+8DMGW6rlXrVXdaiO|WI`o}>|L!t7wT!G)%ty0pBSB6 zbV$8GZ;1OEVYgz;Tr`+(uh=LVpBy9Y`W3DJZf@#qcae`ae*YC+sZpXC?+dP;lWNP@ zKuGwduM?`L>w&;=;G&+xq;uU0omNy?yM6<-!64aN8e`~lHe1>9!~;HM^SMv1>DTGoXE zov(;PiMKbwqY3x1kDwNzH-G^B)Qi;;NlN`xjjfi(9foj;->>=>SfZaUdJRtIHJn(~ zQer}qFIJK;^)&Bq+HY1mUH6a81-0A?t!x*chC$Q(839C*T0hyjEkJS3l{qx{wM(uK z0MF}}zh2OP7=6QbhtFN=gHrHkZ6#{Ih9~W6*u6v1DOYFEohJ04PngcAgz~4!cb9jP z?0o;u%>&9BhQlb*mX8bCRHoO`uVwCUqFcjZZyd;f=T^L`{nWUL4i&x`!H-{Us$e`~ zUWr`CtigMD&&qE}ff>&#m!!ZQsdkJK9fv;)SLUUKX6N4@?r|h)#rorv^^Gc zg%J~;P0F?JhxKpA*lD6>?tNi|BNA4|JLC?OI5q!p+ zf0%+xNxRtZjqgjUoN@9Ac4|c482}x=@QjAYR!o)frElR?WUB75W==d}++ZjbXW|7~ z{1-O3ep&f#Pb{V_PsKQuF|f$2@EdYcVk)J*uZ+oAdEPv|1OF0}yJFEajW@k(CtA8Do^8;HAYiZDr;sq`+XNsmLDsprx{6*Frjl9J=8oc3eX z<&b)6ASyH(9acOKmbB)S!!tB$8Pws>$mR^6+z(ceW?+vpj?DGqq2>GGE) zu}TK%{O($PAICHOC%PwVNgYcouC=4oJA_)Uuqb~AQ=dz0>>%D;y#QB?tujpe#Po+iQ*tVG&i% zq9cp)+=(H^JB}#U$a&7?>E$Eu=N+44>luP^+RtF zd1!akfafbuc%q_j&vRF1dImRH%yU;f^9*kMkCkuC(<1H<34l@OqxE#Fkr%+AMfhoB zahs|h35@nD;* zp~Om z!#m-fYftS6 zGoFkT{WAz(X%Czrv)01tA!Dq;Uq9(b0uI>2EJ9W2xo>8QJlR8e51_*em7jg+xu3*C zjhp!kgOC))r_D>$3z(K58z+bD^X>YzmGz#=08D$}SF70*OozvM8AP#qyxaHAyHS>k z7igKMsT77ra|k=Nk;;xNN@=V8n!Kwqa-AqS+QN2GJ)YPpUdy?WLes}#LV6OGy8ug{RCQ$ykR+-WLXKZGv0;U=0m|o=!T-+;x>rQf~j(gtejt(y#d$F*$v!;6qe2E=OtiQ#5N+@H{rq#KW)BGpykRrMpLq`i0izavCvABtj~g<<#V1j3FuW_!3!x+wZ0_Z8{8SRsV`U&9ksI)wg2cDg}yOL8|U3Rmj*3? zb8D7A?)e98oPWOZ;_8v>At!fir4wh^=S2>>0!Y&VadEd#j#~WCdL=nCExDwfz-W5b zW1d#aN?<2Ah{uwC0!~aH9#{Awoyv&ydGQtKl*NHI%bvaRa^bveY)>i?6 z5m#`G*cMEsKjuon#L$kWo`%ljD}$p5B56q44to0O8*Fee$P&#tzh7lL75ckz!+$YM zER1_*FnG!5?-z`CT`u-T%fI1Z!vxH2Fib={#NeF}DAPCY@yKaoS#wl%Yy)B?;(g*^0%- zbkoK+1ax!=dD=y_ljHb^h_C?QwmdWJK?IsRVTX|x_OHatUc6S1wqpv5h)>;sCz<-R z9G}}g5^1h=qI*`{ru0uF%Jlf?U3C&jPdu=Y}Wh84DFtOzVf#`tLz@R@Nhb0gIpvZg8+LsAp0Gf`9jTwLlBU zQ+@x1^%)Ue%!{t@;kIsJ;_~ooW-ye;@JNrK& z6&Uy;a52CR6ix;Z&#dkwxy*Z!KJcoN_criybs=`>N5o^8)sG5-Pt&yB)xseh$f{VS zufH@r06Jpf^KJ-@b=^VCKm?~wK|>iga)yFK1vkqvFxsZu=&v+^P-LC@_oZvuv<*m; ztmM{7>eg}9z^T_N1*j&rvuZaPG7mo1T^HRPJWC3zd~w@A<|utD_x4Yj$9oYOb#`k3 zW8)ZuhEr@Dv+|&pSFqT)+`c6&&yQf`>qnaQW`=Cc__Kp#0)tBkxq9?M)orGKKmCOC z>vd=)Duii&!y}dd?TfQIFvztBpZ8{gS5crzEauIHCznvy%8C%Yf>J`~Jqe>f&ppOo zk^v}I8%lg;NCdp8J0115Z}rjZLfS{Yg>#P?X#&UOQ;k@TBCd-H+a}0vWDL)Bn{V;Q z$zRC#zF(GP{PXmaa5Y4hBm1-Oq)CQj=%H&V45bP8vJ0DbsMIM2zht19_M@cjw9afAIDLZ512{H z*b0LYD+uKtU;J@*EsE&lxe~@sqQ5AxDJ# zE5C-82ZO)XU1m9Ee{QlIf6s_MXE~$;23d|;Ya9* z{>+q!uOoy)g(kh9xzoB2St-Ykzh_I+32Pcw<)K;1h^SXs8E{l|F1~%0@KsLGg9kdmD+%PwSVS|9;@QbfI|v*$BYLi_&=a zetJOhK|AE-;A^OuPTbln^w}lL%^2LdhX-f-@XZSMVQmI8wGAX>gTPPjs|kk)o){yo z4(`CXr)Pv0VP6eyCUfFVT_p?t=_P-t;Zc(8qWy9_+mg9VW~+)TE9b_W4t};!e-Nqf z^5p@0FS)RWm#yISu@{c~HIrySm0OAgama~%yZwHsK4MAc;g;`60+u6yx4~hmNI!^I z7jr90;`6~m+6iZaZs9(Jm-p<^Uh{PcE#tMCpV4R1w^_b4P$cj`aAwK6JCtW z-RYqw;NyUOM0>{V``pW3nr$(Gg5ONP#k*Or1r+y1N$X#GjM$Sz7iH141lMo29qGd1 zw763^3aJ4U87(n~UKkJ@lYENW6KOSu8Q99rKQD%?t_8rLC~IY*F}~=c4FHe9b4lbE z!)x*phVkTwVmx0iAt)k0l}(=<(3)5)%c9=|pQ>@{JjH!3Lg_`PUZ}Y0tSvLi zBE17Eb$e{iga>O8_cN4E2<`pX*fT<^d}z*mVn)RLflWZ-n_8dBIM5g=B%!~ z{rA1olf)65V(o?@_^gingfSEV%YmE5{gY*dz^tNQpUFbh{KrOF!HyVLaUpF<{oA|g z1=-w@G6YSz?;M%jU+Rw1I21DR6WfL|^RFv%TXGnfbcj#O3Nez^YF$se@Ed z$K6`0S(T1^E!{`@aF^-5%o+0Gf2>OQlpTtci1heY5r?_-`23n_A7&Ca*=q1o;d`0t z3wj3kuLpG3+NJd41I{Vb+PNQnXHku~D52NaSCdYEKncCRxjOkjPR~r?etdvUG0<7% z`s93+V&Jsu{y&B*n8YZa@3`#Nd5&_HzM*XJ!~gq;K12Qp6ic}3{%&#_6vu@k?CiHa zwOu*VL zL}&qBnMu|=GDoNA7`5UxOEcv|AL)iY^^+=8}j)Mg6pC=zswq### zb3j~8Da8i1L0GocB=%CK|T-^=rZaD!oSq;3(1KKA92 zL|G%_Z|j~;gDV$_F^4mF+5VlZ-MFXxx|e)JA{orQhS2!mq4)=Wvn#oMFCloYD*6U= z9$z3wJc)!C)3L?howUh|CViNfMibwHKpd1SBbIl;A9I9u$*oELfLjcsa++GuAE&;g z*cpn2<}-HHChv%6-2b5pyOt?5W>>Pv2#5gclX;YNm$qU*Qd!CKK|%xFD7J<&8|nQN z67!Y$@TvR2v{uwKGyv+qr$D3^u+c)*4lW7>1wJ{knft>U#Tifax;_Dr29^U#hOPBk z^701f&fo(dP=kd21gJ_0A%^)2W9x!gd!P6lQ5({JCq`#PY0-Z0ky5|ikOAY&FKJTL znE-^JB;w>jk_7A@a>>?nxvQv|3sEm)_t`xK3C(G5QW8m~-}9%&3FiqHoOD$O+9R#+ zJkz{>Hs8?f!=+%AwR#t3BAAzBpNne!%Q5P*ufdu|ta-`+Uq)BdW?FGKSavGk#J z)INJQdI?hB5NYmJLwDc>R8$iI4&AC&T(I4L?RouA4wB)cR1tfJLnr4gd}T5;qgb~x z$^Rylqe3YL{S0Cqw$FnGuut+UKmQFZ&$*8i{#?f9j-tzcESlLD{)|S69w3U=iDDP$ zV0zC~3Bl@}3$dFiManN)s@AZ#vOosW#WCtU;FGQjpCD%jih-IuR+kK+L6?B0@zme9 z4k4#GiLEbZNL=0Q#OC6ov#JyL_&+?4%duQN0PL-p^ORQ^F}G8@=Yx+3K9>bA33?uq zQ@hR5oKjMI{(gTvqd+=FBpoFUJYO@JfJ@#!;i;U4{`Yip?9C!E{>y29BEzlgZrZGE zIj(~YxH`GKYX2twmwg{ERU2} zBicumM*`MHn6HyCHppAq2}x1cE+sIox?S@;5oP5dq2zd?mweVF@phk+=_tj}`t|z~ zRd;xqbKk&6vuEuC&-=?eURQG^^KxHGFWZ_$y!vAV(p(CTkzAes`0um&eAd(R`kgl+ znlpkk_S>uH_hl=#=J}rqH=wmj2x_Y*aWltS#@Dt_FuI~|7#})1yJEg1uGuiW*hJIq zx^F#RN7#0oadNY|sIUo7wa9tus#XWvbzgqqhW(NlnE4PoZ*bQzo*1a`?4Qjp>euF* zCs|Q7J^f4EzLP~m=()rL8^B-hogV+I3B(}T{nCFpw-$y=T71^Q?BN1XW5ZqX_cBU3 zmw@lFL>^3Kbqx%h==C`J89iU=My4dJs(fpq$WwIHL!NxW^pd`9YfI#X!+PeHbo6~i zH|CV-p=ms$1~G#^M|`;>>%~swoBn4d#t!!EoxlLD*V<8^mNK6K=XSuR%fzH}(kxDO z$M)5s)Nkpg{U>_hnGa#UA0sFICNw#OFC+i5hJR*F^PCKo2X!;1UNtBYsjv3e++dpa z1&CWQ-(!}n_sf zzKSL{sA#3TqX-g}DwGn*8ZvntkGxYxob@!eLUza`YUoi2)VtOA{@iJA&kR|R2Vc)8 zR_tB=9SUm{b~&w|o#Et&ZolJsp0H;3U5-K_e7O7s$F7xyxm@pZ0tt~x5H;q1?TI;9nZ_etY!o9}w`Jar!HkNwD+WD}C{3RhnIQPao~nON`*^ zU~uwP*!SFN{(5Cquo^~C)j@3kL{p1~I#mC(B_Bo#W!l_cjv$wVxs>iSH3UTi1 z!(&B;1v)tlqYfo{ri2c<34PM0^~7b}dTqi)O_l3X<;bSguE{)37=?WwRD zpQX&E$iptFygm2_bT!RjaW1z9WnJ+4w~HR4-puV~$Dw3OaORQw!#>bDMkon<`(EuR zqqLAFHTvnys^;OeMfZ}_rSu^*;d$#!Lt^G))AzMMsZtP#Lbs_5UBJ`UrcS?7QXHG@ z;MraRiK@LITdo@$DLXb9IwG&qQqIe)jRz%KCf}yqwe-XT`uSZYakl5B{kzlpvMo+w zuRU3h;C7L|pnMf}L|@jfuM#>^gK-YR!#u54xgOo8Im_N7pM+LFE#^itKoB=SZ=#a6B70l3$Lss&0SAKv|93Y(|NFOWAipQzK~yd^hK%Tbcjf4q zW?lfga4dHlcQ)t;C$bwWpj{ zIYoIZkChDC`@4db3p)5qpOuSoOSZx))k~vEOA941U*IwKpMF&c1l;pmHG>h@Idibq z>8S#!LzyjD%`4}aAYZ%nCj^6NJ<&kOF?;s|0FVLi_Q^K=bI=Lz<_7>_A>H#p2t(`w zb8q84Hb{ zJv9a*75=OzLm*Dwasrg2+Qb6|k$r))4CCW^sU}Rq!3IR(s4}uf3cy7Ck+wV5G`6^c z)LY;`cnZPLzudp@-YxmjasK_93jnP6cyt?NPp>}e3XqZD3AQ`t?g{-5c)uJ0lEy9f z^`AK-m~t`x$;{HDQ$nETrQAOn?->3n>B@jbsVEA8UTj>s;=c~IO!U);Wbm*P6?JeM zi5AvYx#ILAs+;}h26`G-GWJw|Px;1zLECAecTc34H{V&4-a1nDDIhm$KgJC7^wWhg z1y0b1+K57fI~CieOMn9I{hT~VcNxYtnUZJ)Z<+Wb4TLV*qSKEKqb!P=KQf)G1}yFX zn_0W3-mz&uI)q&>^3B%?d(U&ot;r zF$Gn;>MBIwo{F{n+!jVT4v>nIW~Mg{R7jZBcCyijf(I&3XKzlq_Tw z2QhsOZ_;AstK2|~nv#$zH4IBVrmJ4JjqXMuB@rQB0+M~xbt7RS}2MdGJ6*_8}+`WsvE5Zq-58|!p;OKc-{CxvfAph z`mu8v`_B?G${8B0+;e)5SP`o(#k0yzs3+Tm=ER&|r6tskDZhk(x8>=AeJ$wPv94Q4 zz3}Xrw#**%qBpM}#mGgZdm0sF8_u&j{as?4yy!b-vFa-ilc$`Hjd{ZDsNZfe^y+qu zar3mhU+l3pi_DF~onU}5LvvHc(%E<93^q2=6^uzssPARf0=!kOj1<;xO|SGrAHqJ$ z%Gc&P2n)WWU;`}ri`ifD7}MT!^0-C0wpRTB2?1M}-bC{MHf`&E##IkLe7_?4gMOt1 z*#H>E>79|ds(3zjzvW_~5Qy>}UeH8GR@^drVs+e7HAu;QA@0r63jy+&^z_l27#=l*_s+;_9WkTV!o zGNBkx4lYr@6i@apQNQsYX7P5>)b3~x_Mobk?d4>1(qV0(s)7XR9br*enZ?@5i!S>j z$<&mU9Zc2~dY|NN?){I8L05CqQKP=4nk z6`?b9n0rUK57%;?5+cVz=@pa#DRmkRn>k_B?nv~1&mVJU)MSXs`yVW1zZJSZjB+$L zeV2OZ$W1Y5`@l)zrh9+M8k@*q*L0EY{I{1f=hFX4m|8YGJ!PKu#2R@WB*W@1}$;{P|BGx7_*7zd;XdD{qaMvfu}*p<*|4&F2lZ* z3(n}Wt+@e-0py6ZsPwA!HqP%+VD|?Cx^T>g6;EA(%yhH)xmR?3N1nGlk!}Qk?gIGN z`7e^_(wv>t!zNBGNpXKnOPSr67AH5pO8ZJ@KyVWxl5A&-PxFi3J6?144L8l`iasdF zIuY_4peI|n?K86_7III1p#+ zj*6=!(n`9KpL&kin`1z4OSBCm9kH?#$ZHx~zi@bg3QKPw6Jb_SNI7no8ruDpJFT&C z%e#yDQW9l;(0=P!bnVn8y*~$T)14#3h7#7qvbA zE!b)4MEgq)$u2x1$lNQ#V&^nz$M49yczOJ$ghYtl0GlJ3BUY3y;{|&~sUQSa1Zp0d zE+}_MLz6jixLq@7=JN4xabF`%AZpiKcvCj2iQY{cJ5WdJM_s-HCs3GX0|#=T#q`fV z;e<81*#I?58IB$swxSRsuW9TCeGU%k5w}z(mofjwa z5wM1W#e{vI2IHDwM@kF;iFEc#M?&Zg10>`KlC2VBSgmTq+`!qao`C*<-DkS4{phP> zvuPRpm8#1m^B7SlMl+>IAgSlABXya?ldXNu%xRHCLYm`Svn>t}!~ z*6?x((zHqzMVQ3nMx)j;zYF%^I|!WF%|tg~)NOrf6v~?5yCKw3ay5Z}qIE*cpp6~+ z@gV2Q>wq(I*8m&rYbTad2FRI`5EZR*{p+ulm6W$JEx5OYWJX8K9j$hK1YQx$xkS{@ zO5j=|4)(3E?NPl}f1T(+rbC84gYMO;WlSS3X-f2MIc31~Afk{vNnO7R`k%j4glvA0NK16!I|I_KAjqJs$u1nLQbbDBc@zkP-Aw`u3Dp-Dm~ z*Q_$%4c61+ZbjW_u*+uePsy~XAY9S{zgLmKp6ATr;7Xu!V=THJ!#OMNmv70|2Mpz!>S(2`_)G41;Vv$En9llh z;$fzg!;6W*eq7f7(Q)#61;m}RLR@wFJ1Tw?r!|?OI*sQ$6n{UxiLcMK1!ytq)`6Pvfwvj znsMpD)xX2f1qW9{gxBhTA1(=oTS z`vbk7V6YmW?HnyTXqpK+|Ky-hj$r&a>P$ZVZYEyJ`$&~uL3p$ph`bA{bn_M2vsV71 zZ&{n7JDRd#^{y)eYERz?5hIvZGD4%o2sKdw9fgt@lbD<7sc5y;?7r4Y#@#4!f}R8H z3*>a`1FI*n90+%-{eOHMEds|jdZ9ysC|sY%IOVuVIv3ub09WQd-Ai0M8FfvyT3M*i zxo^c6<)9K;++p|5uGU1$TPDl2^Z}8s-*7#p1!YDm=$QvyPXBP4TF2}#Dtg07!&t0p z^|6FKLrjE-Tl%ke&-W6sS!zo870Y*FoZ8mN$=m`AnWDU$Tg zUlnekiFqK+9dF*_aJwR8E&R8ovLaDriyp4SH7A6-_I5?;|2>nYS zAXZ~#DAR;HX`=B#*;PX;2eAC#krE)F&T3s$2C9x(XL!#fo}M5c!oGSOrx)5UcHlYL=AEC__eP`ULho;P>${m2nfXjg@;K(Rs$Ltgwc#NIJn!iY16$j~g<**AI}^KT7Ji8Z6AT_tB4S~Dh&LEZ6rWe9sc8xUQZ;W@ZEt@0;8l>lmo6XeSa7iQ7hK_%zXW{ z)^jZc%$N~*1rC~C4OjTFcrzUMaa5yKf$)2*8ud+v{C^}}dpy(M|Nm5<(oHHwt|LWs zQ55B}6-kmLNv^Ae*v#(RZ=dh)kG)>6 z^E&UxV~@SxJMY&yuk$?5m)*W?*k?u^bO}{sx(7mSp1c$V07I}IGCWqe@p^VU0;Nm( z@?XPRF{7OuV4j!P&W$j?(3sE=Vp`dpAOX*)9As~VkgCgAoIr41O#;f2NosP8^mr|? z;9bTN%zViqA8-~t-sZl^0Hu%vXr9V&9J(xwtGTedEKKO!BUAPTI(=7dp>?f}cQi~= zLD(FPPHAx6NzI=$OnYoN@(-baQ41;gwbCTT0~J&jyL#rnD?j2~o3DHYSOZWK%YeUDPWxQ}$sQ+n=MGPpAOY97D{ zv3vpa920+!tP*a#zH-wwR59}M)-F%7_!BrsNoQKRX8YDO>{Xj)!TX?7w2-=U3wK{A zQyxA)gD@ItdLltCh$%O>a@NWwL7q~=7Zg^g8T%a?0=6}yrRo*0Hw7uxf`5kNo@3rJ zG-x~OS`!{qvw7;zpfNe0_HgPo!y-(|%NyLOM7z7>34)Qh8+Gcj6Dqn-toB3%g+~`R zQjCU`1WfIbqG=3uzeRkElYit)&c6(&$Jz|A_YG^xE|vwrW8U9+IvnI|L8|L~xh(&9 z#K@>)g_7e^z_)vBoJ;;Dh*`=R>NL`ej#-Yht$DBbG)2$W+wIG&OCZ{$$K}c6oIVRz zDd2DWC3Bd;3pd7MsMlj{ib`^E4AiT4bT30<8}49_IN2%iIZNqD`U|`FtClJJUcWu| zFKIJdO&{{NOYbOqkoUv-wI94CDd>p5tOc>7N@qkqS#8M29oiU=!mm{*X3KbTiE98hfuhlLqNmEvRR$;#7>4V zhSRq8kTP{XlGAJtD2TibQ>DIyw#6`ol4UB1BI$WwiVD~DM4m%OHrvHDZoD~H0D6{_ zvYRce<#0EAMjVqoglRG(z4mLKGjH3!8^(OKlY@ybyO06(G0>OZ@s79F@XZeHN}7V) zI?VbA1FIZx1GbxeFT@SgGVF5p;)IZOp}b}IK$8n}yDevZL=`J})*hQz73g_j;pKN| z!;8N?dV89-9~m8rVbm&K_o+|smEbrCZ?1p;pOFaPMh6YL5~=^Y=DjkDa~> z7o@!4IQoS0d?6mPw@FrKC|oM54Llz_>gze>{bMzf9rCoG;(UsV2%dnbKV+IbZiICb z_KzHVuJtAc;5ik~8!(3w6Rx<+4WZERqqJxov|$(X0i1YEabo@;)lPeFn1W9Gr?y;8 zqWZT<1-4pC7x!E}dzHC87$|i{zteq*_okBE+ChFC(8#(Ihp#JwC(fJg&!+a)D(?J9 zwt}CH)vU_neALA69s#4T;8HiC&qI+vcAg#E(b{of!3t}`siiqQ@kU2!qGCqYf6ycX zBfm+ZvEveKd6IovoJ#5)sR5

Q@l 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 z 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

uL84Xl%Z4?AT!2*Jxe7X=8iVP;WwS%>S+> z@X0j=7fm5R<%+hA?M+5&1!=Ctl`?!|J7xId!foqK&(&9QRGnM4ecjVT&uE!X+-{kJ zn6pO26i@Mk5xvr#ss)vRHAd-;B?!haFFt~ha`LGxo?ZUt!-A2b%irPf3cM_V?9V2_v~-BOmuQ z@Q$;T-ZJAX{ko(V?_+6Jw(PG1Th=`jMMo03x*k^*f1)td0uBuVQZck7uu zKtw8pQHx^aw;mBxuo^d;wBS1#h0%Ol%N6dIOr;6q-5>LPGER)YQaqw=dMHYZO4zW> zzDp~WqhkLusOhGG?N-wgYQg!E=LE$c;Mz*7+OjLPWmjs;-d=5SL&v-C4w7r$UUF?c z`)yNiyE?UnwyL^Iaz4W9OJ@6Olkx611I{f0Xa9<@BD;lww|gwOx2H3hpLXmhlGiao zSAo{S#A#5y(MJO{vg(Z7>66w*HS?0W_JQsVLr=Fj-Yh=W7Ib6i?bhM`p-4L$?s}QQ zTmmKe2~A1R&4(f}k#DU1hFxedqALa?s_i0*ymC8{BSE(L#?NdD_?h<;T^fGC=PM?E zz~?fPZ|%L(#iz?8KA*CT=hcMi=3z77GY@7aUoaTD{ohPGm8k=QpRGKu*a%GLbVWlJ)NroQ>d z=r44q*wz}`nP;bRCPLV7SgB9J^3v&Rc#{fS57r3i3bONOZW(D+ump%`z*RGdNw`4;fxVHft`T~9>!AB+m z({z0$_T2KE%k}uGkD9AMR!?NRw_LWc6?-C%Am~Gse9mSlgp1qncZs#l`fy z`@&gqwhWrlX~YX@brl_~r5~MFd6!Vt>!n{3 z=w6G0uO{z;P1(IaER?m<`)Yzu5|Dc%`jya8243^xOj-;QJ0sI)>h~gDP`AZgEb;4)Fla=tEtz#(-OEV4_fexffoFt8r#kZ2B=oD_uL@Bxr%UJKwx0+Xa#6R5cV z7V!GeNNFB3QjFvvb&EPk9gW_)o#>w$#g2%86l)toVt9~gh4~R)EzxY-C-R4iBi?!m zO%(|utR$S#5v@{rV;e{8&@P?LWQc4I#R4CU#Or)twbZ@{-o^K^h9fID+#&VqzL>Tx zd;O5XOO|}_)WSW3rn>?s$f)@*hQqa9_;)N7 z*IQ`G1khW@;jKh(++uwQGwwqg7G)JWM)^AP)}S4*uV2JCoWj+u zvW)HSkA>=5>&yeNArvQ%LTj!rd=(*A$G6T}c5z|gZyD}^fNj90z{wyT%R7khEN;vE zHiY{(rkKn**Zr-@$K{xA2)0EpVzeoL%LciAp;d1KlBDeKU&}o=x7N+^+y&O_d5Zx>V#+pleScZ`~XxdH=D(@X-S}N=Lkh4?5dgvgl;Chy~jz-v{y7x1ZA$yfx z`X*8P^3E`|mHS8T;#UMJQGv>?A0Dh6q8d_jaUtrA6JXCSDP9W~F0%nH`ZD zEQgxPs<*4OS53z5AgWY?;-_T2dEG*Ftpb{kkLKLSK$Fz!^$ljWA>NB?!!u^H^os$< zJqiMy$RyfyO1kT~OroiWGW>63JcYH<6Eca;v35s`F4`vOC}jKrE$G>FCea~pJSFr@ zLi`7U!d(>x|1xn?8=P&yCwg#Bw??b{;iXC34~wh9sL3^)WdOYo7jKcf zBqnkuXBhzeSplfPH5_(q_2@2z*#@Ui%Eq}y~G2c z_!+?k`r8fc&9Vh4ba#M# zxyAZDWNs0R!X6sM&P>$e=uLL=nKl7itWV&(81Lk*fseZr4wy_wz+`p6KOx{U4hSE2 zX9V1Z9?Ay6yMHCfQ*JiCF!EDeU!Rrx>R-Wq^+{)4KS^Qj<^#91;7zz%e9)jsv&~cu zHhCsn7_hxj{6&XT7Enlj$GZ3qZXG|C_j+VU$L@YbePku!9fv-Y4Bp$*wAxxNi+k^3 zr_LaJHNF>vFE{CIGMTO$#~Mc3A3iD=V~RVn5E;6ck3)S$ujo;BU%Qr?61;C7;rrfp z_i zvH%}cI$S7kCrq~kRoJM$ zh9SNJhx3jZTF0@xbjbO_`zL4NyC?1={JoAd@tLHo_X$4p-Ds24KMSd!5Rv+{e_xo* zEiEdgH~Cu)d={@ktI282lX#qJ(As->_~NsO_{QWKyjxlM1W(I=sAt1lkI&Bxr=8&% z9Er9qw=2%yTnIvB_+2wmB)N}b$B?0N@46b0U@JF8~Ew;{r|t9<9@E{w3F@ZJWrde)s1|FrM?u-9kqqt6Im`nyl5S$0RP zA3S4iZ`}dZ&t7+^#Cznk;w{wO8F8FrZhM-dy1QbbW|q*5tXYklalzGE_x|C0UELM2 zHigS^d2(2OK&JW+!ikq3wfIG*@(-+V=Kr+VeF*M-g3D>1MB#7c?`cK8rZpw)cOOl% zyAq3qa^%{PBiGy)U{ifj&YYGWCI)FTrb|y*awYM@Jo18Xk&Go$JLw?7KO?~(N)Dc^ zOoX3|OoYpih&P8S0TH<`KL&y=9`5c`AKB2J{t>L_T9pPVKdTp8S2VEbCDcGiLz2wt zA4JS)vrsF9ra|{ab>Q@ILbE-G(A<&@?R{0;7QKYZgaw^eDf~5wuj>?Qt5C^UCf<+k zkxNZW>acK;&w%-i6Sneor;%iZK`d1X)EOjVq@bN@HfLDJ^EsD!w$Vo+3y7V{Xp2v9zg6KTd1sJ?Z#$g8s=k~4YR zAtI{9xu$xlqT=7Qt$$P0ziu0U9J~8}%)JME9L3o`zS`Z}-D|Q|XWyL#v4oAxqLVE9 zWQa_Y>D`28PN$e+Fko45=0rcAF%W9N1X3`j#I%GEAca&CdICu(AwVEB19>5o03q}e z`p8eZXKyvEc`un=YE~TORIw&KCol8LeRNU zNIEFyvAnhicgOso4M*t&J0*s#q9)NG&Y}88(`#$mOw)>kF}09(AE65v%HjLtAO;B2W3fk4^C^ZP^b#Env!NFZX!-(Wlj%%N zKT9o9&C@nota-e)U^RF%8qS8EHeE>>4gpY!R*Kw9>6o;Or|u|YJxkMOH<59%^4f#d z%~M|I+Hw>;gv=;qfb9&`*Tu`59^#*g;WB(2C41@@#9U^}96SF5Wizjk9L6^`; z!*?TF7Ko{XZL}1u{#=8BJpvwMA3(Bn^-oCVzlG-Q#mb0L6D%731M>Tz{5~wd4~-N4 zP&nRn4qv$#5W={hu9w${q8b_RP_&*u$!Pet3{dc02yPi2oaNxZBRD&5YV**#)bp8! zv?7Jp4zSYr05@DjqU|&~YjdFFp&2R0td<3xS))7^7{hj3s4~rTK4~hPk%3v880GIE zVgRa7ft?+;{NOE&C>;y$l%LCY7HEcp&AgZ~YC;e<*yNQQLiM$iEZkYZG40$-qixP6 zweD>K`)T{BJch-L-jW#|u|XL*e6%*4-P$qcqs`hDy9V>o>(uxlFF-tDg)Tt+*&^Nb zajWhE#3R(O@jLd>352L)3_+~=qZ2{MsEv69@y5J&6iqCSjMQI~ID)n)tAB;q{5_0p z)c!q6!CUu#@#$vj+noPDwC$ zZ+WgNHx~r?M+OU%j-Az1-fE%f4G$GR!%O*a0%91!Wdq>GafZh%xfct2d3@JkNF9!A zZR(lEJW*E-*klH$&Z^Ym6xp7y)L%1rf`$(|I1i`1W&mfFuNkl~0-!1!XeW<_zO82q z=?%`yOA^&J168$1+fs*vmO6Si<^)FRxG`eZTt*n@F2YHX&|L(o6Ytar@ApTvBLpAM z8^y;NBKbs_FRmpJBPEVkRdvu7!x$_*EFD)@5^VoULPB!Z2{`KnoOQ)B-#k7uWoxK15_z$ zZ8DO7ZZz6Z4PhMa7Rk;hU6lHq(D@n(p`#E%pgbuu`c4EI2;GVBQ{heoH7t220`4*I zM3fCa_G5Ub@wtl?{85pT zIwR?%6G1`)nJTb6Iy$o{gGEayt*X!bqW2_f*JIXNW3A%=y8d;XAl+T-O9#X4mRzKN zUiPprD8LI6@S*~|sPwU_D$gW>)f_kf8?^)ccJ}eNRE8G25Cg=}LTOjFYvWO2KUHC! zwy1wX(}oKb-dU*NtalDRd}QQFOP&9)G`wQ-bvaLb)}nJ_Z!8Qn&Zn%JOPLAXTTNr+ zW%!jB&Yz2oa(IEjlUvGJaJ`j= zMMhn5MMh@&bl=&tD;_>aVX=y_F#Ypt$H0bMoamTWm& z?StZu{DmPo%=Bze6ZvQTx)E90f+M^)ikkD@CF{_bRog5BR%gO0p9toQzQ8&)sJAa^ z=^mx`j?OD9@){?L_r}cP8-5mktp<5b)Y2V6UWK~6I`kW|zCJhsj7Lyc4=D4#3#wvZiT0^Mm$?F>)p4PwjD2 z{=yhR!m?MF+U<}nfwu%jPy78~%^t$4&)Y*#YpEAuE%j5mmfFl~sVQDd#ZXaoX)V>2 zYpLjxv6kxcT576(EfwL`i1nYkwbUuPcVQ%W4+VQe-@qPvxC?F8ybnkBhksE0p+$<& zAwq3gciOH4YA$GMsZ6j3iM85`!MkzRF7)x%F7z0oEiSg?x3y_uA#Nr`R~v0Mi9W;j zKERtSYvZojX+@bnr~JC2FW~WBTJyoQd`&bRFTR)1d4WJ+nssR(L6`OsnstXwBfJj_ z9El?&PRBQmkUv71MsUV7jo`3pgk)I4q8*AyM;y&OTIs)_^*=P+(X45sqIZ3SZmC=w z;p>+#slomwIr_h>0OT0dz3W6wG4r~qe&$uyCp35`ps9qy#MI<^iTNK25jl!_`%3rfU(ujFT#NsCl(1o-D{DWR<@VU6>zNX z11rZ|#&0MD06gh{{?dog{p|w;O)b=~0FF}9@e`(`ONR+4qUlueW0^*JFkSja6y`D8 zEO{6>6rQ%zgBcE=@d{-|VHMQTCG6?kC{)POd9=Js{){Hq5p=RW7qSVe%gKL_E;q?L ztj>0;w4-n@f2BcMrs{GfyuavbMacVkg!p+h_<4iRPgB9~ z1Kc@M!M$H&i@kLl?{*p;enp(JykCNu$Lf_gWZmOiTH7Epk^8(Y!&id&8%Z09-@KX1#P@1NQirzm5@O88|oDUj9$vX*NpFVQ1d1 zBA;l=T${Go=>P5Ea}yIgT+?5xYSMN+h}-&px?#vu7h_`@3n3h%cNz(sho z18wy+nm-zue8gzoW>&mB6%1aX@o|aQEdTD&jvCvWlLF8)$NT%%PwtpTlKh#T7l-hS3oukJ<8y>g`V3f|ltTr@u`(?XQOWzvkl32%IMg7p5 z^;#6;ITI@3SZC;?TBeQhJ*Jhi|k@Ug-`xyZ@ zSU;fi#Jg)-p2qKH=-O4rl z0I#u$5N&bjfyB41;5swpEX&Uny=Rf>6rp!{4?(ur`G8ai-cbs{J5tqnR{`FYfcGr5 zH*2EL(k@3GX9uv{^lvDeUK~UJziH^l@9>@ib=;tjP%Pf|14QSETFee4&FnzR#2Mio z?b7}c9N4=gWjX9L+c9m{y+6TYEh!#-WnI97etnjM&bjQobhhP+!`k~%uG}!9luE=`~Y=Qr3{*d+p8EpS!AB5=L{3c7;Bpx4g3^Tz(ufR~CI5ozcTU&dJhnmhUlC2{ zp`u4a|3xS%ZZQ_IV2UW63^6`s_HN!lhXBEP>?I?CIuAz+h$+i<#jh=j_6fpl7G`os z7?yVBku@jkI<7T9{g0TJMCsu;$Bhk-BSg`$v>ED31Xuwm9bT{{ENy8 z2=k?HP*jQ=6`-ga4VS!cM-kwJA%%os6jkH{BcdXOuhSL~?nSL)hkq9X`}5lfz8(@f z3op8fPib0Ur1Mcj_x_3%FVUm`qK$}RWftmvC@oam(%8)l|(@sx#zdGVn~C!{9%mdcbg@jVtb~Q=Skg1hGa#x-pt1o<@D1#sZ#_ z^FDvUB!M=gk67_vL*7QDte+POdfEnMY>KgByT!Z--u`4D-Q%szw$bxNl z=@Y1xR6I)IXYg5F1|tz#iZ-O4G{LXKdi*VfAJrhl*e+=nPO#9UR!DM&&nXvmYlaTj zRGWO9t(v+A@7DG~P2{!sVL-6P^?R>lITVv;eAPZIA;t3+H(-U^wy;=OP1%}nXKf$V z7KSf|f|UkYyi1pb)0<;cmzyC`q~B%D^gEG$ClMT}JO{|7bplH1P7oW8|jfR_D@_zZa`5Z>N$G;l~yv2ph@U!u*6x=Rcr1=VoZ&StiOA zn3J^>hC))NdWsNNhsBiBa3hOdGfD!vFK5`=yyYIUIJ8x|t-y8(&ZB-){CMALfHjF@ zg5r6{_{1hARPdF&geIAzt)Z#tDMFf6WU8?O~lZH7pI#V3`1swo56z% z`kNXUpTW48W#irb-*y+RW)5>5ua)@t7IaQ8pDiej@JkV7WS9a%C;g<(Tt_57VHp`L zNY>#MYUTjoi~F05hz$c7Tg#FJ%Wp^cYR?Ya@y zjWI|OJhS0ROy0J|cU;s`J|5d=NEr5t-h;Ql1Am&CCQ(_=d zZ-s%EFWLT_>X(u(qr6&_ccapGutHwYjp3&daWV}ZLH^W4w?3QNY%O&1jA5CN_b)#s z1BRz6K!;JjF32S*a;b!ZZt;V<8jbR8wGk~pqVO#6J)&P}m9qrD>;O^;_fRDtQYGhi zAZPmh!IZkDM$tu8w87}jsOGNP`o`^QP4V+|3vXlAEqDzTc6y>?=i4Hch$n2i1Q2BE zbZDdAHCBcF8$Xc7iAztxw})OqoezpW3sN#TPy}dW3ED`4zGI-zo-B2d$)P@ba;VR~ zPfBTfSjlLk2wd-c^p`gWr-I?v=#@?7K!ESc#YT6dZe->CtW8On@Qc%>VF?cjH)^s? zNtW+{=%QLTu{HUY=Qji&t|wl$*YgsQj2VmB!Q;f>0w^LSe`aM!yd2h_kX{-fXL#&$ zq@^a5jCLUPP^{`SZo0@~Oc_~rmf9z(P*g^PE!e?=Zz1ei(4SlFLqdOuVim@ku zi7E#G-R&|VvzS8q7ni0olK`s*g;qPh2^r)J7Km-(m`*BE)0sznK0f_FzRXWYagNgH z;TQHC9ri2^dzOSfs4%pX>C{e0_nodA8LtOD!c}~_9M_HYrRut|P@W9$Qql@UB_mx& zv(S!xj5yccVRcBGSa~%UAnF97rltPbEXs0t5;x~ zMJN(rQD>UT>}+h-mLZ^hkL;lbXS zd9}sIOsKXzCYQd3o7>6yk?M<>$VopjB&fcnb&=`#_)6Jk7~Iv+Au-EVMHP6y?p--X zlq(y8D58hiOnyClZ}X>u0GnMl8B}Z1b+f!el#zViRhW}`Jl+g{7oN>+bzl=@Z%$;d zX$bB-iV(b|;&NE&Y7s;)o#GTy*0LFFm#)Fwd>0|3SIPHi{Mh-YtuU?|>u?=14z688 zZ`+K$HO#4`PzI?D&jC14l_NRHvf=i7g%pE-=vt3q{|}A53_vg9?Bgl z|03X1h-bDl{5@=b2$IQ$D7FTobSm17TT}X_i!&roI+e)nsJjWK6|$8|x^XulW4cM@ zFr{Nkh7Vo`VTlZOE)ud7w~By>jBEQjx+=HEUi47{U@KbO#!-A~DX3(P(m{1v8}<7T z;2Rp$y_ZpFvJ1KrZagc=%?TtKMY`NRVT$`o*vQJd@lM-~^Zth`x+Iqm&XBrAcc*pk zlQmD&|DWsZ0%5MSt$;lfg6Bg`DroiBG^n%r(Eo3y^SBdn6~6Q=2>$_OIJbAR;oV3( zT7vCY15S$!Bo(weAh>3hp2IRrZj+iQcllAGDoR2i`yo{58`m~A8zbpO{${z|8FxAz zAu@Z@mHW{BtKtyvm*WXFsQvVo+S3-VSaqPc6l1ryFO=>M8rC~xCz-S5N_|cOIu(E% z{^QAB!6KX2MT=JKCJk1%^mR%M#S^`Q5prT}h(I$F9@9I-^6fst*3%Y(k9>s4fR)SP z1~KWXcC$)>PiY}asOy$@C}{4o@zUmJnbImG5zxZ{ok1m`=%z^D>F8E<7N}N6C4w>b z7U=h_pEYZx)dB+>ooO%qOZ-l6FTF`;c}lO+v7OTEFpg3BhmHnp2dAn!W1^>W_=P_^ zI9k;ibxns~2z+Em%ncU^ppEx9(dPdoYS)dht$2Dj6ZGH=>P)huQ%jHPubPBR{)ol{ z@D8SS{(v~GBWWtW&xhd`*+j|HIF$4@P9Yg3UGSlcsm?`+%F2mS&+zLU>3Ahg1-epct=O(bplb>ywylbQ(Jz|Ww(;Z?QS+ikQ z?8WFaJv-V?J7Lcj+mn<-lzstzRe@h4@M~jdpVLQL)@n}3LWo8BWP>)SWxuN(eum@~ z-njfRWNAD9SyN-u@)LDzdaoh&wEY8CS|aJe?p2bJZ)eNpG}hH(qD2RbUc0y46pF zu&2wG^wFw9m+a%p=+5Sda^BfzDOxVhluJS-5>T+ z@wTqC#Y2@>42#o%w?xQLyEoUDQ7i3jFFaf=bbs9{U7;&E6Z8`KlC7Mj>R9n^15$OS zWTo=S!-*_JYTl{tIsKGm?#p(~{ip+Isc{*gj_vI**8QmZba!n)I@s;MHI%M1Vd=|n z!gznPTtDtrV@t2({u~9EBLQ0}z*Z8lwE}F-0M^Mxz+4qTjzPKiGI7LOfkiw=R9eP6 zjRz|ZGNpgM7_36E(hS9=N$JG;@32r3enxsUt)I;EM>I?_R~+Y0GKFuI@6#jI9k{}_ zWm&|>yVekmZl3_aiw}JypA_Lo1{t}Fm;ZE}dS2No{Zasj;$ozG0?D_h*!UIG`t_hm zIGr6%=~e@0De>FW=#=gxAAV;v>Q3na;6pMerZ6p`MH0aJtK0bqLxF7=3#jX5dbIi#E=Y#5m7O-xcI)J~#8$fvBb{9l!TVbM)hPznZm6PJ57SwjPVJdTaq|-8JraRKY zYvA}dn{-l5J5pyI6?eO)=)(^i^8EA_0`_yrsO0N68psaF@GY46?I<9_CtGYN&6k(b zad>D`uj~xKF!9hkhjhu#y@aft!OPbOwMuszSm>(4W3#Vx0;l%T*`=id(!aQL5-l|C zNb}Smp*QO~bFDFbt=6IJ_N`i_83$s@DD^Q~ucq3N%%;O^x$=~|r25@CE1K*me+Dj|A2sP{5&3Mnh!qW*^!Ae8u+9{CI-qUx42k#j}kB zv-b9xC97HRj9^qpo5?h=p#`=X-jAuZcQ%ToklsvzgqXNxDLaR{);5*-wH?#Ps0V3> zdmBj^GNC+7QSZN`eiz-;ID2F1LGQ=BMJ90#BqrkW4y@m!-o)JFC+MoneoZRK@fPI3 znU$>pC&g@qD9=su?@>~C>8DtcxKT9DJ$MY;6Q4|VFLV{1J+jXr!J$U!L@CdHYzw6a zXLaaqWU*>6z<}p{xAmJjw`OVS-ylYhxpw>Z$H88nP*AmB$$Ko|P|a05P}jMDzY$V1 zu%x;>Wwi(C8Lp`mjXkOO{ahmQ!I%|OIYH<6u2~>}B^)vMnq)E zbl=Ca;UgiA<{E2dMxYSPv&3&q08Bu$zvzmS=eUu#t8B?yh#@0rrr(@_$ zRNw2mT154|uc|c=Mf3htk`rFX9qI#^{sZwDz6v&!4k8ZVxAa|HqFV3Ot1%)jqf1Qz z*etE!q@N7e+$O4xb0(z%HJusET@FxO@m661({Bd{I-y?=9|ckiL_7n!0hliteIVDn zL1z_yP5c6gZ_ViyFd)D+G!Qd}tl}U>%>x6zce-{hpg(T=Z^>;K&H=(1gh<3`dkiSB ze}~Hr6ROAiYw?m7OB63qzJ66cW#8IQcw>-|Ktf_K^Sh97_!_E+(gjhuW@Bsb3cR;b zAKLpkWf6*Yq4=GH3pu*z3n49FR^ArUy%B zBWxKe(VIot?1Vd03`u)i)TPX1E-W;#RX;?y4xZ9E0g4{s?A(++n4NlCMPU>z2&7J? zohPLIvSXod$2&|Fx&VAjM@Q+t6v-Q>pXn1rMi~wYbq-~J`=Lnk>0N8ld!EpHGdIp0k@S+)OpG3Apl5S zdE#8@*mSOpLi*3}J9xhCV3G#>%1ATkmOiBC@ItWc+|tMOFcI&4hc|u!ExqTEzN%}O zC-R;>NUYiKMMQ&=)g8`J<9WK(-$Nv%A2`8X>CeUc;fCY==!@X}c*F5N_C@eMzTtTP z`bF?Q@%ea#h#jUx>@Yb(L54^?6CD(Sf~dA9v+7Skk0(va4#_>SEhpR|ucOiI>wS1V_k2XRm5P)EN$SDB3@P!Dn-iu+?ek z>e18-R1fFQfM0YPs4imfkn|oYyO^U@{gY!Wy@F(P1|dr`qeU_v#mD?(dtdGr*UE!X zUexgn9K-`2BRg1B$~zE@cNVW}%g|Xojoy41jX#ntVzG1(g9#t#9;8l-%1Pj~BM;IU z5)k$7R5={U8VWj5%VWX)oARgu4J7k^~ z@#qU55>Ml9VzyYIdkFiB$`JI>%fsXQhi)@|Gq}xogsh*V zR6UY|&#N3R2QsQsspTFX8m?$O*+l5gw+Cxq$4fcV=%HC{cmTS>NxtBU`NzWoGUdWI z$g1w}?lxJ^9qy-Zc6fXGP9ENuzAeK$(|4oc1L?c*@ZR+O((nR&vE|)r*{c(dl5JR< ziRw;u7%YhSc0HcaE5oeh96Dxuke8B&K<1R{u`K^fsQHhis!QRB2*+`Da1?4Q({F{! zOmzvtvc-76N4bvyBt2LygQt54vlc;{TT zszJg`CNhtaRY%zAjMUM7+d6(dZ41lS6BwmD8J=rquc+Aj!YbbqU*)6Xl_Da>r zbVZ#0DFdZ#Y&v)6vKd(^2!j(gINrN7l}1Pf%_A z1SvTXc)mS?qR87LOMT#R0g#+p*q$xdf>G)P@p&fA7%Yft)$!I!nJNk*+MQAv5Sy_d z*wB#{|8Xa?M0PSuLY>T#P$#4I817_S8+Og!M4D}|0qWS^j$`dj)Tg^^ed%t|D<@H@ zX#bkrW~oT-6RC9*sPwZ2I|*^2@1NWi^oz@aF3_k}p*?(?miCO& zcd)Kwl~!Z9_+-Qq3IN=vvil0SE9|}!?&UTu0-M1iu)5$OX5*(&J@H(AiZ4SR#2n_B8_&)z$fDfU20mK&W*aqai0Ghzg3l&bUfRXk00+!jI zb1#503f&7J1~IM;y%%88+I5uoC4GEf;9fu-k)eA5C^)VKFarSYU)*F!D&^8n-Kk=x zZ#!+Pla+pAX~&5E;U40L&sVGrW@d)Ia77E4^yI zHF3mX{c5pl8|oeD6|A0|P3j4)0~y0#!5sXw075HCdIgZufev13rDfOZ>D-CYhkio~ zNelWZn4Txc_iQ~~J%bdO>Y4oc8YLs72RX`K>=GeEzoWIDi0-{=DP(iz33#Li)Zb+E z_5y14>lI)on&NhP*47g1d|Dki)8BGQPHFcOX%?;aZu2_H!|4HaTx7lS zHPS4Qix_}c)P{4YBd>76EvATbzDuYODcWq73Jx_0a}K?GAH`}u^8ml;S(}E?xnbOC zj^X_hhub3QS$l~hLxT`QKd*kfLQfFmqJYSf;55XU0fAsd8isb|!nj)3zIy}`bcS9z zOT_BR2xb2)KT&&^KE1;$I$`sCrGHw=4qwP#DuC;?W%r33sm$uvS=i2{k2(Ab)WCD7 z9(Y}G@u2rEVCUJa>7Fn31VcMmQ#Oc#izGd|-obwF00*NVY2R&gTZQ)36^ht~OSnBv z6wum~kp_$6aD;GdO+Ju0>VRWWthBPE|Dc_(~4mp!! z{@q>Q*Q}&2g*Trs;^v1Bzo}aN1`Ef<_zXV}-Q+@!b72tY5@IXCmmxks!McA$LCxv` zzB^Mbz^!|~LY!{~DJyV$zXo)EgvQ|u{XlOgoRe7xJAW6S7_uFR@(lZW#l<0HK`Oj; zQU0|`HD0V*+~dXi6tP|mD5$d^Ir4dJE- z!VZkE5JQqW-tiX!V)%p&f_(?1wp1@8S^5oX`dj2A<@wv(#EGYK#P|0!Zkp6Z5h|nf z+XiVO?DhsW5oX!rnh5i4vbM|!Y=pfizW0%hu+Y+)v=P>DQeb%?yuK!FgayHR1yq;r zXkZ&*{sKcRv}zF82t%1+BMd=$1-=>^VPUl3K#gH78pvrvix5^yT{ zUXsYoDhOq}8^Z#I9zcfS&!ai1!DQ zi6~~Ho9LBQHr--k)<9Ffl$r^^(3FKj4oTZEqh@3Bo{BGYzI~fbF2B&5BRmyLp!oJ-xVyXF9%G%q)>Mor@#RwGy4ns_C3)&)gzpZop&{H$ z+q9FI#i!BqT5NvKWclv|iS%QXz6`xACGXQ-W6SmWrT(1x`a0$q)oW!Imdrs>)Zq3O!? z5fGZw@4lZ;!*v_Nm+P2@>o$ajtNxdK$xGxtvf{ogTjACIm}!RAh3jaoT^D95#Jq$s z>J_ku*N0oeAQ`XUKUa12sJ1u8y0B1gvNP;moLe_=S8i{aId^cD1A zhm(KDiF9upary_DYfM@}GJ{q`I3;!w0W%yio8qgPDHtRuBplJ#B@NNVVXawqZ;||4 zI%kZ|mA)yvW|`Fv?StO*^V&L~E6n$BdIO^mm5A0uxrC^kJo$+v8ZYEJC;(UoB}8)N zjCd})5y;$Ysvebo{(U>p&u?Hs!bj@fKcwWGq8n{rUH={@`CgFZW+Ic| z%aA;*t^=ynb+~KQ^;?3J6}SU+y|K3EmvQjR8tWU-oHHj$&3WuLc&nCM8|W$_y?VO6 z!Fn~K^0;)3v2;CO3sx6cqnW z7_|?VS}N~1aRcV^EYdc+AZSalGyfp9B~)t72}P=95`r{;kuYvq@}Ar=WgT|wr?u!7XgI!{HnjC zu81MN;n?c0Y|XcMwTHj9LFg(7>+Tdukd$nL=^TV-rzlHH8J(MN8uR97I{1af`Mk|E zKkZ-t7*(WfU6Ck%b*JB)Om^RH3kq|ar2V#l_Udm)`KtcfmTOND?O1=U;nzezVsw8+ zCS#yno(_X}ojMHh7p&*&447P?Y}Q}KQ&kyLhP3okS45(5rYa*!czaO7+hqxF50&r^ zF5z$O(0NEM-*1Ulgm-tyL=3zbl&{#4DE}=Lj*_pR^7)2bdmp1td^u~OI=L&L_%0T( zyLz#H$CHSAPn4wa}M^KM|>j(Y=#QrZbc( z7!J#Cs^;fK*zlGc)VnY1Q>ZKt2W5Gf^Lp5q^*_tPJzUdnAK~IX6q5CW{qj9T7ej;J%P!l_Tj;0DlwNUoUiTPyv07yH7!{v# zAz&?*XJz!qRrJS0(H|cb{RO#?$8XDSPW(mO(yNX}TB2S-(bOqTI&mcp-Cl(4-}ZSj z{y#+g;(Td$_c^js1$dh2&odfzE)=}Ipq95?@$wcY`&T0kZ)cck|0_|A-<4fW<=sU% zN0N)86g*-r7UdcKy#RT;h(w)D<@3ggI9MMM#?V6%aeNU`)2k(+;LGlU#)oKsGuIul z`r{H?kE&6g+5Q_mW*08DrK``_a!r)=aGvucdUzg^u0ACj-QQH5$W;kGlRfvM zxdV%XuQU*1U$ELpAen@p!*Xfd0&J zhWQ9u1*}-2S5Vp|1O0d{FD>X0jVV@;jma*~mnQQAc0oAuPwJdpNER`)!oNT@Yog8- zkNsj?utF(1tVsSm>Wc>hIu5HN;s1;RN6)h8iCiy7WB1e2TbH(6u_uQ*m-PtM;ot3= z^IRD|mj$R}<1EbR^IY}m?pj~EA|CDWg|0O=;GJyCv(@uz`X52vvm~gY%MZ`^WA&Z@XRrth5X!8DFsZ0Q|E-M~8fF5qbQDXnwX*+~YX?;29}(oOlsMG$2ef4%+On*^R!t?*uxef``FWwUJ{An|A5=g&GUh+4C1q_J_gYKViw|CE}xZ zz8%~(z&q)W2J2QqJfrl0+P8a9?%REBoP9gJf&`_98pz^U?iAmEycV?4mb|}C`w|mf zc}10i99s&)UcfT<*KD;%i~9+WQT@DB*LMXOwrQrO<>TdVo)R2`V)7qus9m1bz4HX- zuA~$s<^lty@pfMtd$JO~RRE_e$?@`?q0*^7uxFc~|3N!=oM?Wvw*6$e9lXlzV7IZ_ zPkp+(J|~@eV`x1*GD?4L_}n*!fM@g1;q@a8)h;>elm{wn{5E|RyIZK{jiIpC`uFjQK-M~d7o63)*I0W{W=K!Ik- zQO0@_=v^CD8T@K3Q~{7r0?n^~5{TdbdCykw|GdZJ6_V7v{{z+p@Bi$j{p7PipTjxz zzwsGaL>myj0(OLa1|@r2MT{shD20pi0dd7tL{R)b+L>(Za+%=8w}e=-R26iD!Z0u%*{+;4L1?Cbnt~+#niH^u)qh zz^I_Kn`d=T6=7EXK6DXr*)&7xRJ8ny>R}%a>nr1}AJuh)aQE#g0%{TMf9I<~lV6ym|B{;fA?cD$fg#X^p<@VU`{aj&>dhZ9^3cdI9u54V$w&T%J z7lA&sLo=5TNImhcQe$BCBdI}s5NJ?*XZ3i0Zu&v34)rmb?0}e*?ypxqq#(PnN*>;) zyehz%nVDp7=^)s#vJopI;_<=$k6BBi@Sm|V^pRAC@;|WZ?jL+?k9GgxWBc>&9|Y;{ zT3@>J{pVhP9_$q_mOeI@e6|tt4h)5329LUa22MVqS3adKt$gOGN^c1#hKb~7!d>=f ztRiu8?^>Hql8Qm%8mPCQ$(kLhMZI@rJk;N>giwzt)FWe{9+9Zm)uP^L*?6drSr$UQ zPN7~m2I_SZwdT~IerjCQv#KG~lnSWfs7FnK{*zYKPo(gEVu#l`Ol?H8v!|pz5#&yb z1fR0f{wawld3p|s=-zcS^!>+HrCZSWK7v_p+JcA<(74nZ@35#%S;Wss(5 z49oVMqI)-pSm{{#*k?4_Hdx@Lb=9w5iXTNE%Fbgr(|>EfIa8+D-s`TN&H z!Q`H0I1O!ceRZZ?=?a${p`X}%3f$!tmXsq)?K-m9!XY|n*Uo1cL3-9S$p-SSmkljF zLpX)*{kV?dsVMBlrYPT-qhghC>o-QhG@Y1ACJ#_wdS?^xa)~x7``?vc@55( z+EWDJ;XgwBY=Z+Hv$LYV25W=qm9QfFtXf~$)0crFo_cf8fQB{nPXw8+MXqKvZt(_eRSekAKS={QfQv`P2pvd4k(Q(aDtWefH$Ke2-K4wtRlRJJsYn8Tn=x22{{HB;!-D zkD#K3sQ8uL5~4!$*QJS$&!wWRh6>u)(RLi5YVB9e=vkXDF#gr=2e795oIls$Ws{f{ z>as=}%tJbDYxpAS8#ttz1PRvgN$4384k=dn3^!tDB#xH2onFBgN?eoNt3V3UsW@Kg_P^1Ao>HVMisg5O_W|6X6PM%xq`7TGjKiYm6+jE{P+ zZ=zoYte`$0j5U*jv1SrA2TDd@HP*;S`poPAX*v6FsB6*#eL##0-jSLI`lR1~pfAD? z^hHIxN+L);&nGXe+xeU1s07maE;SL%cc}x~|6lPiJBo)H=3zR_!>msSrok^zUrIcj z9Pn^5agUM_xMsW_WLT6Kmv!Vbnl+4*exGr|PqsJjTDR_y?Td?35$>DZ$fH*%7v9fQ z?$##ZkzLd!_GIE|#^-4^;AxgMb$O%YUv_W@=v2ky;is@zu@Q>$r3;V4y3WRqKO2?S zh%~L*N}Q65D=qL$_C7`T%28HS=6df0UhVBZ?<0843%?DN(~v+Ro9lfhwXGJ}^|UFa zq>Z~g@84LAp0CNrZdB+dGW5N0=u{OtRU(@vzniLnO(mdR0op@4*PZk6##@fj8E_R20u7V+!-5?TgMal&|7ArtGHt@*A6@q3&`o{C!qp7UOk4f%JZslKs%ROC zcK)4TzO=LV)*xDT+7<`jwtGTX(XtfnjXk%VGW3&sgJ_edy|t`Q#Qdj>HkqQGIrrp| zk+qKn(ORahz6}3fl+ju!+7*}G`1^k+UksvcH0}6ZzV(51$g6isKSle&H79@j=X+n= zSM0x9l}wRdP{b8f_63zeL7|Y2jV~(*T)+B}@yZ1rvc#G`!3Fe;i|#&u|C?{`D_+f9 zb}io$+JN9S*|7884TN6zKA^e)sK2Ot|Dm9uo{Iwo?;x7p`Yp+|>m@<2paT+9d+LW| zn}U1H2Ic2GDz7c4in-^MaBsw2TQ27N6X{emH(mEWM%khlcP0$l33e7OS(A%O_mVZi zsw82jz2FDbNEZn~2l{^a>AH21jxz#Tub{UrJq^MGdB)49ZCaD2wG8r3LW84p&V5y1 z&4#FEg8X3v<{5he=j@=@HmWlmf1X_Jc4!@b7Cw<`9-l_ji#Td5u(j(&SN3}v6OMXP(wy`F09{JnZt>eRK#~-Ps&U= zxi;J+H(Y1c8rLF6rXZZWc~;5QK|~d%)@__noF5VVuI)F`&&<1KLc-pUY#*{C`AUPVMO#?lWe8 z*&s*%)JGoNYg?LXKO@8rQg`U5n|$0iK=QZxvLE!3Bp!O?k#F@Cmc(*9QnEW|&*9{S zMPDfWqF7EhV%9kOWm=yXb^N#L<4(rg6|e1YThk^zOav+6jMj8qG#Jq- zs=ZYTlc&uh`Ikw>+D`F<9B0ePa?Ly9;dzk1M)C6J&*jDJTeN=66d>AtBUXCK~kSS}G%Op#PP>2MyFc5baqh7Y&w zK%J#t!Ivd%E(u_Dd+KQ;=xO_i8vJIm>DIZeZ6%9(1VE+^A3dvY>U*Ef?km|oFkNzd zci2X#IaG>8<@yQkuDrtgeaL$t!OYjpg}M?G9i9ryB%x9A zW^H6rE0zhx)Ma-Z;yg~IXx7rzGJW;xu=uw9LF5{5)@*vb~I@1&S4-z~;meOUx#%;Y31X(M)@DLCSnZ%5uc&*n>Vg$yMp^I2NPk&%4(3Ayr6& zPC_;^X(Lh5?A9yzMH|Rf_d%;OK&iwT@^>wz0c7pi6 zLA(?!G`o&up4Q0fw@&w0&W8U7ll)z&!bc{xOF7&VR9#C{?!rEwA1IigYL)FKl;rMiOaTA85 zy*|X8u42kti3sXg$m}tX1A~XRgv`85GP97WFpop&hi4$*9~7{BR5l6S>mUKg?MxA_ z#H&QZ5SI{*((7ThVHpA{=R35{!yd5eFMiMkQizr+MPR8EF$!H7_FUxDY~5ZX!|<(K zCvzar^(qJQeJ>pE`(e)wVb2ew6!Y%NMnY%B0}5{i=Z2V*KjiWD7IcT`Jq^0m$EU+A zp+B(AteD}=GNF^vC!sI2?b+62ji(;L3%4X zya2LxGf0rPO@(u9RLllpKnm~5u+4%Uw2mQuyG$U}F27of!k!??^i2WzmtUqfj3s8M z1Y#nFl3A9i3ZgGV9!9+ca>3$UFuj5}wjEhd$!uGeNtQ*HEhv#XXSA!9EAt)Tu$3eRnZUO^>DyMr)`74nl=!<$Kg zDjnwd_cB`4*d#PtFbPD!&CnzI~pyF7MIzHmLnZ9 zfltC#@x_;Wfz23__IAf!MyO@bC1Cwb{}M0>MkryHA>2z%4+*i-_d@p0K~c@p?l!Dye$7?gtD0!ZxM$c5rqDP+xJf$x<_%VBhOVTn@)O# zkkhZXHwKB{_Km{0caU=p$*SXIlqi?9$d4A1`u3B=3?~-7D^&RS04km>YDUA>*M)fXoBT1LhlG9u9T2hdU z~W0fC?R&P??es@yg5derC1s~TL&`XgNp@)c3<74ZCV zM=g%k@9*O*+Pi|U%U>1o%GU_?lwLzeouTH03yNo!;z-=-Cq7cf@xpN? zB8(`71+)v;2=>I`Moib$(`%6tZNg$p+gk$&b!@)6Al zA=(Ua9v_XUJB%oYNbiODU}}A$3?E`1+AuO{CUo!yqq-I)XfUhKL%E14R5Qb+>jtXq zS$^qgz4$=YCL7J;y3x?)sX1r$We0{$2&z|JrrvEIywNFf&kENVM=13mi!D_aLasP! zJ`kEOC(+{}G7bHK==B6~wg#5{&Kkv-*16rafbLzjDZ2fB9Pkm~39t-co*q+#Bg$8G+uv z1kT}~IrQ4aFCBFBJeR_~&yPg?OlY7nJ2Rm{Uq(cnBL|1_-vlCS_-($rNkRXn!|}tN zcw!L+d1QvJdcAk(D0ecqg%e$!GVSQ(g7+@=8@%^$e%ma46_MVj1v4BBM`|}x`hf0L z;C{f$#rfZd&Tbjnx9jJ-?}DX7YpH}wu?eGu63R*6viBTJgh>v_E#_=jB6w2}`z#HK z5_~zp8w31w7C9q!B+s>2Jkb~r?2+s#KAs^(C0pJVD-pbB|PTM-L z@KN6BZ2$bWUimZ>@l`~0go?fn<4-6aPH;PX7zf|dusnW4p5viu`9Y^U!Tm0r89a>o z9tv84h-*_Z@52T>Rf}G<^bxN1XfndrWLov+SYxA>!h4l6C!=&SBFt01Q%TueEl&&m zM-9OLkt6c^4xeL)2m&6M}#P-G(h2S8Ydm3 zk(X=&RzFfxs8dj=x9bb_df@ygVx7pnZ;REI6>7qa=JI!i%ya*3asOSD{Efi*X5f4) zaQ+KOPYSK$;f&Gdd=I%@uRzQ#u4?f?H&mb+H@shqG?&v=YVNc0j|#5M(kmY^!#?28 z2=!(GpK4M|CZaXw@8b@G?%27UFXJkmPt^z^=}d$qXFB>j;5CS89cr)fQ}ipDelcTb zT^z?_aEBP@Br#@U|8KtdD~P{b;gKzsUT%6H3(376{+N~Rr=vDVZ_B-Wvqe?rNMkVqJ|9r%Q}DxrFeoQNCF3S(K2EBTnPE*Ve?nCWzbb zqr1K)%5_1MEytvz%};n^O~M}p2|v?D(Q#8v+#d#U|Dq{$->-@Cy&%dh+GskOdhupc z`R;T4-4FHJgh+d{pEh?wO%xx84IIhbLE|8}B|tD+cy9>2?d1KIYK>-ZLE~pMN1luMi;=#R9C0JVj)a{R{d~3n#b}ys?Y6&TWedCQZ)Nc!RLrK2 z2*-yHGDPxEsdicx-;n^fdEp6SjK_fVCEGC^#(%l(B-^8xrpzebT)3P%AT$4bIu*&y zh6UM8ZP&WgYR?v8yX|k|4V;J+?qG!iFvhkfFpbftEHg)qMR+FoU&w(@w@=%#l@5_DA$RyToXd&k|lW)3MKYj zH?v(c6=`=Pm$Lc(77%ZV>|!b}b!@}TKQ8mTpW7zpAq@@dFUOa-9DDdB*rSg2=b3ig zk=4Hd?cJb#lW}R^BSiJnGN*^s{1~!jd=A|?Thy(fn-(z#j^5u9ULs!sYD@7KHNQOK z3zlO`l*1dp95TC5aUPRd-q)e>GsF3v^uNweTQRU?{@D3(ov*iDa-D;ByGf>n+U4jv zk2H+Y4!=m9XPI_ti0i3yv^nc@>U?viTgd%Sgxvd8uKeS+Ir|HgVazs{4YxVUYn(P` zYPiSmg!4Oj{rQ!U-(d>(j~pDEMDA9*=)cf!;gr(lxViu6eq+O@96nwMjxO&PP`X-D zdZB6ysNd)pkj>9&)AQz!RllG3$CU5Pw**I)XBv8LqVLN^{YXuk9y*=UG4E11*BaR_&gX)Ua>zW^FTMZIzW&3Fppcc>_o z&jZQZue|fgTO@D4UO9-o1MJ0`6Vg=?ThI!(&XKE#qFYOvlpVqjQZ(BdOyk9bO!?yx*w(C0n~rM2LSu8aJKWh~t@UI}8kY zqEC+nRN79lkPOpchJ*Tj`rsWX_!Lr9I~>-Za_D%X3wqrMQw(}9{qJ~M7?Y=kMaeOv z{P#@VZuk$hoNkz<-`4r>kZYnA?e8SQWq>%>mZ6;rVWJT2A=1;yMdMHzrZEzxkvb+P zI^>$efAr^neD3RWXb4EKMaK4`|5biV#5cL2`DGFz^vTQ@$#_Uq#gNPy`Bp`6p)?|*DEoS_h+u2H&_Xm|;dtl;72{$r zL`6S=P6B;|Ybk;I|2=ODHN3rReBKt;$J@esdD|cGcJ6wrZhbX3Hg8R>TjR6da!sDi zinPaQG_~Yls$c^IqhXZBo9$}T(gs>%q|u`8bAwSG8K^JhSaI&lbG-+62U8j2KbXh% zL-6tbB3G;7qkHzX;DZ(T-~ha(p;r!#!kkKfvC#30KzW+>pCA1D(Y+UbrH|1SIeBq_ zZj)4zq~mN=yvQ)9sxBloL3$34@{&G)r3dAbK0HS0A$e%z@Nm%KH9?f>VSj%OXB$~B zqC7Zqd#vvr&earAGjg`AHwv)b^3GA_@0ibL3HZ&3iU*t__?oIKJ&E zvZKnTQePrx=9hoz^DAmAHyJPZbMXdfcqtiK}NAuqBuHA25^k((W6i-VH5x?l8Kja;^UBrZ^ak| zL-Y^0`?pB+B2?2$=*eD0xklg}+7LpXHl`l3^t_p~ZTjFXyy`IzsEER!?7EX z^Lomsahv{!_)ft5r*cFTwsCgGIwkH@;k%=BuMmH|zlN0Pl@jH*h<-tAu~1#)gD9V! zF4FwFLll&)0(Y(=QZEgq9;{Ezh1p_%St<^h%!#)Xz~e$Om((X7@-I|v(afUCfoV$5 zaXOAQIvqVjkPa@fn02(Ue+mOS=BXqB5`-;M`n{>`ple!_;8_NCcpWQSek z%#GmXQ@o9t6f@AnF$0axdRzE;56HGM{e44XM#%Snqg1w3ECY*MR_`1!Xu1wADPGDK^i=OzpD6=VTJ8VmD98OVO-{xI7$!HtT{-I$=s6`mM8QIUU> z>!v2q?A*2crb@2#xlw6?L>dH1#q`dI8(Wl$$>2h5a8xaz8hv+;tXrpd&J^O{)e>nf z8K@%?5NV(J@s3-j?e^lS6K~n|#lC6BZ5w;?+NIC+1=oAU1SiukIvr>(#eNZ&#ruW6 zU<@2HZhukk@gE}_#Iz5*uU>S|`%m;uTlu4HZ{2k6^W$bR?e^@S&O33^Ju1THbrA~F zetP({rXT(DoW5y~ZqjqwvZwN+$kbR5!(NOl+K91ovAJ?_fgdRr{K=;ixlL^+zp?G~ zi?HsAmMyOnna(Oh09O?YZ2A^qA3DG;YD!)A-EWS~_x zNs;muYshEVmMtRtCc}|gS_7OFqP-rR)IuBIMU9IvNc^Z1+%y+M;D;ga+kM{0wW05m z_o?dB??3X+9a~k)=r_*SeWkP3K?=+}a>N{t$}RO_+2jW!I{=_U#(}nh{k`!>T&CZtE3f<2{ApvrN4z ze*HKCi|&0S0t0=rm~gyJDVz5MoSemkVeI1+4>C>sDw=&gWPOaPt%vG~Ai>Y8dJ=hk zj+`7-b`|ih+r;tsp;wS@rmy~M!Ae-)=<=WJm;Yoc|H-xG7bUZ)Wa1a~1qyM|mPs|J z{6uHRd?8qE*mWFijSUK2*u$+&Ifp5lv}NcvTB!+2W$K_o!_>djm+kr881 z#Elf?oGm6ig5f%@_vn?XBB(#%d+a4^98nzCF2c?L7ce?^U=Rk#(u4VgE54b*Lkg)_ zE+*amsaO!xjSY#EjpmS3^w~3z07k3mh(DMCI-Rq!z=aj;=6l{;c(-x8j2M~HsU{pe zI1>??m_K^ujF8W5%3wfi8jR%sMm4jm8(m@)2UBr3?l#WM%e3*weT%p<<5h+E5>xzf zpMq6JF-*d&TZ!Y}CXSz}7!{N0;7&MPD#0h$8c6u1b&8_&0}07Rly^BNkz_bako|In zCLXR(%VrrGB_AT-Ne&3JX`x_~XePp&OLGE&vQCt;gOOtX?@F37fi&e7eGx%Et)>jV zghh+B@>p~m8?mq?$`}&n?@)dlahnrZd~~Zq#YyI$r)X3BP~{N%PB>;H|D1|=s)~5( zSP|Vs{#l{e4bt^&8Uyc(!l|I^BdIP)IR5iCnb(l<9}rHDP?^n!|_-LhoJ^L{Kbn zBLr3QB9!s@GDtxpLP8uj?sKEB1ijU=impxhyOu4S$d0zR+*p>Y#7*>VgP2KFQPNGi zjeW0;JLVoJ^vjkvMlhtK@jO;*$6}D=14A}BfDNn1zy`s*4 zdY%7_IzKuVse8?6Td|#}&r_nx4%lU?Eb=}-t~ysQr0E&1K37-r9PcuGGS%;}?^5=y z;?HUZUe2FOe5C;@MfKcT?|HQ<#n;2$JF6Fjyh789MuYS0w zX*@DQr88hr08!E-4FFPEIZaAWGkd=gDtHB{x@>)7_2MX5fiswcCh?S1OYo`V9+BXi zobFqcPxXBEeVec#F>=PYluyXJ#|tG744;9sgQfMR26Id>7G+QgJyC%d?4PlT$n9Jv z>OAHF`6zIJszlzK#(E^Lfq|+ay#i8)`Z@kU%okr)5?&+GRP}fkf_}Xd=RK_iZ#46$j`J)vL5k5YtYxG%W*NGa?uf5#q@2q(V&6 z+x>>debDIF*N)#8pGbPUH57#U?~3cgvv5HAVqd^gQ4aD`F%m&4gbjPRkhY;xPXcHE zKv`p?n2M!SNf`IuA)TV5hKvsdKz~;VIR%|=5;pderP%_77zYZZ?nLu{REE48Bl%xR z-U}|E$Yfcz5UQP+4Cp?DzmfiIk!w7QH42X8HWonJ1g;8qLQNI86MCkx+b@L}`6ESo z&BISGW~X`u%_qTZfEfuhC3*?68^bxyIk;gItGAr0*D-Kf1#1PTzTH>+|5*DD_^7I; z@4M~Zts$GhZW01n`jQ3&MS91A^qPd;rN}};QA0v32r5-UihvXa6{IQB>=jTE5euSX zFCZvZi~jX+|8XxPR*GTJ)FCMNntK`^gne^}Am{M<#v8aXl7=}&~w1M`JH!5<%v z7Z&NwFsF-NT857+zS{Io3&l1zBTv{# zcKVYi}aQbTqe`@+`2!9%kHl3-Nmsl&#kyu+eR0Fb`SSKU9 zOeX4xI%>%(>xh&Kz9!ZQQg!^bp|09l2g+te z*k^-%R$h8d&*Kc?GMvQW>-Fivu-`6xbAWGN7jWpSgPff%z-@gQ><%a0MozfSIoII{hZGRbJ4}Rx z#LNqjj!;srX@`*HXiIu-FiK2XlV~#A^BXB}t*h&BmeAo#N_mOS=DkF3rHqwtS)0f; zwz;ERGBvt3YoV#{1g2R_PQch-Uju$MHWW7Xah7}z$cl9QwF?%{ADi=GCGBDWgy`4D zG0z4P98^)kusPZ!{7rS~N}*M-NwKSd{avxEfo*e-WFH3h9>uN!_C3X}1-5@!vg?37 zrP%er&dQMNBf$Dp>7&3_yH~OsfE}aQjlgbK>|?eLG>??|W4%5C!vd?3aDfR_m*DCf! zY(d4o1nkxKOZH`8XDap;U=JwvRbUezknC%~4pQvvz?z-#4PZB_(*3}mRqO#^TP&9B z!C3aqSoSUKW{Q0q*mo3r2-xH$l6?o*5sEzw?30Rp7uY`)dj!~a4@&kuVDD4xQDEO! z?EAo`EtTvCz>Zbyhrm9i*pGnyTd~K0y>6LgKL&P@VvhrRT(O@3TW7gsKLs|T*v|x; z=9^aoe|}v8WBn044wkG^$4Mot)p2sk!|FJtWQ{tmTC!FhrB-0yXnO;py7vH^f1}u#@l!ZmfQ#> zc((IWNjL$-tTW&^_B>bQb(7UNrj^|CUM&1pq8Z+A1FQt%B%^x4D&bT*<6YqyJmVXq z@SmgPw<8|T5MH>B3C5*8cqP0!ksKKv1 zGvlm!qyy}!2~lR`(#KLgMljoBBxhGP()wnnX4JFdcqWmntvC>g30rYg5mU9`Pf;&f zn7aXPN1Hzfv|7XUL>y=bJwwHSiQPdf5CF7KTfE zDW>0VwH1zmT|g7vc>lFBl5xdVmM8i z5QilmTpO)g(?!L!azU*c+f4%h|M0E1ZH|!!&eC!63t{8f`2bsK(m_E ztj4CQO8^hXscGVFc)2pujhA@YZrWN8*r-jYQV9vq*3_6!k(oJRtup z^|N^BiF!y()}`6jiz%OJ@G&DX?^Sj3Uaat6?b=#=E!>l?Lfbd~|F8|?y@}wfo3@4N z?k*VAS#D)K-3Zx)y~dt`U)7*8!VXd6ZTaFH(uU3LYriUz4Wvw-8tJ#o4Ky~W|(u3)Pg{1&m%JLL+ zRU-U8VLf3t4Pvr~OTeDhrjxJ?sf-fnq?FeQ#^~@flA4?^*bB2i{x%;b9NhD@7KkNi zws5u!-m9W$Z&%N>E>p+tW$UnOb<5|aE9M0=p!Pb_sSPL>xBr`5+T9ZL?+ za*gGQq%i|mF})gSfjY4~i0jW{D789@v2aJh%r&sF+7eMj`^WM9d&O3is9Zu!TYKQL!W%b!fVJ&Yvj`I1|eB+!&=F9cE?;6!BVH-0ae-s z*iRMP71(;~B-;(x$%^gnj=5;+0qj0i+7npEddc?x@S6K9VWz zOYZTN(DL!Pg7w=_H{L8C8q=AJ2SuTu!~Qgbqks_r4B_58NRCab zHbL4i8q5P>aP&Yx6GcO~Xh?L?5G(>yuq`Oi$b4ERq9a%>C=HEP0w(=i8O&O6djxqo zA~u*|Q78s8oP8f=`mVk$QZ$_F8XjHOaCBoBJ2))LK{SrGL1{#^(g?0*3e%}fr@7@j zu{Qk1S51rj{ZZji*zQ9w81)GE<>GPTgda|U6X8XDm?$jN#knfn6V8=JW=A6ugel1h zm`nWeTAfjGL%jkR3INP&#Zw8G0>B`6!h@dNOP=8#IF9gQd|W#P0c+j#@O)l$7qjyv zOlQj6Q4F=r7$#E;TU87tQ85(!%NUBw#!y1QbO0to3^O@~lCm)rmy2N*`+hgm*|9Oy zHe)EI82(Z*EQpHX_J0|}tgZlkN{>vEVm5pIO0mT5!g%}oa4D-vzFt1z;OWF5jOqa*TP}huM9mOzD#jrgp zhV}n4hNWd=SVll801rb9%Q=Q+Wn)-cE{2ut`zofZV`Hdi#;}QE_)x{LD=LP~|1yS^ zWn)-Hz?}d*1~IJW7*>^yVP&}(HnH!UnLZgCL)eVrEsCMW1{uTWQ8B#zFJstLHipdv z+zr4R5W|xk!{)LvY$_MScJ_S-)2Cu%sBgybA;mCW#c(PrhL8Sb4BN}bu!Dem05}RU zJjF5WC>z7}axv^?-}f-x8yiEq8N=5U!%h{$Ur{l9^DkrAT{eb21k45C3y5Ja$FQet z47+1vFqi5-sB@c+>+FHJeg;%r(c$j2pSsl|n&sd+A;S_ahZjmQf^t3Xh_V+sVM=r+ z&=&bjV&FGGnaM=eX&D&42V?quQu%Ggy>c_rpHl+Os%tGeN%eiB>cg9U9-VIO7{#Y> z5deSj$Cp1N3rc*YR!NV1E_H$ zm>p$LTtr4fxDCrL9k|Z0l99bqa>hX|#3PEq~wR5w`l{Uit8SnM?TKAlyst5lk|L zLZ%^(?~8C-!BM%V>^OSlYd7{W(G(e8XVe|MIEOP_Pk=q0*#GF#)__|XMiB057$K*2 z&m25LCkyI5rcFw)gx}Ekb3cU>U`Ns>+`YbY^R|Y_eUDso_9AjJrtk;kpdZdt>t!ft zb~_%P;q@`lh{uiV<1;G3Py#g4j!J%1>4FlVk)LTzeOh%EC;=LoL^?mIk)?+7$%=-v z?$Ky(Mss`tBzpRp=?NM$HO1L_+#W* z!-mk#N7-=$eY#6rt*57;EtuZGC79lTs(b)r-cEOU_^tyUn0uTz#+cn6c#YU&*uu{X z`6+8eSN2+G0O~a0z0?f1ZZtj-y*GMUy%(>f2akI^bV~Cw^)Zd}nDZ^P0q((2WKbLY zZnnX20&UhA5J2Qtw|R@HV%s4EbT3?1_diN^FcmO<@iO?OvUSat{SY5R zVQZ+)ih878m;sYgTolj{0LYs1Qp_tn`RK*oD9Oek=|P|{1jkOLWi5i^$j{2F&eVo@ z3b#eF-~{s}31wD`Q8^oR+A{5NXX6JMvClE8yRY;d!yKZOJR0xITq^LZ;dhYXzR-0F zZV=NI{L&`FV+$w1IKaQT;k$&QS1)?d!#~jQ!H$ygF29%##Wb6-M(!3lj$|h0e61Hf zAP)4R#rSuL`0FC5@D?|GAo>EjF z^katNsh$2Zd(&;vMWRoE!N{MnedMxs&i@xX=PK&gG-oA}g5~&(w)+nqkWY+Od#=jP>(O1f?GpgV)2!LyUE7#yD z9S?mdNxxr-2T?o;|0aWy#S^6zWThmg$x-u$yvM10Pr=-zP|$kRFiE9h0wsm5U}#ij zbCRY;pD(Bl*o@6n?tDSHtw!Z`Pt5sZh$wG@=kpejLYtmbwP2L!&jpjkAHGeCk7yU* zN(!au6S4+<7{*JMjrn5}toWgnh(p#O0QfM7VOth;rUT(9wz|p>-N&c(H=uC;-7uZ) z#;85wRQbM_FgT@Dk3OYTH%}>$1K88}8cS5(({M;keH%JU2-^UVsRwaW<4mtrFT4hl zUehf4LKKM$6tC4Nd=83gf!jN*MKyQ^LW{^n{2p@#s$n{!m3@BN;fnJPd?B6Nx>j^s zH^uosjoQ*xzOAp*qRQQ7`Te$%L^w}xg4^i_Y_y#L6KudJPV$_^ws z%Tw^(W9E`PM5e2nrvI@{Y6Uv9X1csiHB;x_%gRMW$AP`pqpo$DMdu+draPulcdVqs zo^Q1k_JQ6}Lv{zyehd!Pn*G|nar=pJNHP>}kTsr|O)=s$|S&ZhdIGkhKWJvEv0q%QW)9XR~w~ob@rW^*!>s26S7XZhA$!4OzE6=%%AC{DmgY zkZTUBE%KdLe%BlJSZIm!$tYOm7lE^xZHWqdSD6!e;a;#ArZvtOIIf5GF}xx;j$9pm z_5ew7@j`ZK-uOUtiLesSti#n+i!st9s{ho(xMSyzvo0|=atKXJU7Uef?>qq%6W`a+IUg2-xt!@5TJv)p*xU!h( z3Qj&QPlTd~PKZ^kGB&Zy=w>sP;dYbSRjH^}@cR>GE?-d;e_!3?iXv*SmCfwDEz&A# zQiWL6{vI|wO=GNfsy)77#wKCcEU zs7ds>wF#ey)Y3GsG_R!DUVE<@E{iBTs-(QhsZKKQDQdtuMBJDlqJ09`s`if;cn08=o z(k{BJBbF838g;KLUY)yGrc@Ks5o+Dk7@YbV+)+B~ z;`$w0!&triiuJ5IF1To^)lb%0Mt8tvb@zjAD(LpVjP9Vz>b?iMgF!dfF@95@n;OX~P`b zeYmUK4_##gbpw7rQC;-_21c6GaJg%Shpu=Yhxe$vux!DyP4e{;7=Hy{Di(%RLFQ)3 z!l*8ordSv>1urUguqW!;gRUcoP@KJD&%rP+b+pKGm{)q!ytLdM^SosU&g+4~lk}S4 z1%3m4ts6f#iBjRi;!osV_;W=3Np0XMa6c&=!kfU>!g0dx)Z?&79IDnMw2x;etbeG7 z-<9m6JS<$}j^6LHW2{_XQ*ODE%NBCiM$1`H&aG#;3_2GE)Ai6oyHRT1S(R(&l-N2% z75&Oo(S(a4q9a6cxgN|_FtVxasdy-#iibv@iZOoJdSV!zREMj4c(fLF>Ib2TJtta2 zm3Lpd6uPmUVDAL%ZTJIUZcV#6EfV?(4z5qDSr`z@nxw+bqV7@{+9BIVk5&uae^jV` z+D$0Hr|!~fg+2%67vaw(_;Uu(nQ3vT9U$$I|C@G@v`77K+U)u0|4loYw8#8!+9{-c z)BmPjm9)qHZ`!G(J??+gu14D9|2OUGq&)$&yXp_04P`ooNIlSg7UT-kZVJIK+CyvM z4{U=Gnh$uF=-zTOXxELK{dMTImO|i&n8HGPLF(GjK_KqX3Luk0rv*ugZmo%+*{#mN zM?$G5gx7yVy`>-P}H>40GO}O7s4(*m)nW1Fyqtuka4M2g`C|z8s+> zjlx}S-X|IMufE=b?|C+`>Zs!}iiY8`9{$q%p7BP}aD?D*V|eEozn~W0BE)m{%Xt>Q zO?Cs>y5aJ+(qn9;vV-uzUO8wu$-(Gawp31+_ar-8Wc)Cf50AS0M1EBN2RSfceFtzQ zOC@V$q`L6Bme9zks7o<WXBI>wlFylyi$9=@iQ&D?7A z>HvxJO~%nN*Td1z#MtIo)8^n9&6|{_yiYY4eOc&Me?`FOl>XkzUq6(R=YqdO6ncyYLj_0JLpgt1S>d2uImgn>}r0_)R$uJF0f0 z{mL7_bECP?!)%ecaCI{WjsxMh-S~F*JP%&4FYwSlQqW_6fmaCb<<5A&ho3{?L0#*` z#G+Z$KZ`&lTnT=22IZ*Gq;S138w^Aq<@J^U?-Xb^VmsakOC3vkD88Pijk6X(mE-c= zRH-%m7A}{;O5|_)>BGHGn%|~-52gTX5qO(9lZ3Ov(W)W%QlT+a4~!!t)HQw;mf$mv z<>mCUV%9*QZ~)|LKFE?r5gbPvf=DCyV-*H6Leb`o3M%9@{w5B+Rt^ciddP?H5x)HD z1B&kfBTj1((ENGBVDqcH0SXpFqS9f}3H{_c*`A#FOi#hyC)M5U;Kjt^S?J9X$e;D1 zeq7MPp72rQUJ%V}j065g`daWuQqqpgn#{`S(ci|c46puw2t(fO{>-pNEN=Mzd}T5e zkk#qokNEzGB^ABXTprB^-^R6yV{e?C8*I4OZWnl_iV2~8#ttWpXs5%rEtn9oqSYr1 z80RslXADRhH(;zcd7P2Y{8*nYa=`^pNo^4gqT~pIjXPSC*rAMOLD-fC`-h*}%@v3Q zt?)hN4BZ*N8TOlEy`;uLza!IW_1nY8qRb^_KP$&3?9(Qi(_i>AzU5{uzT|^@cEws8 z?ur6Kv-l!FMesMvl5Q=65tfxifK@L7$-*3mxI%3LS*LRSqJ9?MjJrlal_O0pJlEN^ z-J-s3n4>e0qkxCDT}-eg*dwQ*8@affBs#>T3B6?gSR*fdH*9p`Xi(b-Gz!tQg;$yh zR+2Fazq1Jku7Au;FQ7BPWS_P&a!E1`S%{d z&^=<=84L?pFMS4@9DyVPb}1m4fZYm6Az+UJsuHkQ0jUJ+Q$RHWo>f3~0-jSqnv0O< zO~g&e3nt#6Y`pgBoOkti6j#8hKW=rWWR}2 zA>@FG1PD23BAoI!O@veY7OXw%YWK`3ecNL`|AuSt?))3NZ}4VHTIJ$T@w9C%{sDSE zU3-UxTqii^&G=b>Ma#q=ocP=fECnKs8c$!{ZLHx}eDPmI!#DTv?OS-WtLYyo*|uSVo|cwX)}i`@>q@J+_bbIBho4j@fs<^okNfKG91>F5l4J3J+1Gs zBg4dja03iu_pfufsdD3Y*>|dm(%#_1O>V2+*eVhnx&$@rNYX=EDQ;7Y_vJsa(_Wp{ zh&Z9@wiQJIVJ~1`t@s4s6<0}c_T2Dof-^;`#EAH#L;^msgpvixqQDiS#+ooq&^-*F45EY{5N;*l4v+Zf684gUM*J)H6 z0pAvnt~+UQNE24_g>#}P1kV8)5%FfkiG#zJE;Z1Rc$Hpd&~vVitvEJA7;LQjF#^Hz z0_DRsLTzFHJqO->ahFM1sFdCI#P}7|4Q`K+))GDl9qsetJS>WhB)HhwC?OVcuFj}k zR%TQKe;J`stL>QvW;VkTDAROy2ruZ%D7s9K2&f(rE3mjsO0wFt4j%hiwVc~ieHrazD~;uXd5c%a+Kx52SXj#QxdILMCiyak#|#u#EEi*`O8M>| zQ=S-8UOA?w6)|>$i_5UNWkw411|5>&juA~-T!tl0PmE^LVk4#x$=*{OFA60XD28z^ zQrWXi`;}qKxK;DRQ4Gp4mQqJx=+$G*dq%+L_MCy7_>yzvfZqux z*NjRgKMGnb(WQ*Ll7<(9=eB?zF2bg|OZ;u_5vS^s|G<3}6+|#PM4wB6kT6`+QNmnE z#CkDaAeb`BT%x_?d|7+3N%`wCNy(+8f-cTVDU6$t z-S2^}>oJ1EZ(1c8v8EMV)7RiS6tkC^5F^)glPH1Bs8ehaarvhEy^<#7E?zA+nNADj zd`@^;!0_91S2Gh7Oy24M?5e4Qkyd`4N|OBE{KX}gAO!DX+~Ck*76fytD9z*d=0T}L z)#J^1PI>MS*@+57N7nC)v$r|&pG%kg9@>-hPBC-z#knLtkXQ-klCe0KU{0#Y;e3B^ zM4iM+iE%NBh$<8%|2h#$U1h^W0*S(*1WHLl#VJYf`>&7^e{@Rxet$x4TAc6_j`HBB zl0PnHR^Ww$GtfYH26M$J+35?4+Uu5RUaT-?Cdg0oj!3kNYo8pis-}9*QPBnqh=LRYLuT$3wQLarJADwY;>OlTi`-V*de% z?s?rXR-Dflf{Xy}S4)INbfUjso#=BT58yE%)pOd~{qZnlMckl^Pf&*(S;-pJ^GKKs zS09PiGQ3j9U**V3oR8+id=wwMcWQUO_f>t~B)l}tQkRA>2GZggZlGWoKxrX{8z~ra zlT2tZlrAneR@X@iRTs;V)uqsoDXfsK6wXJX=?eW%bfp;zz7Sn$GX=wPC9N&PS1TA+ zIcZ*o8!Pxyw2>wXhM7mfISRH!!TwQ95Vv|M4Nvlg?Jiu)khnF8^I2h0+ zpfg}dz+k{B0Ve}43Ah+=OTf*5M*#S2-WVARwM;Qww#ehesN>2}$8c?BtwzUzsN-PNaZ=QAvRD2zD!pb&$cwjpVs7=+ zQ(Y!R*Aw(jJ$zqS-sY*3d6~OBcZt$mQBYC~s~kZCev#X%t6M!DJ!SY%W9aB3vRb;e zQ%6->%PXI~XA0$haBnBGUg)(|skg)D87o_jNOh~`)`x{2uxJ+kWU4jNO+=LQm7YFY zJ*#bjk){dR;#Odi?vsv%JB9e14a(itqSk_V^h{k3W@iP`tyM@bP}~OQ=N$M}9~{Ab zPrbOM7au%=9021@4T*K;c6ke8ht87Q-JMUmFu>RLE`3klRzpc%N>lY`-E9a8t0E7;IY# zwgUv)$Z9QugTh>hwH?LUR>q2wSnjckoTCcy@MAtb=Vc7FU2LfBR9j{UAMz~H2a2_Q zOss7wRwGcj9%F_09*>Q0wi(|&QSm{W=A-S|)TZ~AZPVEl=6$M7;V66`#5srJoGs%- zQ7or6y-)E5>>(-JbWUubbE4aHfbxanyeB5k*{V%9ahrm>#rMiK-5wkB7Bl8;DrQ~# zQq(gL>)AqW>e7QP;G+Q;FDeyn2M^j*u56w0loww42)||3bYoseF~fKRzKmvshwl^> zxvWKaJW$gz)hn0#+h z{c0cQdk5ruyUh1X9{edO&56^jMf=f#1Nir#H|F_dl+>G8{ucgyyJD%bRA^b@v1gGD z|Jr>OYL(a`-&)}zp+l567E9jmk<$ft(UKlW&n`SG94wgoaQqW=Va zQNNG~h7B+MA~@N{tAu1STa+S!6b7nFplWo*azj7!D{U>I$}oPFtTR2pNGYs~bF0sM z?-st1HyEBti+SA#7bWmX*jn>W?_Bfe>)TpiWr2-fp}?j-`jKA;zs2Fk4{)f@ci8g> zm>)A!2S)AyulZ>vJ^EVVn^N z*Mpya!>3sY2qNG#fg}W6`FRpZM!;{+&zq2_E45gI;V^z%mm$9+hEI+)9aENM_3L4= zTGkPDz^BWiWyi0H!x-#wjyl1-ct`WvV(p(EXPW>+$eevU_|)v%$w#xVhVSdZ{s2QT zZy>_w)G;{uqRxzK#os`nazMX#DnXS%!zXc)1c|6gvZGI}D`Acts(ht65~4BZNVJA? z;T-d8t zo+~;CI$ZfjdFT?8ht58EZf?VQfDmwxUvUh3{1$hUIq4Lelb&WydRLf}o|Kb5WpmP# za?(FGC%q^qJ!MW%s;IxpNq@>oUj>J!R+y7su{r5gQBFoE|0pNDV{+0{<>Wff350+f z9K+9i;JB~MNms~8jx{_)(4w2&xF)jU+HWL2-v`{C0GkQ#Z*L1{h$`@>d-$dGVvx7$ z;la^1CjLts6DzP0xsr|7O&hPjOg17F*qC%B8=-dP{FqdMjmd6aBWB0iI9vexsl$sE zwz+ti30u!N6Es`#|bmy?E6r*M{4j;d>C)BG@?-55rlo&=8(Z0#B!#d#gdbqtMq$ zD&9$E`%U8Zn@)~KI9{}JOLY5{wQ;@!+i-tat0mdEr2-qbUcp9bi%!aq>)Vr!TPv_} z+m-wfC)cvE+*W~&qAS^m8WW{$$VO2GHfCJOMrqq}eP~9M4QTvgZv0|u{LL=&-C}C{ zQS?qSwf&R-t?f(7wf#)+vNX2sN28xJuavJ+^0S0vMJu;Q$6D4#1#`&l71+4rN;b}$ zZNHz}{*DT4-1#qU+*yH*yZ)t(yP|AByUpizn@{cbRJnFTn^-K`?dkv4ZVSq_+kEhH zPHel4K|kkTDd%&@&v_gxTDd1W)_-8*o(gQ-dnFs^JC++O_f}xzzJF=sz6xy2jh=6# zY#g3%&bRYp=i9kaW}xX-anr4$rrTS7zD2uOF4}J2e`~wd<=Sp7c)BpQ?QTL}*Ip^_ z3(3(n94}f~6rHnwU}I4QHtxTYjS9}&_g7%!fh*al;Jp1n1vVB(w_TKt!wb!}TNvAR ziz_g*B<8$b)|U$A+$9wldGK<+EHHgp5bMi>QD&eYZR38ljr!3`<@*uZ#d6V)UjA?W zXnVPS^aOai!t6(|Kh0S5^$ChM^t}z{?riw6R=5EycUO>;k8`YO;i2eQqx26iGGkp7 z8|y<+W+2vQIM!z<*8SyUMY~uoVmA6>eH zuc8+}Oimu;Skb~7*-!t0{+bH(*GBjA82yU-`PvF>thmNTk;~fPep4nNk5pje(aZa>V)^pc?QoK`TGK30K^$N!~`$1AY$#1(9`U3smtv8El_cp}P1ncvu*pz(Ip9B-Wo zv_;-iV-yB3U@`lG!oD^D>XCQLtzBr(5Vn29wB3zBF#)_&PG?-S&f)(y{y#4_{y%`s zY>7Q*j>p`5pz?cLRBm`(wuN%@KIa#$Y>m!uSsU@?*Y#T~u(9n*HYS<#z@(SR#9}eS2$f zy==$d?bf=k?+x%f&`$*aqA*aa{e;MHjsCN07EAw2yV|(Y1ascf7&iET+E>Av0e;vU zr)iyhnzlsHrv)okG1~LGrhR3@_vKI)ek&NJJZlMp2F1TG#J^-AbFUrudc;^}h<~?n zxkaPj4eN|m(n!vVUM>4b;~ePP$i13&Dr6ByyY|VWrq9Zw4SO_gZFP&5s9jf6YIIU^ zjfL*5uLG7QG~PH3M<48!M?deAM`3j|U6n3YM<1%v_xH%7`^Dep*FYV6_sXLwqSRLe zN3Hfq5ANt<(L5(Wqv=laRA}sxM_u;HqirH#B$xTCJbG2PXr0GG>3gqfeB^mnmNsoC zEzjR0u|idP{z-ZC+pY3w$e+^tU(RaUTj<~3Pc?1N^?)t?RvvW}C$EH2aO6}+8|~7{ z$6v~$A61k)?NaW{gR*pUl0|zK^HNV)`BIb;)=6QH?UNegH_4;ltrqs>NxwWArYuLe zJzmj{r^q(<{UW`utn&Al^0{V1nX64tORQ^OiLE^(v9(Xgytwzuquf36$a+G`E&5o~ zde#F>Tvl)#PpeG+Fvy~fdkv2MGgcl|S|M{)W3RO0UMr7QFVk3V`8atra;dEMDOK9< zS=qzZxm4B)WgPxi(yPPDtD2Q$>3)@=<|>ZQRX@0UA04^1;53UCF`%^9aw)e`Wil~G z)^X<-Qn#{dOXCeGcb6{fy-)SY+Nx!qsw_*Vq{TppeA%hGL1_i5FeT0~?U zwW%txUHw%KzL%IKK^|>TzI3`@)-kS)?CpnITDZRyDgUO6e(+2!z*ecgan)g2uW?Ks z4NzFuEvn5`Z8g==og-!LkKZPbPO1^`%l*>IS7PKn`ZpZCVwXp~l$HKfWt4}0lh{j> zELsAN^J89FI#10T-y9&X+}fO5WnZhkLYA&mBYxH`at3)|znmu%-lN6)^xZN_zkhA(P)%$}G`5+U>&5 zkD?u_UTqO}b}{lr6BF@~9g!tKZWf3ikw1J=X1A7%$aiiNsfx&xjU@7%Rtu51ePpLt zdqJyBO93#28> z^whqFx3)y)JG3F0VcHK`0U~`B@+%|D+DYVsK%l+0Y|10 z$Oy!~K_cxf#i;e=W@)FBWg*JEuj0yQn-uq;QUp_u1yeOuEuYXdFo5P5T;LjM;^8*suVYvp87sklipR%;IfaOuj@-voh7Km%%bQ#x+mVDH*sjTj2 zWCU|gCz2^#5S%paL!4mn%vH_9Ll;vZVt%y9Ov_7@$vA}40O`J8~ISJYL%<{Zttyq{J z6)QqOH0=+|3y7qKEeiP@k*>#0nTv=VJ8dF9DrdA>%sRK3ug*$5eRK_buEUa`X5(*JXbykdJ7WnQl- z?Hsb5utMvcd0fhTWcwUtF4dJX$85h?U2q1uo@5S)Yn@-w=jR$rpT8Ff$ke`3%KXa6 zI;Hg|Afm3R*UP%jGvel znT-6XkZUB;S0XJKsi9tuJ>Kx?^J5dtD+QM=cM z^TvA`Yu(AnH~poZ`Sw~iu#?AjaEyw7PDV{%mAqN;hfwNqc*=d?QlMvQ-Oe; zBW$O=cEUa#WgZzU>pEdCvX#O-ZM!=y=;1cubLe^K8-Lo@qs-)22@(BSAg~4Cmq806V!Ycoqs%i8 zOPNddt%#gsnVwpL;}BYYx{8G@S8*Ig#Q(jlD+Lgt^{GW_r3nO91x>3(t*ooq;j=>&4M$7lL4m*= z)hi_HS|t#eNv^q$kj2(jjwD1zTq}_^jxTcG48G!%-KJ;nzzKpK^rJ&VkpYoxP5>DC1tLvDN^ckdk2%8LVGx zhyHW)3yu5F5dB6wWcBD)LeA+!^xlZvGf37oM9)KHke`r6+BkhGB0Cz$wkXgSA@bK4 zsWn|+jY!RNvUTR@`w^Momof|W3;D?1PB-ykyfPibeXZg)Tw*Sh5> z*r9t6dA^E?R7T{;PntriA@Y*Llu1M67MqFGa6ny$3|adQy_N&#`JFP)PwP1-bFYeh zHzRK-pZDljIs5|2bxY)+-Wg@OsT{te4@1N?Sjv2;-{F8hAHG^5U+Sw-<{gKLtVQH; zm(0d@`Zh#fu0%2eEkEcx5t(U7nbZ19h-~*uoh_lP%A+r5n9;=q*#?WN*nZ`l8Gs)e|y|{)l|2{K+x~V(stWEG;)RCZWt^CDYQl z6_Jg{rO!Q$1&EwdQS>$*LWjh%>;ek|>bFm@r* z-H^z5<5fiNQ2yLv97Cj!YOk5bcZe)h{>(PcU|bKW9zM@Fk1~Ul<;8~G03_#Ai9BQ^ z8lctLE44NlwG3$YZO3KnY&9|rm=B*3v*_<_En?Q%YBV?2z+6??qP^4{?nv%5TA-ac zMtTaQH6kA*N@S1G9+6H;=2_!fM3yMz1*0<}XO-3~MmI$EDC7;J7b5kQ)~&BHi>*<6e4n_0U@WguZ$u@hATT?8zqQT zZYX6=8gmgbl;u;#0z|G;T0a|05t*)#Ka5p~OjBCtjdh5eQ2tn)y9`)$pRGd30nO=r z!GKYqPnT`scD{mI$EQgxxARp*`b;;G*AZzPh3rS9y+SDC!-)J8g&d(?_kpG?AH_b_Ynw#koSzsl(>~cs*6w$Hj#>%2iF|>`3cu7!aDI(Q z$2f@uoIfCPE=6jkIL{b(zSvAM!?e0i%?UDLmHBK&YO2gPbsC6lQJHV$j6-CBimQz? z5s{-@J0MjMc|~cpaRw1-BHHWC?_qp(aHcq6wbLSlkYQS9XSUNRV&8KWAqTYX0s)_k zv!%>Pfq>TVOo>bY8DV+T_0n>L?d;pGv7O1zCa5)6)pff-K;{Qk*F6G(x~3}2i&$%; zs(mHMh`JtoRpYwWv7J`R&U$AnC(h~@q|7FPfL7a2Or!_OTy2#;Z*>mBy1vVjb?tJF zb;4|u-c`!%69~wxQy#wV9EZp^Dz0}00xPR;{Zi{FAi~4LJuTYLe}RV|ImaV1v7tmh zW~8-P5fSp4K)~nTRY*pRZboL`CXw%)b1-9{y+c}OwO^h0piJgiDf6py9?E!wgop*7 z>tRIBRF#NZAUOM_O05)@>AFc{nH1MkDD&qpgpAS}3IsBLUisX}wFi-B7D?o4*Ivv| z*9=)#Gl782x<92%TbB7OQ_5V+GAGwcnXUqXxQ>aep1FWm3Ic(Qy)lW91KL2>LG-Y7 zs+1Ybi1jgzkzuYQXy@A$DKpabu@hGK_kJ#A3S6g9X4Y>e@)O#5Fi2WnM}g}XL{{$5 z7@6j}fLe`}hqt;k7s%|aB#~Jz2O>M_S+x7k1G3VU-~z1~sS^3ZRRxi>WQly`N^#*` z*-S!)2_(%0bJU6IQs!Gm-d4zIR|vJ9XeYIPchzv=Rb-Y#E->Lm*Jsj0+mq7B+=afEq7OzgYK3tXyvv_tC~PS=Af!8 z&D|Dj-<~0nngW3{{)6X9OVjEKWNo}%%y1Tkbabr|$itmYmG%5ooFWQWC{dVXik~uO!pW>Ug#{52JXp-JUL(HC&#@2kyC$4q_KMm#{S4T z8G94=Ls!W&xjat z?wzPL-eOH3*9fF)^wlraH&8*Yq?K)xYYd$ zYTdb9*0sXDAGPw9%eqzy1oOOH*0s`o5Vh8fkXjGB-=VrjNUco*!K<4QQfrg@ebk!x zx76C={us4#|CUVbpO(lF&uT>W zBuP6%J?pWz)S4!H%P`MoH>?46c9b$BJWrz5n_Hxvsh%x}j4zTh(>%M-pOh8S=UY5` zQ6}z;)SAJ_D=K5fp65_&n2NN-^D4@`zE#THDG(T^m%3QAF(DYI4|qO7pCe+N60%Gn zxDKC8GQ+eL0>L}mttGNmAaK5DSd);R+S3AA6E8+?UqUqPkmpkzU3VZ9?*A_(p=?q1 zE_>D4S4LJ=Dxa(i*|IlxM=IN)B=aI6J9}T*TSjCaE{+c89FCh`zu!Oa=ild#=XpJ^ z_w#xN>pSZmj*CNWH3b(p35H>g;cKCoW;$ z5d1z+7}z=u!H6-u(quRcboAW}>QmZ*sJ zW<6q!{coLEc~hjf5hAN1V>t3xWtyphW$5z5nritBx`*|PCe?Pl&wp8owx~Ro5zo-% z^#oXohA9`zSERQp6!9daa2d=&AnyBx;6Xtz+@38k0 zR7O-E+d3kJ68>;;ph?UboFi#S0$e#%nnWE4#U2#;5MnIwJuT0I_=c(^NwSU}wZIT& zQvSc79@MMq6Z4$jCvYBDp9=T67vkzniH3jwig12Q8ET)B%zQJnc01>ZzOA8%i2lEa zB2DZ$f^Xk+3AVoP)PHE(o1Lg^XYI;m7X3US*v3i~clU7d&73LZW|ZmuwUuk|#+jdC z*F_tAICgfue9SmoCOo^DqYxcG zGL(M^{_o+IA@aMjGW4u_U@qsN(PswV?Puj?{`!MDRx@!3TrmkcqU@TzDg5y&;C@3N z<+ah*)B2%@py%RcCeQ!I2Zpw1zkhzy=EgUB^HPZJ^ODrBveS1<H+mO;VJBCs#S-+X?)UxIo4O^doV;j2Fx^<}9L6RX~PhLaUDA z`JV&_VqD)=tlp*K+wWByJ=0FJnTh9K9`_z7{1;3qDk=`yAZ4ZPdrn<(J&_sbsg(U( z-7TgO&c9yJrsV=$zY7#29vT$~?TbZ%tuym_PA&X6yQ*)kD_BU_2Jx;VABjSI{5F8Z znC(yR-XOw0oSN;<6N~hbPF(>|c2L%y!#|_b1vh;Pl+$tOnD)59bYT$u4i%ZcCjgE+Z5K;Kz;P{qU^t&z6%2CpjJzX?D?^A!&Uo~Ak4r#E za(%$jJ;%rcVgH^+iN3jjh_z z=xFP!{?ap%HWgV=#I5zzyBn+sljuzNsX+_J-t*LLxux>xZTn(EeL?moo#956Y)w{9 ziW~2gQ$cz3Az$BQ;iF)(N3rKF+N35-A{)CIUI_i*(W6vMDx_c3*X+DM^U!tfSND-^ zWK>-_2r|`2Q~NJ#UwMZr|p9B1`!$@#~iDi9ouIlCQ0`qhEV2 ze#u1d%+xG#v4gWf_04vAbg?Ok<5iU0)YhxSP$w|qMX?|9eq*Hk)V=Y<{CTb3vU12A8ib3bI{DX6w%a>zW@wN zpmtg|TIX+D+{XwA3qqtWs;)i^7RJAyvuXoh!?g&}uQrCgS7ViZM?K=30*LA>BvKiV zWM_Ow87J)@aP7*IseXjxVai9k%^U`AEO`JuF2$dJ#e7>`;58KT4 zRDo=p%|l^)gOv5zS9Ai+Sr(^~R^J6nXdmRDP>hQe;G*pTB2z&w3Dl;XZQoM%=J%^s zGjmrXUx^hrRB*1$XKdvC&hsb%q{3RSJKKNYV{p@vObCs5v^^OO-=2qY?8(} zALX>`3oZQ!1hK6Q2MaIdjD@Z`X-!o zfo#>-Wc=<6=ILtf#MSzwgPz~|4G%df_tHi>8pvg`fN+T^JD_lTBv)3)sswct?^CO} z-e#95G=4Omao-Ff$cDn)eZUuO+=#wd940TKk?YAf!2Ag)GADDN!9sFz=j!?>4~Lwy zMz-fTAfd-E*D<*Q8pJbH_McQT^=hM^#D@q&& zn|XljZLRMMbGVLvsswpB6G1qR`-|MYsqa2kBt`4Re#U+97nlMqSw?(i*N5{^I;w;a zL0#y!RlI#|y3KJ-p6`Qbs|1fM#VI~mCj8Y~5Y*iSF&1#0GLmC8?5wX2#NuNG(Ri)v=l#NUpf#o4t_#tpw>?f1o= zhFWHg7DTq{seF&ehQ&Z7$i@}sX>@0wg-aWk=G34j8@T1>6m}_{40xI##38JaaSUow znmpzrNVK~OPq{C0f>Us?=iPhm`tJ+wkDs*LjK$-M1-kc5jvAWv6%=3Dq;9K~E>tI; z)G*IBsvL%yRf--YItyObATw?NU8tV&LddMs*!PJbVAgg&T`@p;_4V10@M3iU=iceH zDKE~%d)r1QEHx53`>In4h8&P^CLF^jP#?Ltxeu^L#9U5B8#vc7dQun>{8qk1eQ}{^$QY&I7d#;z%kow`|gl5 z7p9i5ix|*2`Q}!O;@)_8)Ep^xFBE;)WDla`8TsCwapETgj2Uw7rB$e|x;04>_k4?g zpRkQPcR&9$5G7Pvs{#?5$@C5v^fU~xBXhY zc`(xESa>mEuUjbr-Ed1^Xgw0(50>DyKuk+J<-#2O^nzVOw6x1HbfMPK(u~@}2<)g!T`BUL~AkRErnDjjlwNhws^tCw}Jo|o|CqI5? zcQU{imcfq>${&n>$L3(4T8?0zf<5;QkSVU#TQ2;j&l>0mYJKOyvxVG%d})A&;1f=~ z9t3*{`3lXMe%#{`Z*Ks$a1!DH^=&}^uA3`~jvEl1 zFQmps$~Kh}{^rba8C$q@(w&E2jiDI7>{f@BX)hy612m!i)O(x6(uQRY-)xCxYBh-i z48u@Z2UQXV2bF4Q3y%6&CxkCLB2Wm1x@C_T2-bjM;uj|F`q0=&=rw9r>KUsV?YIrT zw}v~ugWkF0+mg8KO9+haZAH)q@ITr2k%YQv)6%>@`wl*S8W?cjnffTTY2##M4R=o` zn*@X{ecQFUG6=m(sI<NRYE?442%}H47+!z)scy6&n3-h zYk_DZkmw?xLj%Fr#ZMysFj0AOih5aoJjMsn8=xIZ|r^eVBj zd2YmQs&wG@+!aTKnuP{04+i@iofD4#ByxXWsv*ePZul3oLTfxdpKno;@+PM#p9~)5 ztx>Wh7xk`yq*MxKbGAQ7>zn523~VA43w{Q2#_1D?F>}8rv}-(@`rEaqlMmu)#UZY1 z7LHODB1C%`M_QVA+Zihx=$qWsYrCs0#SRX9>iweRxh8CboGnGxp#gCrV(Knht=OBS zx4ac{^q&)uuO?5E!wjq2=*?OTXqH_3Oh2Vo+O@=9&~xNFJJW>Qc{1s~q4E9u8YT&| zS^9e4({IYwH3PKwh3pJ%JaFr@_)Ooz*5!0LtITX(v2YWWIB{FJLWR2PkrbwgU;59N zagHRD$-tk zjs!~=Qk&)t)+Qw`ruJicj|0PsCs&PvpIa9T9ZBXcrfi?Q(~oL$%4JlYbF}st^iHT5 zm5fv@*q(lP-(@q3DSGzB=kMWBv3%MIkSMV!uvwzH=lx(^zTz*>_fPiqN1ky|47p2@GUtzY1twAX2z+lk&?;S7o{+HO!4q$zNyWGG46%Yax|al*F%HD7=?@R=Y{ng~`WU%zi#Yer5KyBIE--rJqb5i^K zTq6N9u$=CZVD%Zp=THSque|#GGXLnN?DO|#F$w?6RE&6Btv^^$8rYHNVfN8`;#k$$ zR;<7yIoBs1kN<(uul3Svb-6W#Q1d%hLfma!Z1G;?nxa;lZg&ShRGNxxVW-3eU>x*o z^UPFzS*G;DI9Gtl+ut77xz7Yj_JG6ko^gLO&{T>WL9&PXavy_54wdCA5CtT=88@cR z`?FEmpT)4nkjO}u6OOwmEHWkf=!%=-EAzrDC zoSiE#ZC(`r2a8XiyF6Wy_rU7{hB8|6G@dbPAQ1ZVV4A@QPIy+5gl%bWJwsPz2^d`;A(Fae4B+*xA^)%Xt*sl1Fa**A1grl$nlZ zIu)xH1{p<*v84?r*@pr*Yknxtj+R$ii5+NszZk;3tUh$R1&S2_%GNM^81%|O5&lU~7OuzNXJU71SBy@V_up7a${s)Lah5Xwx zm|}6D5~nVj0<#B$4d2pSpjYLF^EYEGlfueWYxtP;+Xn)ec{0si1xDA=|Dgj;#pkA! z`3Z_HL!gm{k3YdZj7sL&7bc1eJ(K50l`EnP6&IB_pX{2Uo_uI}toaxj`nN^k7oyg= zJ$!ble8yiJ9J8pmpUrg;tw)*PSKUGCFlqga2noA#HoD-WtG%AbdS-Scl9Zi5DnKYv zlqSkL-qXQHes#+@q+snbCUy~}t&>(G8#=E;cDWzpIvsv$zgEE_e7i))<>A>M;sF~x zj-wyr!%Q#OTd}Tbd|*BHaGQ2ocsrL&8kwvOOcMq7{_E9%!BJ`(kvOrB1htEw6}_t0 zpHP<>xv($!cM20roD10Ye0wz_wY1CZpv<53pIdyPG{RMvNb|xOz_bQt&sf=#3i;U- zfP6;bVJlE4oCf_mL#RQ#Ri~+t& zj*xybW?jU6261B4soknEBsI?Sd3H~nltoYiM85w4FsYSByKX%th=iM3s;kl}30)g@wU&@Ea<2@+s`0wB_?L zDNtmg^ay){oqcO*q{BOlTv=jrx3m+ zy#>d&y?_SE?<;nToAJI^F@VZse)-k4^ zAw%H=D^wE1@>tzea7GI=fMx9*3=bKps1v^VSwcFsg$d}#vsu2T{Pt+a5a5>lj~|6c;yqX>oIFf@}WSjpI76}RHgn`*$}z( z2~X<)Y|bb5O4UpDXA+gqPx+O6;jZ$GcC@g-O8nu2hFM>Yoo{I+eg(#Z-zh}*#|ZK1 zF8;}NWlsiq0@EOCvSf&>Kz7!XYW;Tcd{u?{2Bkr7%L0-V^EY1iqObKCg+r65HQmS@ zl!KqX#yk8Z)-W;^1zRUa)opnjL^iVR4B3}hw^65RO5~a5<3=ZYQG{~(`8d*^r}+tI z8un>!qXa&z279ViV!^)v3)hMaYBQ|-u6=HyRW|e5SSlb2qbdw`!XTqdun_T;NlM3w z;5-~dc{4NEfTWH=W@1QkQJm9p{MhhoJJMTk?FCggahs8#zc|VOdSlJ3G%9jTaMqN%i zl*Yq5+o(cznW0WVpI!aMoL{C;v6o-|}ygf!;+sWh=Er{tKcv2vEq>k9Il|M>7YOti&Q22{+ zVcNsyKDj|S=9<6xY6twqX?tzYp8`!Ky))+psvxj`@PL^8q3$B4BSQxmsjsNqaB6Ds zs-WK4ih!v`nCdsNeNaE7Y5G+pB3xmA2J-Xt5*_#Ad_$V1KCbp@8D+0iA{fj%{*dJH zcrS*%7({@(2jC*IL`9+G|8W=P znGU2Xs)e$CKCy7 zS_IWyvBf1d-|c|MgAiTqpEQ9V;1oprce-ywP2US9t)#|3E5v}DP8rq>45jHUzs2Lu9A=@K3^{F ze|2?fcDb`6<5iQ`nZ_3lldvv6wd$ylop%K%Y(mMfvI5n1X? zc2Vr?39kE#VhqugsfU*#M1gDsEBz?^2b<3tFhAgEn1b)N#r3*;qvfHy26AH*OixAr z*XY~bQqgN6CROn3iik?TVRKaN{hQr>&ff9W`MtX>ny5R-abGg?lsoX)G{im z&&ylkw_a>4?;Im0C*tC7)YnTBa$f|Q#1GC6bdX^~tA)X2!}>4`<1Ypj93}%Bj}2=cHwO`LrawJdqhj>Ghr4yVkT}x!0JiHjt?Zt zpE1jt5oO*J?9gBd4hjOV^cb^BT0@$t;DFezy;!RYGm0xoR;uuzgYd-x-l*q1LH5F&qY$d-(OyzXbExd#S^aXR-#=by?A=m3u>pG8(zAVN zp+bnC=iJSr9xNKlH5d6{TSh7WKd z7j48sh8|TgOoIy}<+=O@=(=Ge)TcstAnYs}O<4^SRLJXcAEv33p`%zD@=$A&sIY~8 zzFg~g!`nr~peC>TvG#gs9UUOO<)nVX&Q4?50v87JtS;}Y4`1oBnHU53DJ{mUHI*JU zpMh=-qS)WrB$gdHe7vNkH|Jld_Clk!hp7{d$cTTqBescyadERM{-Csz?W}Y zc3rm%BD9+k-N~5t_b_!BjY2e^4`DEkdWa*Jh5nhN&z&r`pRArO+>d=(>zINLv6@z# zQ!uEeSYXo2k)M2KX(|m?w52V9CI(Uz+k}!331i>Yy6^tYVacB|61TSqbLCQ8EL(Iy zKSdF}ym@}pkOWQ^8be35(3gF>aOXDqUz16s*LmAaQ~AeXG+nQ|3CKz-ve2uHPk*ECLsNH`pvcZ5n#|2ivqI>B_eRq-)?fWuT=bp?A$a$s9R|)g)g1w%6sQiNSYy+-$H+2+=aJ5 zvGaa*wD-WaSQSS^Z`}%TjcCUmV&!fNAH{1FG<~4Et3-Zks8#v7FfR|+O+vQTH2n+( zy1v3CHU5Y$(%|19Jj<>ALV`;JfhE|AU}}v?yb#K{(S0Aucy|Wz^Pq-*m77FiJ_%9~T55MX8I<0gr~c_4!|$jYB80Zv9^Q!P z{_W5(6ZGHw4%P@!CvU4e=}!9_E%{l2^=I_l=I0~CuhZ6NC6HKYGXK|mX`@E)6ztoh z!AKUW$-i9P$Y6$@)wYt1Ca!NQu37@-f~A2NLMiT4F6YlZN9#6${x*Rp*nxnMJ>v5Z zz{~i8nFkrtM4RoDiM}<{NT~ALjxZ6&Um1;PT_zA*c6Q9hpRUYe?TC>d@KU@=Gv?|Ud`gh^!qx^mHm(MeMo}TsX{6B+RV@AFkHb058HljOv&VMr zCZpTLjokYL)AssBBoEtU(-!epkZjRL+njw>w!2(KOH_*J!pZVj*5EqX)5|b4(t>&E z!AY?X^vB7D58{_Rimao^JAe5ks)*6lIJqRjl$ZmhKv|9@ z7p*O|88V@*Z>0}))<3aLGjk8qZheQSG5B9X%|N&@lca|E5ao#uMDN9YX9U2@=-;$% z#^O46fH}Y!akI~iDqJ0wakTWp34rg=ys#$n4jA<)_ch+yV`ZVwJ4Yaj!;h*T8LY9> zI9#&FWZ8M}WP_omFZB~bnKt*d?m1+R?99(M_;phZJWfo1>J$|tvr~{?veA<9W;INt zYZwP>5PY#R5n0%ziVjM||J*X_8aeYB(r?c@wv=y&*(t$x0lh*kNHH33Vd56bI`s(d z`&UZ76%_SPZ&C_$wq2v%@{$bx5E^%}H^4#jp{+CD4%)ZGy(S~{J#H-8W{u2!RugST zR3Ux6jTZPQRtT^gy_vj&bkeDOj;>>I3fX{$(@q6 zmdx%Y-N?U!JAeI3Fhc1Q&Z|F{MY7ct=98JTu*37oql1Ws%o`6kEzBh3{^StxcEX-; z1umU8AsB!cs9E^m;K9og+E>7yUEW%IAvfu4jNQwyES3zhg4)(rNN~Dqm=JjeJ6030 zfPm94!BmIroTKhDEvmU4(paPPMi&~~D1&SAD)DRTMDKhHE{tUw?Hwj44k6X`yr5BbiQ%wSYkUNG>3~GyZl$Dl zq*stv5f9~FnRV$4a8}E1~ zTTb_hmcaip-<@d#4d4~ufrz52F5v;!X#P(<212uY4o0fEzHNjhy>Zi#Q+3f2x(3R$ zxm|b%FcriqH0NuuLm6PO@Nf)8lTxO9kYO1o9T&4a1r48lB+1U3hWiqF$$eq0Kg(;o zrzveXg}-48H%C~vBCiB#$F&ve#_wOw>9&0r>H0`07T4??!5+Go#7ajKNk#m<+Fg}Vmbgr2%I7@N zfX`=?YQeg~A((uS*5rI_V0Z4ZW*P-)eoC<@q0kxgWr-cb*i0xZj3K*EV)o0CR;15! zeH6+M==bCUr;iXepgVv3S*jB^-e_BVi~aHV=|=bDpTl6Fhiuw=8zF-iy$|n=!kw|0z9JIX_G5~OJ;2)wZEmzYT4*03cQM%9?#Cu+;4wLK45;%p-1QxM zloXXf)kxW78GV3D3Zy-z(W1yMyfnO6Qg#-})1M>Yivmr1#WPuG|Hla>3Bnr+@^}bc z9inz-P$I-g_=hLx)KF^YJ4(d$_+%tI=X%G;3}wRM<7xkS`53lNulag*W!}gD!AyDE zB;_rOX^Sf9SMMfWoZfw9jDU&>%)$zTxhA6h*J3fg%}^RGG`e1y z7}dtXx=s|YyXO*uj%@qBj}&$}+7FrV$9hl>+fqhPUmW1)$P59}gP6yKCGZ?9Q&@U01t1IDc4!a4`rYBaItTDG zXfN4q4Py2$V#BtoO(XFj1vjG@4YtVu7TSCVvv6yPyrM5mmR_UsqrIQanv+)pp60Xq zdVtbM-Wdn0)*#a@K~c zSEW()lft*y9D3kk1U|0|?Q`_k>@A`Z`@+tbrk@vd50JTBS;&e}xt5{UHJWc3bM)FOP0 zK(K>-1^14yAMs=8OY>fSGdw540^edt+{;2&U-jlvV~DS%kTFqKKJfT9Ci8plrPqyru#Ae=w_nU3Dh#{_9GK{a)~KDhVdMecZ|uUd;z8` z7I5=*?)i+u%17(;|LLjG=%tKlyGDy&Id_sTa$#FvTKv~X%H(N9Xr|=5WL^c3YPacP zT>kilEu}L-HQwP?ok-?im}pvli3+Py9Vs{sA*u1v_P?KgMF!x$3r|wKojsASq7>?x zfr#osY}{0odoy8Z42?gcwCz!3Nrce@jegP#5bm@4ObEvF45jQr}h zd><^r@i}8e3&kDg3HLnB9o=SN#`;G*&&iC#HRNlE$SjyS;0bVAnM~p}$jbmhuJV5tEBeWPARukh>X65%$vp+?9-yv#@YJm zR{#=Sqi2QX2E<-i39CB1y&mG$QHIjMu`SIPhL{Q!m4YwT7+NTG9x_b3Ya7FaB*4qC z#?9a&w{{*i==tAEOF_wbg#uEYOm@6P^gJpsEFCL3g1lv6w%*q4SHE-AHT{o^36!Nf zDMI*~4yP3A&Li<-=ug?DzX%7$RZ@?KfPj);;Mu)=P;$-(-wQ;nX4U+oYZiJ1ji6J% zh^zTx-L!HZ!VK()zkbh#9ic^5jPG8;gvE7FMy(myHfVchHtwB6>IRjPPXo8_3vCTR8R91UVccV2&s3Sx#Su(AL>#HLgp>T-aNV@!jkEa(VZW z8S;XLCjn!K)GsH<#3FE$?xe$7zv6}{Q2Ma#TrKw~S_*43&4e_!@nM;hw690 zhky(V0UD!+^IMV~oY`2*kEbGKpwyk$GSdEsfPVzixuWU)iJ3&AfmS8#f&BKPQ14D& zu|m2EmHrlOL!WVkp;A5F_evRUDcKFv{K@RrpD%J1%$|GC1VznXhUf@PWz1ngbVjev zqJpT+fwxFj;q!cbul!!xBOBHtt*;L%eO2^?DeI1t3$@Wfi@`(b(AB40wJP&K^g~?7 zPq&T7u4_v6oKrqNT5R;+di z0eb}~;?^zXXCnPnSOIN{1qb-y=2@9CI;!ht&)sne6gkM_QQ)$D?A;b?zB zuUGO_Y6xBa+McgbM@!Eh2Xx)YtrYOQsfE01Hf$yh0V0h1Q+Dk9BhOQ^u;ip8O2zFK zQ=3~Y8peIiNQ*m5Ndp0`zy&B8y^K9OJK?6*%xl4ACqdO;1yWPn|`J1D- zJ82~8-S~H_C3t_R#L>P_k((BdzdOnxa$o+5mLHFF;V3irC3DW( zP$N0wm-Mukav{s+LA3ZPi3g>_*0yGa)7Bk0XC4RBNBqlAkAnE$X@z694mzL)r^&C`pm$VCc zdeBctyBbY4-ta2roX_y&6?{XLKI&?)oLOZiBsVCMYu!qCbd7k3ncYr%4*!+s$S+yM zP^Q#s-fHfIgQo4Ol<18xjiL@hdW$V|JMt{h<;+G?vFV3ZNdD)h4RaS3Xg#$CG$CFi zimyP+*~b7<4k>Sy70)2l$wIMJ0;oO?5Q=FZWPHK-Pj1$sT$+dpcqAl^joUuRnX$to zs37uY8oT+X)(>)p+6Aqj2Y1QT>9v_go$92o$nkRRj1w_~f%m=wxj5|{_nAJ@=WxMu zp<`F|on~{U3YOm(lsX@NG7j_dmKSdg3i$>)*@JJWWw8?A^4IT@qB3b#NY1Iv=Dg(| zO3g(p7TQ_W`d&I<3-$3+Vo&>*YCB?0zSqS9m83gO3a-8Q+H$G%;+rq+@wY7*k4@|7 zep@>9MM;-$oI${|1>u4|=gpjD$M!h;_JI6Wn#_@lkU_<%LrBpEq%Qp2Tt`U=RDdHMjTb{)?+GO24j z!Vm>rh$q{%FXq=oz6(x8DUXuAY=o6^e@nfUc@k~39@NeW@V>8+(3|al`X3AS=h@g+ z^lG4v>6H9F3g8;Wzf}8ug?n#9hf-w1bTk-XQXx+K8nA3Hj~32uC>S+fJ2>XoN$52V z3|C>XQ6n#0VhTea^dB3;0?0P})Fc!SI&y9+(%j34&@YdQy!)4C2`uQnq;@XVJ^vA3 zFm$G~aRNY}GV&uh(AHVKQ32uKt~`N##9n;ptUZD#LsFWA5NX$G;CzjM?x$)Hi!|sP z6yUs$#}7&Dx)A2hd zFNI|ff-l9F`JYDk5@aTTVXPx9(R$NN%d2krG>r+`>bZRNz;VtqxGL))Z0$5ojmjZU zP|J==9~BtI0Rp329+tqv3&R7*X7;oqSoyN6y+!=Pqs|cKeW3dbprD5ZB|L4E)VHG& zq`eq;s?Sn8aePWRLow>%@-=Mi6}qju8`M`JX)ReZP}G6*avHC^0$;qLKe=H!4a`qX z?-dG+a6RDfygEuM(_VqL)O?vdi)`nbpGljbMNk|zy*no6j(?yeQi6!hS3Yyx{`Enf zE+}pYjSv zXgv8*iMdzRe|b3QGq>Z@lT(eKK1o=vH(x@A04lO>B#hYwsIXtt!EY8DYO2lY|qpxdDR?Yzg84c^_M)D6SEtnKu*r9)6 z1ZUy9%gG>5Zk(7`GI>-_Zy0x=tr-y3j2v`$|BhUu_PdrnjbIkfbny0!JMzpdJ}JHF zO;dMw`ujh34hwjppxZCLcNBL$VXTCn#`-ai)UH0cU;zZSj`HJF?%zRN2>)q+gHrSw zq}ZwOfQovi7b}cl8~SIk`}UZTz)a7&RX?NzSyxPHbM}jYlSQ3A@@&pOCy#suarxXf zw&!X44pO~#R7ynrv_A50;z;?xk1big{HOBiYn;#In+|PgLagUlTY8y$T5QCsTNJ@7 z%jx}J7jt}j!s*ksu&pMZL<_~TUGeTm*Kkr7NexWP?okWYf4Uz%UAv3_Y}2#G#Boarp5JlWXazkrM8w&1C_Zl_r5XjnOf0KQC?HB z*4o=6{O|aam$TcDZp+u*Dp-3>t)PBC9DWr&+GFqQgC^Fb zd@|Rc^?AX^x4UNkfs1J_>-6|Ja53fkua1I@^s#IDVXfKPrj>ZAfCRb$;P2a$>;~(ph|?on~58~+X%J^yVkd~ zTFY_R009N!&4u1PA~d8S0~6c@X)-v4F$GOVnr&K8$|?Cu3=4JC>3UFJ7#B1L7+{DC zW{FV2CqC;VeL^>j=?rV_#_+;6{ol8RLpNH+)Jr)vucSkHa^=ZU>TftTpAJ$nTL`*; zD(*NgYB$}Y(%{HRRm|$eIh^Cgc=4qz4AZIj!adOZ{geA93UhJd@lBQ=o>wv4s(R}> zCegoQ86Q#?cgBHN+A<99`uE|LK&KldS?dQ>;4f?aoV)hr%g-?lf{_g8@g{^-858tu ziSEt=H!%4~PEqbp)#US6GP2k2VZ_3t>Y8-y*3JJfikK!e=`8(_={tfKQI|evyhTx3 z^Z;qdVzEL;a+t2xLV->aNG0UYbwL<8TNp;-bG25W3bTw&AE6hnr~u#+ zhng3Ri{=hleq>mlfR<}zkARoUK2-`U7(jm7gVF|_!Y7vl5ap9jL!53O5d*ZVPre`A zpuP0qdAP~VPGRW}S0mAmAPDXrtk?Cw zUVC!VHg?qi{b5j&3CD@dLCjhFS7%xveW41EgY=1*&6+k|JRj>vsnv~C{SDRF2k3}o z*XY}Cb+36_W-s7guVEBhGn=5kKeU@I^r5st+7+%;k;1oC^viGLlxB7QA(qyjE%-ny z@D5icLvuI821p9!BfC-<8qcf~)p(Ak;4#wapY4GKd+1&3{le|f*vhKC(2Zdc2F9%W z(9l}gsV4*nH^atJ#1i<6%NLJs4# zhpMMmbN0ag+U0R448O;zPuA$QTIysD8Jx=$vJ7b5Z~ShMCNC=d{Q7RV`jVrb<8ZJe zhU?%)rG)-;|`BCk; zz)ActrncsZ_lp9HcICHw?>C94lCeyFY~zcM2R2f!N=uc^PyD+Ao;|DYVn6h|I58sG ztibI@ukrF(XgwHjlcCcPKBPb}?eLPWQxH!6X(-{Ya$5DCZup|_6~YHnTmBV`UdmEi zjQy3#e#%a2Oy`x_9?CN1LRg&U5M={)MJO+kv~%Ho@;Vjg5L5OO-o8P*aszP6l|cNU z+{%__^Nd!11q<;M!Rz@^VaaZIEuy|F>v~Ox?jN&m2!EI4=Zc@b?upcLCx5RLO&UNDUX-@w{;DEJuPd`&-WzW2P6|my8&IfTi5h+QZw;X;95`5%m!2?YA7YaVgah}1f zpQ-rSOKzdmHigT|j@>&0->M6s2VK#)5uPoX_XcERleB@?uP~D@zvjQRt$lad+$x&S zI-0?qeq?7R3(N(dFS|LyT#qNJ>P1Y-&XrZBseA}_vxU3e_TtSc)C}0=4bPG zXur{X&b=crIU>GlGStA+PYxRYxUs8=EMT&7!iDg)iy0cz%qkrNie=A)Nxxdk+w@~x z{(8;ZPhhfZB==;FxcgMcbqHGf`1af*#K8YJy6$+W|36*{l}aj9#)a&-GO}HvWXm2Q zd!-B6$5oP|?7c2!BzqI?60)7_ea3N_$DKQF|L*(yj%&Unb77VXe5WFb#Zu6oj6_a9C5H`;H+IZG1?b^m-9}Cqytt7va&{k1_eO`&Q zTu+LrW_Pr%3T~RhWZ;tU+wU^x?!?;b-w4FYu0mcKNG|nkaW<#dIaJVJ+LtZ#%oV8V z56VuF7oLzqYNs#-0iD0=S+LTmHk)m{P5)dvj$uhXRn_GxDvp1)acan3_BHzJkZlN8 zrpJpG+X+lw*~cj1p5ZHUjv%OD&Ac2U#@ZV_`eg!i0R#1e1LfOdstY0p!e)qWjUD z!^{IQ`Jje6eC$2ufsqk_>I_L+Tn&0Bo7(AyiydJqhnK$#3rB@Se?y+&zqsX0ghA-j zyz|knwX=TBQ-e(7pgXgAB(MrNj7jHa!sf(U}pnaYP$%|yWAb(6U z=7JV=mWIR~f4jhglm@VUzMEALYkVhbL_`dcOmhv8SC@jH&+)1O;wWGG*>oRMu0}hp zg%JZsfoz^}JoF^58jdMUL{h(lY#h$>hWa^5pm$RLf6>-~87iRS$fiYVuB#GbV|Ez9 z8jJ_mE>aEZa-oAe8>n+_q~?Ja^vc>?=r&UnV~Ue6=zh()&^D&%$P`g8=mHJ7(Ab>~ zSib@zVP+WN)x$%U3O8`(0&kr(uALp;(g2a4I{_g+_cLC76CNIs!7=rLKL-}SyC^%8sqpm2C&K0ERKNE4DX3CUf#)~cDdm=C!gUs7nvXN=zfqKpCLV&sYu*m zONF*vZ|_X#2N{YnW0dZYbY-JyN@t*be)}H=&Q(>1-ReCHZTYmul{Z~u9d_1KSsBsE z?G#6sdiHYr@oTeA)(dp0s1Dhd4`{=xCj8q>XK{vHHg$0R8LoPa*>^hgiYkBGiFSfB z1rqaDxxJ>G$ksJXO(9eB@P;AXvY**@fGJoqFShcMY{YZ0Ky*K1YnEgksrFxI<%RiB z#U^}pNicnKXar$5L$dZ&WBB-DoWxS0*@pDVkr9My7Tr|88|(EFX|@_=A|4Gjx;#x8 z@d(pf4M+7X6M^qK$~##c&qOFiUzs1E#dL1hXo6Ue?u6R#u-;%hk~>aGJtgxtf=|7) z`MU`qdOPL=9qYTFGQJw_jRRyqBuBA1wVoW+Y(ez)s9Z3o5#O9?_^! z$z{R1$>q~%VWIi+j<>>MJ7r$PllK&kTVU4`9oVo=;$+XnO_P+P?6q31FR%I@L}T?d zU0(kE{1wEwqil-vj~+h==f4y%wtTw<@aepYUrlxFsY&gT8<6tiQ$boI*PjOR+)qv7 zU^CgPxWAob@Cb_1+T#xpHTUA=a#4e!`qC_^*JZL;SmAHbB}1++H90S~CYQ+v;yHgu z$&bI>0Q?2~iCGv@h;Q|=WG%T_dIvWA@0y=ivMQLPR3_FDt_f<8DaL8%+0x7v_XN4p5)a6x(S2rhkyCh=@2btSw-9P~N(M zKdalA$gY-V)6gYc|NIocXs5T7%@ibeqw;#UDvg^?a!#)=+E zZl#m+I<&xYLKZXUEncnp#$ev4-Ga&BH==XFq+LaG*u>qTyQ|g7s%Xnnc_l}QF^r}4 z9mExA%#0B1XS#}76+4GEzKlI%|A0q zfuhbwR*7;U3t~IP6XQeCO=lw{6=P-Ud{2nTqxss$;54+!HL%OOGB(fA7r_;r&RoGDY6y1XkUjs)^gO-0<%M-9!y0 z!K%q_MM3J3lS(2+41Z3%CHp5iTB%nSOw}uG5_)Q44;}`ZRq}yHV9zwnj1rnN0L2>sKLM;neO~TUhme zZkj^WCi|uR7jM8#GL3@*|NU zP_tN*A~FpvvpQ`Nk|Ln*czGI|vlZBc(Jr`dWiF%o@i<8BK)s^mMsFVE(^$2$V8?Z2 z<~3B1+`%{axr%e;#j+y7KO_drE2~@+_IcLq?K_4R2uY#PmV|KofcEia?bXONRUfH& z-D#_v>gEmv?)g#?cB!CAlhn%H>e6t-yA&mvhJv}68Shj`fwj}Fe9Ra&6N%p{*Dkdg zS2ESLXPP|k=gal*GX$J3STM>qj+W4tYsycq2B$`)} zl&sonJ3?RFMe&u>vLXZGNlP{YBmB2_jsAOhj4kQp=LjK6w%W@)A`@d3Es^$H5t=)m z1l#xId)7`Kk5Nx)&z!B@N}UXs${S5lm()I!Prnpl7R@5YPdeHEm{TZ6G+6{1);A%F z?Ywe=)a`y0m)cSg#W&=K?O+-0fD#I0GT)GAx0QEl;E(J?!9AZyeI%CA@WehaY&C38 zqvP|OhIW|WMA!3DLiy+LlvZAxIXZr*0qRx0^i1ODLo5oP7$e)w` zy915gC;BjSe!ynHZWpj$HnNOKf5{ViG75{Tn)wsI$16!8W*xiADc8g#Tp+4tn)1ca zuE3{^_v8?(QvHI9GX9#F3)ru+E)=PU73_6GhGUu2D z?+#Emi9IrP&aj28WYJU578sw&hfx}n_T6#zm+#N+7iO?HZcg@`-vDn_SOr9sCR|VHAm(uu=nC!n>+D)i5dh!?e zGYa1PcfpsaXB4OTbxO#VQWIi9cE{BsvbHhOb@F+9e?eJ?4QKCN_6`AovqP4RM(8ChaI{mw&y!Qfh0 zenD6qnPc8biI-Tm#oxpje>zk8!(fJP<_L~@VqLG{@E>h{+>}3EQl^Qpqd{|2H>}GU z;y=uz8p+VFTk!5JhP-99s1*ZNb}#L@8WL%-mXQPQyF$^3CG z3{MT?%gE)2n?}}5%mFwis||+frq2p`;BACv>kLR3bymefC@p9Ro{;D2L4|3+Hjhz9a`;3zZL7WPUXgq z`|O>V{%s^Ej#4s~JHFVoVcgQ+c(rrz0{z1_C4b+NO$qWEGq~T#rWRzrY;f!mZP0)8 z87d!I27!i_c3wbJI@``)Ov5tv?uBYpA+tq@*A}ec)$PdTGo+})lhMtmC6lCAlWak= z@NaC1I&He|`YHK3l!WUG##7j$PLeyt_bF61%t~_&WZ9tFLdW{f=IKbAU-E7w2Tf;78_sm06k7My4mv+WL!K_mxKB zz!biMUg3ftLPO(Z2~*%|w%zn^84<_tBH6wW)_;NrcKHJkucqbZE#Zwxr~U9N2gVvM z@eI9vUBXAV`S5*PT1y^=@^FO#n}lX1>Pn^%xVzPouLx_FS4j`ijf3dS`wVja&l*`l zXtn%COG*~eeA8!DpP6N}+{8L(-66=(8dcR$Vq#6OoFYe>J6LCL0@a}A^ERP&r@f$6 zbsN<_(>pC2KECuHJk4`H(+%B|Q$(*hVV9P$OUvva-Q6jlEd+k@Y8Ky0(Yn31`srzW zI@hcMa6>P}q4AgE6nSIRswVQGr8Ba)_^#9K*BHtNbvsOBH#jLo2R$iv7tl?c#d47v zZuK7|J$=}oh^Zn~$m0Q9jBisf^BWNyK5f~XM|aQph)!J@$GTn}+o~?5qp0k^09-K* zJZ?W+$KhVa zd=<3yLW21F-T;QJPTPYWiw-$QjU>Q}ngma-Vc&0!w1LQ2Bm+< zpuBbwU+0ACw6RSt(5HrNZGUs1{uj^)SJ?)Dtn>bs)GGN!4Uxv_A4!xu_Inh(nLrsE z=Mqayd&->7clc}Sgz~lP2S^$%x)G+wa<I%!ilurQSL9#iGX<*oqi?+s-*KEgYf zkTd>jiHb+-db2L+q)ocqDpfV74fu3rmqo2N2n<<(0K2U6lhy53uj(74xEqw2j>+KW z%hRdn=1#j@!bV4a`u=6N^w>BNO&Q{D1Z9nLe55^mxNEYJBJ_K&+`;)G2UoDuu56$; zDGClF&Uj>EF%)m`y>WNVVK&M;-Ld+lbIF<2V*Qv8tMQ;lcmB^hFMQ4i)) zchg|PQHuBE9+$U74}7CNOXBH>UOfst5em3kG`aAA7V%8;b)Z{Kut%(l;EUu!yFrv; zaN_xCHpZh(4SqCDc~=O3Zvn*f@zVsocAsBSpJP!^-FAsHZmM9fh+fdHGt}(0yK9UC zk|UG6b~)zDn2DsiWQn>YipbxbKZXdU%atm3$Fa#ezP2AoN7`Q-)rSr#Lg|gdLx=Qd zmX-Xar6`fI5>`286N_;dWlb9Vagg7j?3UAkx~6Ya&Rou7_hh`3sa#z~@Sor7BHKRI zMAPtaM)jKvcdn zd7gGYi`k90U6>KK zKA|-0DyN_z62-Muvtjby9ccQ3aYP?!x06sD=oV4=>*T6@ifdyy`w-pqOZ3#x@2WnU zOvM9Tnf2F=AT{roqpD7--s=~~s4aGeZ|KSS3eb&2mJ{!9_VO1Ugh{~=ug1uNMZ_Wp zo=r91Z_0>6%{cV>&|##n=Pu`l$NYzC`FI-YL*K}p_6T?-?DgGbhla1QW$jYRCZ&&p zrvn5FiGWSL3Cz{}`${=S)nmtOZ2Q6Fu1T3TB$+g=DvW^78EtfpEty38f*8$Fyn!tms}y)lGOaOWh{;sU zl6{SJ%RqsLC!fODy;u^=px`c|>_`6ZGVYqPVM)Qn?~@2N-^7G~$aU<;^HYv;(~;s- z=Ne*itF7aKy6*=fXCUtZZ-DcMjjSQO$P>EY=ZyT;;IEHC7K4Kjm9x(tqVEhxlSFZ< z=&_+IXngyMozX_V!N)dvhK5lExT}#qyR1p8Y3(`y&&oe$(aIwk@#j9c*uj##k6;ydpu6O<;wcy*8-;x!%`ZVxL|#-mk?@fuf^uV;T3E%=J#fU!J&K#v;O z;;e6|C^dS)tzaU_b&x99ePkXOPKNntW}3Klk3F+SmF2i))uLtYvWziZ+rf(K*sg5b#Mg1q{XOw!zT z;1o&D$sB3l>-r{RO?}<^aTMU^ed!VE*P`Q&7FOnPmIyqg#>_3pPm!8TBYs0@?KQwL zyQjjA$(G4^zp3zCWfPec%Di&c-rw`n2ugDN1^5T5s$BoF%i`7JtF4Ci$-=$ySj_G5 zy;4(#dI|>bJ}19n9o<8@I@k~*IYnxJO387_M-D0y0vMkyhUp;Xm*QJ znwei}b7(axxxc>t!*+gubNvT=Z9nuTv~i}3SsUP?5f9X;@3+A2F{heiO0psjnA(qE znl+g=#NMGqs%v^D8X%Sms=SxAk=d_+n7T$vWmGBdkjg*OVEqjM1)FcQ{EkR%HZ>i; zQFV0a&>N)a)t7N|6@Jg?Hc#L1KbdbBmF~{or&`_gX}cF6_AY)oe~x3ruJ-Mb*Inz6 z5zDPVZ6-8#|5ygLOX~b$Y>Dfxc6JCYgl75YEvfg1b>JnRVQxvgAPvrts z!NY}7p2Z^KrzFfbKD(~@ZUqL|tAB{aKkAmw;>3?dp#oqpqlqUhbIyS7Z*Om~lLy;X zn=z(C><0r9v#6vdt2f#I;phMG9#(T*mmaQb|HqIXsXO2K9|nfrr`blR{6c?kvrA^5 zI%p}Mgghh0zR!EM5hKd<8iz}FrD{Z zX?&8{AYuWRuLPFONqX2hnKd%kZtx->r7Z7Ay~#cKadOI!j+)x1K(of9g(b4z!w54) zOsrceVWXDVrCrCFO6<+yo%g1NeYJc>x!?``YU!?4scX_0{v0K?Ytop|O{LsNHmnSR zIRDVJC*)-ggh;U=5v;+w8q-UfMWmU(7nYw*NE^{@UD1}I1sZ~cNAd3P0FLFS6DYd@ zkwEnYVU(|{nNe^e^}CF5F%=>88#dP9I~1}`QZ&Mc8B)n9GoVuMAb>e-Q$4ptF`c<^ zDDn22(ex{85iIrY%JS~eAHS@unGYUs@E>{wHyRg{8z!2wL3Fm%!! zvrTNA8PxTdG%t7()qohRYSZL>uEy|~w!efYO*)%za9#=!8t>eQ}O`HzmvZl(Z;cuoV3JL-uhpKz!7-0p+ z!@kVNj&)Q=4__VFQ4g|uVb;52usRklT0)RRIL2m88yF%Dw;iH7MC2<&NCcswhNboC z(txN2c`1*|MzC*s^cIP?nWqSzj-IS6v@pWbuWEo?0JsKXLhJg^bP zPWz6D)Wru~Yr=+GJm^ruUq!b)5&TImIKH|EH2)U&uYM_)rlH=D1<#$?T)SBdkf{Q= zSh2_Bb^K|!@M0v&4bel6A@+5wZ`vsMPIZLPMtLUvO&AClF9Fo(Wnb-F)S-(Ks6+KX zKT-|09%hyIV_-|+cLE<|!(7urw-Q%ynr$)fXe+Lgg6O;HYAi*?;Ysvzj~^EHI#R~{D|SU z;RKv8LC`${70yphS zg&Ok(CbeN*vq#9@!UqPi!gXT)MQfUe0jjXH=lS3j@)eHqzboO(yjuvn z7UVUq>xCGq{(^Zx(bC(Qvvcueoy|pr9R;X=q*qE_=!H0Zb3OFmoT68ih?m&+e#>!0 z^Q~vrXbqKag-dQ+m+prAsG`UL(}_32CGb|>)rHn{k70&*$DWdJWYiccs=leZso=#5 z^>5H&8g}ZKaJU!e(qCP;-$6jH5=3ngfNS=t$xGAQv~exikl}yW!$dQu?*HTFGnwji_}@-DN9oAs z=*Fl@LW|)PZhmw6L%vssZ#BxbgizH%S4dT4*l5Tw?f5p4%|64`se9$NyZMCZ9K}c_ zT8oEFb#Byy`iyBKM6oS?yQ+6e8q-=-Zu545L4|xL{Hm2>5{1x!hT#LG3aTUR- zk&_a9i`IZWuVDm2Q&gKCeMrhUZ22~AZLd5TmIRN#He$i8t^-OILO84TL0{2viGpQ} zd?7|C&EP$CEl6D4mwpiL$i%bE?Bj}z+UvO3?`Oj!nTk|`M+WuxH}UN*`6Ael>XA#J zC#cR~JI*Tve8yo_pULfZ>)fhdWsU-tz`xbyI>^zrb(6!{snS-mM}HH>6MyJ1)BwmU z1q^7di7r`R&Xbp(^@iRvIdUnX&8kNV-o+kmY-{4gPn2q#iLlx|0*>Y06%YAEi#l|P zyi_ke5-s}|u@#?XeVgqcUxyAVX?PBPOG8YJ)C+3vro|Wk{3bmKG+sj4lz4_THhE?{ z{+gUCa1VcC?Muttd{Z?=29Ec(*li=8qE>wp*mWw$#vLl@?N%Yd^<=!AMk3!N_^~eQ zd!6d>j%<|pDO|Y5(C{3C?~wSygYxJRc)~M~s-gTMaKeauQt1ak1H4q>6jI*=t}oc~ z@I!gf@^c#_a|y4Md@1*~eFH|x_@{Ht|0sbr+w~8jSzUAVN^&lsMZFb;DulY0&}bJm z0*zhf7}!xfx?##Q)={CfQB&;@r&39nE!0Ifkhj6%LH&o+pFzKjI}*`|G>Zd`k9GEd zzMZE|PoYQu&JOv$ge6(emM6N?S&$E6(pku-H&SdEDFe>5Yk`&|N`622>;`?N0H}l$m5#Z{4v|`O zKIXOp9Z*eWsciZIq~OTp}LR$ zNdB!p%)^Nrq^8TX&=(V;Ds_2^j#rOd&Ay@j^$+QLtYEKWK)ug&!y+=#yG{};G3{4X?O-EQb0Tzea)Mp8{+apc$e|-Ma=NF zNlI6U20*?8NO1rT?T8#jFaI0nmqmb2_r}Fk(yNr;*K~l0NQzfat(mhOXRi?SL6z-{ zD*R$Xe#NG=djP-NN=MFy^5pN4^jE!MX)rWEN=1dt^KHADcO>;~dY$rno^N!L9(~Ek zs`qF}rIva*y-qbja%4JDYxQW&fuHwkDVg~A56x7Rx7U5hFQo^6o45Bu_j2~FCEXzZ z_TEiaiVO9tXvG?A_;2&ONl=~2`-~d0_PyS$%U007jceQPgyx-u#g4GZPMXf+V*UhL zM!7817Vsh&q`cJh(xUijf>TH3Iwo+)V!#doNvJBWAoOF7T_t@Zam?=Oro<7h zSThegK?_QS&O~tROC@|ih#)TIRxB1j;E>tt6gYMAls|8~@@cKn<+-nZZ&r(X-g0LO z_t-CVJhofNH>UWqn#G;jjm$ahoT#1v{@>TjiD3 z*DlG3SF!yeSgX`Js8~mBA6s8#PmjjM9@N)`!k8N(+TyaF3a-WyauT!Np5Imk_&bJu zcd~J^@h5*3 zDI1xjKwbR<6g4%Bx)&#psY=|O)@y@pWubLBzM8I2e`f+2C0}7cC%RD&HylDzy5jmH znl_RBE+2H6bLs?L&EjSx)jlrK=OqD)(l@N=KPnBa^)))fiIV=no9g?MZ0#4({(Wi; zAB`bg?!Mf3{~~2L_$#pQfbOMM>nfAku|nVNE^d4V=lDjcKTF^3dEQ8(23^84Gfq!G zF#K_0(|K1VuqVNVF=y)JKp-yaJ&l9tf>HTB<<|-tkA}G0J{t&2xc_Tgk`x z^~_rt`0BQMJ_?w{z=^lS@a!GNFt41oh> zvMZBt-#80NjsW}Lz%_jSHJH2-`DtnO5n9~-O$gi1G4av;gqyrbB39 z%&luJ^&_c|P-a7|wS<=u!DuQSG9e!>0Osz;w+O}>m zG`whrCA)(+uypEivd#%`!q+xF1XkxPNogR&CsO>Pc0mJdGx4&n5O4u`sQYnNghc(! z!|@PD;*-hvgvKk`Rb1}JfE!xwrT`IlUG%TQPzS4DC8E^%fCUMwc+i7ef2*i3h%gEL zyAVq5Evt_!^Qc>QZ@mXYQ*|UW4op*unw$Gq_if-EMm**&B%-2i9v=tIH-WD1R`>W2 z`iJzc|Eo2B35e^ES!Re1t;@P_oybV-;s4db$iE$xaGtW*?{ZsiC!{paDA^gIW@LE! z51t_3t?55n&~=E)%@W#sL@J-HpnJq+CMkB%J>#mAS4iu(@5a)vu(z>FU~RuPkNk;x z(PYzsfr;a0m5NBT-}o8QF!W89Df<@7Z{X!v5$)riRa>_+ z2#ed+nONjt_m7}3n!8Kt&vtsi-D25lgxQc);ABq5a6xXKkz z4?ie+2<-?(eMLMt{~fu_kTR}7Zi6qEPGSg3ANjWN714yF56s;)O!VZ#kt2HYK8Mn1t9_5!=@0z1L>w7kT57nep^qWn ze;G#4DXi5{3&U0A-;D3a=WKAuu00_C6^$D#(}Vx#3~qXkuJ`tw>m$7)`Pb^XPD2cR zisJ?!Bp`r+S_>0dFr>)`cD}Y9*gi<;kJ8Gzc#ojb@v(6nCFedAq@OQM_w3&8i{$@= zj3bs*9lxN!t{9w1?Z})V)7~myZ}mGx(WsCA`t3S^A?hD0p9P%3BVy^+J;lQ}=@-xL zkSG^wwE~y56*R$!`PJ18NI2v2v|=poT0ky=f#{a$8wc0Z8JR7-D)anW1r!vw9>=n< zD(Z@K(=s#j@3qca&tFW-2*=VAYITbTLT2!&HNQJ1Uvh>cE2MYv(N7n)r%+YL8t|0gr-XXb*I$g z`);9dF@q<4`w*k#Es-v~;zOS$p1E_zO8;s<^X#6dRY;)&Bsj%;Om!mxr*W)R^t zPIadtiQ$ufF!9;NqRemJt#6P@Mml+HmWaY{kB#drIr5a5L?m_5(dOQ)ayuq<2Geue zWaf;F^5!-F

iiEbJBI%C-G$iwc$*py`KM##5=-r)8H0u^2NoG@z}HU~F8*i>s@8 z-jQlfzM)cla~vu9`H|z3q)kjp@J%f8_hF!cZnBA+Gr6@mzOVHaO?}J=o$@nEP%=b! z*%DPxx>s#+Ds1iOx#ozprMB@T0k22zQ+h>%m^q$sVEyYbLhdg%2IA!k;H+rarcIbTp3J9T*%mFuIMyjVZ*pzg37`1Ja}( z8w9;4$dp+=sS8!Cy?`4&)y8^kizLa=EOWBA;a)Dc{`$`B$1~n5hsA7Dq7?Qb}-27++Jrd zzQRLa7kxIeb-&XzHj^s1XN1S-jIkAuN&x zKuw7DCdLtR{AUcM_xrov zUo5=NpbFUZi{J0l{F1K9zXNdoQ|%E3hzT_GAuPyf;vb#SwM&-D3|n`D92J zqv@^RIfUZW?erf-J;WfmPP!IlRlmu%WtEeCR+09${cTgT-pRG17}R}o<_p*DNxiXT z@O?V%ycR)RPZZ7yw{^H_a7xTz_?4iEI#k3>W?fLVi}q)dyHqa%9&@~WRA^pgf$rP< zm6;UVAmY}VBD_fE!Es`vOCKki(&MVEn@<-#j(opu*kE^R)}*!X%(ATYOq9#di4)fg z#7#0EeSS@RMY$s+&QfB4PYN78bmYjA@e@3`e)b5kp@#{2kLl!O+0d&N(ku(UoQuU6 zY&~9nqBcu8!WZ-R2^gG3+x~)--I1H=DyDx+#31FpGQCcHj!7KmR!0`Xf(a?LJz668G(LSd7q&h-w{I&MZ$ait2BfP z-pDRBXGcQO;;EEMxAp}zR+cM8oEf`IDp zCauu-1SG?*9>Nrbb|QqKdLw^L0Ud6^%m}A67E<=Pr`N7w!Km~B5ypLd^WFWbt4RNi zxTE6aZzLl1zW(3Y76$FU)ZIs(?F^!+kKCVhy1*OG;(XUHP=#p(fMMgK%%gmgG-0Eu zkyu>rN;*`}2>-N($0sU0<8NSq2`GE2E;*bZhA18LN;5DPgG$lvB$zPdy_c9ySY%QC z+VLSMGjEMV4wH5FU#nYlSmSa<9hlP92uB}b1{z7w;QPB}Wg{8h=85h2QY6IyT{2k+ab{H!jz>K4pc(^{7HR>Z9Z>_lu< z7n%2I<2cZE%Y2()H_kZ(CDkX_GvpooFBWClIEl2d(Mu@AO! zrSIGQCz_wB+seU=2N_Nx(6GcL-Zybi?_5{jl1yh;S-<5*)L@g5h=yFv&IclxRnVi} zQO%$z)l}-{(X}X6A(nEFl*nYvk=sgrUr@4keI2e(xEIQ~>pP>ZRmbk093t!+IZJsx z>-H~k4gcbX!Q-VbChKCLeL}8z=6tfXBpa5Qch?i^iMhv|vAVy-<+R5KeE#w_K%Lj= znW>O%&go5iuHmVOnDu+V#w=B#k4|%^s~N3s*MDCCr<7}6=hS_Fgp40ZO~$&v*|$zU zBDfK(Euxe^Rs+GafpRnU4=|-IUt9v%&>CrcX7sBhNk71FblhN=c-vO#1$RW5X;i>T z+R;z+=keF}0v-rnQ~ejPQ%@;1bgJE6^wUoPyy8h&-K#fS3i|Y>#UEI@ zd5i5Y*1gi;van3h^*}@@3x9tPnSAEpXiv;%RoBU6?>9(J+{WD@N#b5P2#WS1*<`H} z`q$8veIY?%k*!0Czs{;cg^*eor@E9*@F~Yo)VI@xk&hB@ZsxGn7Bq&0e zv;Cp)yt=C`H6!usrJ#c~l3eR=IbI;Aofx$76A(Lzb4x&;uFSAzG1%U!r6KLYL~u*t z&l&Yrny=gM15Bp-dy}WPXo2~V>sb=ZDdy|H6ZO1tN>TPVAwaC#ZA!MN0>OQkr6dne` z%g)wbMsJ(c>_@nXouRHfizM>@yEpw8F?BMMteb&=B0#vK2At4i%!FO^k ztYkdEz)czX%I-ztc}(_5-(u2=`uO!$kX)Xpsx;@r_jp6k^(VjHMOvHO#Gq}rpRSj& z!cw=ZFyny_9BT_Qos#0g%ezh~ga1eEd&{8@db=t*GuL_eF&E*o*u~R%I=ukwvKp>J zroAH~0ACp%(RmcR*Dug)w{F|?hQ53DUD^e>IN(u2b@xcMW(ray!sOZR%14N6ZaF=| zimW>V7dU>zHHCr=bR`RrY1tT@F`Dg_hP~o(E952n%cIk(40c2Y-(D=yrbsLvSrsa9 zdQUk$>EE;1x+`Jt*_jDR6pMR=mZ#3GRSd*+jYi3h(flyWPX|D;BGnJ@8ZTX$ zlqnMOs32|u$W6wsNu9cG9OfnkTRNp5@E^wEL!`||j|@a*|Jp=5RLFj%kd|G<5)0d9 zTUz=*|D!f4wiLR{IztIoFujicTm*warE5Gq-_(+1Mtl4dDD776kEm+7(WlHVZJ^|c_$@*TF;t3qep zpf7FLYeuw-#nKW@HQxj%bJ`lW#G2T>xz>Kr`1xr-n@cz+}LrIQ$r@Tx&)=#Li60qo#iOB z74}ZW8v4qSw!C$Pw;UyM(6cj2jPu(%L98XCf9I%3U5jeufdCZ8oX#1F0!i6FuIV@T zBIDn^%YhhT&ZN#_HNs+bav@JJ%K!0}=gT|;xbyk4s2cz~y3l7s;#Z=!c23U1=L98x zAsIt@PQbS$E3ta~t@`H&Vw6KqN(isgaPL6%=l%yThN8ef!al^$Vjnhg=-tVtIa(l- z62$6J0D&7RZgPCs*w|N!*^|h3Nd;n{ZP}zUp$_ui7|j@0e^44sW?L#LrVU$=Ig;+MS)_a87}L4nl8H(=e}FTW7m`9qqyZPKR)2m_6mDn zBGHwE{d-`{kzaUQgN5uM>3Jc)IPVdOM}s~)V1ynMx=rQp*}nY_@qIqGbV8E@7yq*( zM*j->(&CbfJHOmEs8u^tiZ9ug(Jw$w4G_p~#Ap=`UJbaI)rbiwEKj5MRX|6%-!c0wI*SFZ>|P4=2Xxg@MVyDuS8K zKcN0!{I3eeEzg;+-8bv$=FDQmdRj}@#FFk>Xrk2t3?6r}zG8Fok!7<4$4D17DooxN zYM;g}!4OaGZW9P1?rzhJFW=93mukO%g2l7kOG}Q$ zyZ=W#cV@>(VMMy7b!bFHx)M)BgbXqK-CpC&HrG#+erS4gvy)`-|1o6Jof#Ju)pH~T z1|#a${==T7q){4Agtiu^#Iy|YqEyI#V4@r$qRlCVz5&L5!R;z8Ej@_u@GoSSA^wRG zG~;nv+ZC{ig8!LUtDpu9yMqJ%IlGtkEIEr(Rl(Sro~2KtT|5!;T2OOUC(N$ElW>Rs z5dL$oP6>4QLGHgsA8`E_mY81uj^aYy+r*6bf{H3RRUuZfg7PX!xc8%LV$-|58%GwY z+LT(-K}hk!1S|6Gy3!Kd5;6q_`cI(z-LsZ7j^ALXK1?_ci-@+{6KgD?46^jtgspZ zd)L9N&u{rWnG%TUJ`=lA~QQ!?By&{q$C1>A^>5>$FLUSo}b9 zngtqkNLtMZ;BIBeCaKX+^E|rZ;CMA`T4MQ(+p*x3jJsq&Bl%Q6SFk}?TzhVS;K0d{ z*YakvI$`{GY6-$c%ImBl&omMFdN&8tLFtou?JhGgeG=mJ3jN5Tm`84b0Wa4P0T&EK zB~q)#&R^d{E|{y*doocPJ!`T`i1&-;bqg_viv7bI%@loBw_v#N?H#xouMK0#RhukH>3z2VSA$cWBT7e9~-4#$`#yyCHb*QVcE}?Lwy2_73QYMA7IouIpR@ zsA)sGPJaO4nDQSZ84d9l7({{e&*LhCcB1+~`oedfIQ>Hnnz4y^hMvz0Kv^znbQMSy z1O6H2j8ZS0i71(f`jt5y=>B?S1Aotbg(Z_dT7ww~KM(rJ8?nUDIvd)Ti8T;i6>@?D z)5AF($Rb^il98rSbj}Qv(!hCi8?=TBf6^rEIXM{peL6XQd;NjMCiqz>$lf$wxc;bK z{M}if7zBwrXK_!prGR%fc_r-c>pPsOv-q!)&IMv!cwt+C=O0a;coufJ0B5lIWm{Tk z`&S*v&=}G7AM^wqZYR~G_|6RgFMC*-JD}}PmyGlE$zQ#Y zi2jPEh@BgVqj&CBA$Dln3Ee~zG40_n<@DHi95J)Y*>>VK zB-4=70%u#fh^=-4VUNZCv`(Bsmsv!CZYR#24r5)%IFlxg`}+S!(sh6}@jPu6X#yf5 zy@{x(fHb8;LW|i$KK1UFD*=8Hv1Zf*UCfA&9ai?W$TJf~{E=%NXY349`;Q$7BnFVGb8 zQ-|ZSo&i{|kBdM4frLAC{YYK4(Lyg8-VB}!w1@zGr`;KfegppZ90*=5nf{%prPh(u z#s1R?D2LC3%>6tlf*Jp;E-H-wS4Z1O+7!z3Bs)^$-YCw00j3{e2=wnJw)B=XtQ4BD^?}3=Rnp!TrlM~WV)X-~HE?sUnZ{hhAUcTRZL!!efh@*hau6q8e* z?b|1nW8TAQ!UJ@3FD?9YnNt~8)R~p8ESY)7AKq#M%QdnNWsM&=+J?ym&v<@^|7oBb zpR1`Vcp$!CMgy{Vd{*sN#JzP+le(jeemV#vvLGoeyIcduDIKc=(1q>b*GHOah#x1{ z0+@wSqC+|HCTPr^F8$2JE0E`JtFss*v)Ndb#ghTaX5FrM&b8;>jY+3KI;X=f90vNX zSPedLXq?U;^wP4`BbARmLBgKVY}}mb*qW~K`8PE*kEglGI}S7tyZmIzY1;O)+~i#O zlj-O|udX@qy&7a=>n?_a`-#K+Wm*PwV)Om-5b*TLr1i;G#UvD$LvD zRukQi#RqqRjjFxT)0fu6h9Gfq<*`mw zzXwJ=GA_P%XgKwfcm=-vAU^bgHbL^xEOYq5l*KjXIcZaRrx`){_sg!AQo`j((X50w z#WOMclgNTIKlmmrxeV;@p(z(8EvtrOxl0ejet+uv9)ErNMl9UndGJkvF8c@12^O*P zFxPFFboZR^s6y@|f**QNYJ z_18!3GSn*?-&KQ<-XJs6$QVwvy5{$qAX?PA@GuxwR)cuJN6xhBS4F@UFgU>KeAKEBoUGIFW718uNm{kLs1L zMC1m9=y>aGW?e^35$hdtv|I%c5^uKasp~`Wx}_kIWqIEuL61YGHrTSb;>hbJRGtf^ zp8@Ma1*)yt7y!`_(+lnNsq%N~8@hRTcOKF!C63_@Wkp&DJ7nEhe12R-6sm3LPe4me@%ychzXyScy ztA#S(b>VvO%mhvNLhIN%FbHsgrxm$Ao4IyHHM_%CB7^R6h^1tMivD;-Iw%CxGk~tY z&Yxj6P7MI9t7Jg8JC^0NHJ2vq5pvq?3>c8p1};z5qvW(%mnH)T<+S5Ws*Q-6Jn66; z&|_!Nuk|X%4MyAJ(3q;VqnNRn;tc0bZ6!O%m;(k(?DhIWp8fslF*T|g)zhQ5~K-4&#K!N z%gE{MNr&W&>~f`ccrHKD89Cyu_YyKjPUk19-cBi5l{W;x3fPdYqylsD zEYL~Uo85mOX8d{G1Zfe=nO{$A(_+j>Z$@lm2fePlJuY5zc^#4gdFXfmaXq}TfYK_| zQ6=$UU{-~PEr<0a{&1cqCz z5M;b}j{wvsSs&I*HoX7S`Ip(c;O_FF&G5R-=`*BTzWZf3=_F3g6SS0u!U4RM@b|ltuT5WMDg#|Dxqmmi zqUsYu3|_w{gif8m&u^%&`H0_=KF^OJu)EykfOVyW91WdYT_y4q<}=mbKS_em6)9@- z;tGm7Zr|$fP5#-h5$CosTjM|G{~Z!}OVXzBZ{Bm+LyfU{D-yw43~kOyU%b;+p2WzL z@Fh8GHkjp9hIA05MZUaRnO%L0w+)tDj`liMFJ>$rYAZlqIz2|w5HLt8$OTmX>flY+C=GjZY{k%jHS+p zSDBA_-#|@4Bjvw-3Iq(T5)ExM851wGJ4ad_jX2JsXv$A)c)w=N*ADg#;M0RK%^O&< zm}F|vf||s)4vCGdOowlv+TK0GhTw=xGep3o;1HkoqK5J%mT+w>A4tns z8Hql8W?G6GvpT!c^*?0U5DTI{aO2A)&JcL>PsiGA?8N(E@wa-jLJiU5SDwJ&_@nU& z^>Q``T7DkKQ?OMH-P9EL)E+sXV}VX6788T#P2}fuCAR$~Ubf3y{?JQ1DW!pJKi0Db zOg}J}cr<3y9q?QJ>?@*CfX+Qq>_c5{`lXE>;d<<-w0eT-pwT2r);Z`S0+oxRORM*F zhEpDmsUSP3)ng(5(=QxbPbCA~f-KNhzDTeIn(u#FEE8RHbU3lk{NdoJT_aIo4HFv7 z!q3ow?=StQeQx!mVYz`8ib$|3y605~)n{z#6^PcZ4v-sL#ImfVlRA1F!;lJP0slQr zzyHgiM}CjyieAFA+TbbXLLL*uWbwUHz)Vh=8kFvD3jGVB4QNIt;z$x$S@Sc8p^U`c zN)a9Pw(L6ewS1jx$0w@OgzY zAd9}5ANR2^X?j=*9gGHMZ-bAy`__T5jLW%F8zr+ zwZJ#v+;XZ(y#1R1sscaiRR+i2D>%T;Ha$QeevQ#{1S&&I_<_%hAWGrN%c)~2_O6Ej zNm&|SHDT0NMW^jJaX3cygT1@bB5Ld>)$33X5+$2z?@|Z59?|$`7qs$uvym}(WT<|z z^Urz_(Td#sMK%WuLHLv!*TVxS*F4!Ee1 zeUaDcFRd0;bUfV6uKtU`nHf=`K{Ri7dFgy1qr=1JW1`n| z_w*NY1p|k+o`00^HPd90TQ$>^QUocpN(#L))fBnxn>82yOL)>NaNx}RIV%L) zAA!KJdE`Y@xSMJws!@@G&c8W`8b3A~u=T5Mj)841S$~AX_0i#pCm(SdLwW>S;GeA< zztQNQh>A-Rw4chrn`{y$`P+(F`LSx@_eS{KYOkFHyG1%~g=nf2*oLa;@n4)j0Wasg z6}{B6u9|0;mTRCu;&PK%A0rdzeKc4lxlLa0#O3-BAj8k-tBMfoZJ5u9m=U!(sTExc zK^3BO{(aMj0Y{vhk8n#S^jLkmb+=3+Elp5&jQ~sKxm(dyc|ewCdXYQ}<-;ZDLtYx2 zt5VJ6$hpn|miW+t^~uUD`ISEAM!OhvbM~prcH;Wn`@;G zNE6sQeVFr;Yl$?d;!8QQ{Hv2Cyr&f&$V{@qd)MjmQ_WuWHS&Bu5?R>P4b= ziOI&Cd{d)JCno?h;JGujj|&y?b`}EDe2Vn5Vo9yq`A{b3#W!3-hm3+ME35ws8uh|~ z8V+%YeWU+byax=8hw)#p+&2l!_aFp8$(~sBm=uDTd zyj*PPCG9PEC^tmC;X5N#K<7-sRAPRxVN&zaBI1ksnu#N0xa4G$Nqh74Mc~JO-_PQr zqsOFC&%?VOUjR_-NAJL@t%Y76bqc$^ueLs;1e6H);-Ff^8qh$~aa8qY|9?ZMxAx&{ z21(G~g7)hp@WLIK_<|8*P>K zBf=eK9`ecXv6rv6n~O#GNCKuPzjF6h>hHS9#&Ki9*yotMFC**JM&`k%+Ex*)Zz|Fk39q-rzETr*TcKN!AKLmfF93r6Oa>FZ z(a6ZNH3>?GVi_5@8uoOmPpad^zH{ySZ-mNhZ~BIWwwX225wZf$^&$gW;Do$YkhCLQ))ax zE&Q4WHmf_r60~B_VwQwNzlT{Q>A6eg%?imTcamMD0(_j38Az3;05Po|3Y zp3d1 z4_I|0Kx|0;MsxY4unM8o;Jwp%wZsy-5V(f6s~nSVy3)!k#f@eKdW3PRaxG4>$N z){*k#ruD6WUFIfePGQ2`DBPao;SX#6^}m|gpmP4CynS^Ul)JUvx;(&bL(_zEUj5L} z9CmZz^?E-7Cu~^k)_r*#158O*W=-nw=cU*6WlyQ(>S)s^^Ip5Yde=-ZBd@eMCYyX z8=+FI&jeJ{j3FsAO!Msk1hhy_cT6Q^3qCy~B_KY4M|%*{q4;Ttgbl8o%L@TX^(!#{ z+Emdc^J{eW@!Pyw+|l%3{x>{>yB(33mRRe7h3caV_rsrfTL9xzY>G$AN1NmH7kU>! zK+9sxeTtZJ-HGhXvvi=_E0R^^4_fzb=x!NFZsMmDz=gP|Bs)<^B^`i&%>05%V6!}U zsdl6v0>q5Zf3c5!Gg@30&Ot09YzE|JQ;u<4cGdZKG@{)W=v8dk+?yzurfR%g z5@5zS_K(=hM&#p$XCm=SuKWnPl}PN8^MAM)WozdPt!R)Mtc#%7mLx<~pIq&)n&~*h z2#o$`!4@y^Aw0haPUh~mpS)WthBmmktKL>A3_ z1C8h*Mr71kY(p{R@sdw7brh^hW#XrX`^U+Wjn=?{!*qXD>Wf4gEgm3C7Wr%1G7rF% zLi$H(>Z%lhrCkSq1k7UsB^0_mO5;kTMYSyYkRfeb^o>%;tO-3Tm!`+)g_fieX|XL3 zS#s!_ecKkyA0eP*Ne~mNBnPlmbSX2{(68K%)_3@kF<%I+7<2O>hs%;nw%6-7Ey|x? zj=oFRU&1F^<2`3@x=wJ{Jnt<;)tU;aQUiRBWLoBH)?H!cx!}8r;2n)=IdcB?u@#;& z%N~T_ZrX%Am!2vFl$y5WQs1aj1rupg8vguL=HP8B{Ol~L*97)MA7YmOkDuxsY;BE~ zpLSm>g*r~aY@{a&>6NB#&3IxE0_(!~akB%3Fv;qgT-qsBs{AsZwQY+#03oqm3K%Jr zpQiQ~LhJU}RH=$SWas7G)X;iBj|rW^Nw#^Am|c^6-0XT=Y(O=7QJ4N1mK@YYaRSY= zpIBJPVC!p#0akPjKr{RfT$pCUdCU=)4U5iOWRD)-JRZe~yG+s0Q(I{!a6#DIq!UJUCH@k+!fZN?+qEn z48tmDT&f5mnfBR?bg-j{RRFcG*J7UOaQu?7q3b^J@!Nd|C#u#SC*i`z?_s-DPP!FF zvY_(jld;%RoNQXZ%Vpb5_p~^Z_lFcW#fEyoaFi%GdiWEKn~VN!HQ;KLCd(pkOmjLX zE?hecRxfspb{`l(>w<5%Clkjn9@@_uEW2BMTM|vUfVD8ZjO=qx5XT}fUXX|hjK$iX z-gZ`5z`W#~ob6>jVfB%6Ww1)J@JAox_?r6>g;!$Wmc84)>vY^lbNUW%52TK@7{?mh zp=@W+n%v{x-KoVz7s>x>Cv*sQ?qQ~<`btYI+Ak6II#`-Fyv9)k)=dFh9|HYa(Y|g( zA|UF7u!#4G^wd%j4Q2j0#yune=AB6)`wk#T(km_0Ul+%;?F^0yf6Rf@lh_6X0Qp6y z&wKgBL&V+PD6w227B;tFA>@<0dT94tNke*bPtsS7lvXw!F$vAAUn%dHiDebrXv z=1-BZ-PX{$d`=Bkn*R9M`eU`OSDk{@JlLiM_t~;`8J*M3mye>w{y1VmGKI|DQnYg%?JCgHzh~?Ql(*HdwPc%O_Y%1 zQAV!WdV!P0kT@EM2P1g6HgK;%%B1yPL|4?|Lqgr>=MftNc+0SFg0*4;q%B4zf%@;@4VtnATvl=GD>TrR8>CWWK2$t!|67Lk!&!qV}$QihwdVX`sm)?hmRB=!@Y_wm)nIhkm?XZCHai=pc+{zXrRP?JRGgCw*fmk~ah> zu#^D?ml)@vwwC5P5T*kMUcd&s58$Fpw2SS;&&c&vXm43QR?n**;B;N99C#)mLLL7+ zYkFo*?LKvQ>J**F$d=Xt_HI62BGC+FBm$i2Orq$b*e8^1Lm0hX>@EC;<{~#M1QrjqU46tNdLnJ>_ z=vt?8w5&S(dR;odDbEJ^#yx@Y*>|qax0M^3TE$7Gdhi=u?W+oMm|d9=jTS zfj20*cE>gWT?(PbhX4S4YRTTF(t3w@Fs=K(ttv|4vK+o~ zY`*2LO*SEM>>X0v`gQ=R{$zhdHXq9sVk7tNuv+LWnToYpbB1$Rf?5e-qQ&K7;#Xh# zh8C>nU87eAZIOm@L%Om%Ff4DH&KN$L&@9V&W_p+Mr5o2 z%^M=sp=0`#o?CL(C@d5rWe4ie5;+v{S>-wsV?OvS?9vEpxH*V6J`0W-6!o7>8ymDJKa30vT0V|{H~n~TT!+W0sL!nzoWzJA9XpLqlb19 z>j*PZm~vCwh7XXg7v3sPOb)cSKmW1*4&EZtzK8s3%}z$77`T*k=fwT^nxOc)0=)JF z1m(e>%Zm*V1+q*w)^o2rG#mDDA19DB2g{-OiOeNCChE#x;Wvy`=aS3q+!tq$^)UQ0 z=MJv=#?s7RD;5_S`^OUzc3vGJX}kJgMJpD+K|?s1RratYMBCZ06rZVRV2hc?TN*cI6%NUc(?mO*qx$&f&cW{clad;>VCE$?2 z+->CF=~}~nAhH(kh0ZzZ;2iIY6RYhfT3l{ITV3#ZVZ#=Bh2=!LnMoDm?gs_1Xm7Gs zqqF-1YldR0R=KFe-`v&7#SJkGHYlcOBqS23vPAq87u*pBJW=@jNPc;5Ek#Fs&iY}q{~@S%1 zYTL4#Gzx=y!?*6xA9$@lkiD;QXsgZ1+Bza+@|DcQu!FS;@|)SPw0w(DNEBcYb0hSE z_oXRRkIWN@`ywzGTEil4ZM5Y@?>3lxu zRLv-`@!yS$RbE6)Haqv_+j8O0QQq0R^DWqAT$3;#b0qfdl#Fxw-PLM#t5r08>nYVY ztQ&F0JPLF#d>>*@TiY$M!0y3`bZ^j1h@-SiL03D?0>#vNu!M4x*}tUa=AINMEq)66 z8$CCy(b10L+~ZiC-9ejUinGO`(XV@hm%?@d$`Sis%JVlMQeD^sos_5c{w)$qD<*gf zUxqeab0b9s!)`*$Y`(#t+G9)6WcdR|hZMIbr@OxQM{rR2!=yhtl4QIaIp! z(Xa2d7nq$Uy&6FU+RBTd(QPa0kM#DsYK%1Vm=>d0)umg>^;uavpr1fea-L(AMKrJ> z_RzlulD7DCPhrEL)1v$E#*`K&%kf4T>#* zc%a^SK-L?;(svKY0H7$nd5tnKR=-E^{N>xg>I}X!)0fjn+E>9h=hF68la6RzL7-hV zM|=f-{kx2XMAXs*PAHSef9bYQ$T|#CuL<} zaN-bq6AJhWo>>LW2BF*6RCmj=s);3VJH{g3rD3;(&;soK^gmE9bTkRY>Wjf66 zVIM<>?;f3g@3|zcv;tdaa(xpfB#C28doD3rg;At|BWuZco)zVslT6PXoS z*t~w44LntC1SeWwcs3Dqr8-NxL11#6chFo^0@87wR=>aWIJ^V9nt*=j-L7*RETv6n zq{(Zo0Z6ZQWTIBlDlq4KzV0H3tp;$vSo{t0fk=@KC-3cInxI$ABNO zmDCQCCw7InEdf*~>-VY~wW*7dx~Z3tjXd&CYcmrM3f@hl9A|+XIkH6JSsb{?3C*pJ zIT&AXu-zHC^xCsk4f%x;R0D7O2REHd82}u&9DT|@y?zEs-wp#{0)ik8dwR?Ge#IH= ze56FtvY-#+3eELhq7JWydpPTaN@OKPD2$~#{0<+A%nLLdp#0Meo$bs+&7x*nMnw!X zlX@si{kRzJ9O*f=kc$KCe6uF~9n`KP#~9T^to`|oew*c|VYkQqPy(=bXmm0<`=6Qx z4?YEUmPSaLj&uNmQEj(7LsoE74bh2DFM#`K4Y>S*T>ExEcyk@?J!tXKO{z9K>w%W5 zNft%RDX-mB9_5!p#e}$3hOX$8cmjNO>yv_y5~~%kE~&AU&Az2QR*{_oItS5zHHmic zZ3iFt615Crgc^^QYKr&6-yNR>LBuO4bvxRjbnOK9vQV>E3#7+DP;EM)8I|v=2fr~} zNUEYm`kg4-h649!Tl0zqZY^cF$gKdZ1w90sRiNz*S@n?@f;&a-MlJ`Ti-<{d#xP^K zPYAb3Vce`Kkj5n{EhHJDQ*E!)K+WqV)HpF(EWMtH>OZE}5vNgEI?l+!Du6>n#sRsN ziFLk%*td}AkHR=(>p^emB)B_3<(d0*dtX)F=|fiQn<#vP0Iz2(9skZTHRKG62T`mtHGRM}Tt zg($TP&TAbWJhrof2lyPWRd9~J&J8Fm z?B225;{~sniUgt%>-73CT=%fq)JEqO$DorPHfmLSbRSlJLA-bV4?Aejf9={F;5ql- z9|(S=)Ld77tN1z=<7eMH%sNJ?>OE4&oI8g7I71EVzZ-AZ8yTqwLLxonN7e-L_jRHq z3W~hrcW^susUt9!E%^5x;AVvElADfuoWu9-u%MqDF>yg*g#{14ynZFiqYLS}l95XV z+!h}fc!wKc1NlcJW+Fo-o7r%|Y5RMQzL{eM#ZIBR zsH_o?X^{4jPISH?_U_!^3*UG%j#$E{IvwRb)SbDby%0|%y(w=v%tj|t{ug7MGNoDH zx2+8nNTa~s66R-&zry!2lxVD|`sz%fLrq2AN>;NKib?9N`^UGAk)P|%rv$9sYN;mi zqm-49JMoVPVCTBv%wEmEazDeIps87IdSeAON}AB7xD)zR_ZNFTpJR~-9_>m}?cpLx zb&_6k)o&{(%|z`yC=ngjgECNBqdea2xMDQx+v3m`c4>jjNFbv&!WD~3N{%}!g=UNy z?RaxeS^Q01@$ovnwVArL`~giQJ8QstB4>jEUi4#{B(TO5mCAe?`i4DXl%lICH_O*6 zg86HQxmtDP4gySec8aqx&4!sG&cgcCxmxwyEVK_cd|W&u+vjNJnnB!dc-2sqr5mc9 zH=6yPZp{Iq_7NmMUsZVBvev_*SJ9#f4TTst=;nPW2X2MgS+YJZ{GVTI5PUlH%-Wvf# zU{SM-eN(}10+IJ*pw!O6PUCIR#x>Cy955jzm$b}$kxjP-r-D{#OMIhT(qUg>EdB!fh%{j1F^Pg5Zp zU^+{`lxB*>dC?lJ5&zW}S7IE5-NhV|4z}1*%o54H)G453t&ZG;03J{A3THnp7d6t0 zvz8TiJ+No{g)?DGYF^Fh8C4YSFAG#VFZzX(VEryKHG`2ywZ-0ei~V--qH9XMULXtu z|7(><7`DBRih(mI7v5g_{EOCk7?Wt#qOX1#$v4N{zZR%BUY{HB9OPWmd{*6iN{i94*mw-T0_~T;d+_Tdl!8O+7_|Oa zX%ZjfM5?6?cd^z|UM$d5|A9bZ=HO2GsLrwGDj&g=_I#hyBDZr>v+Zd!X%MQW-5i9o z$-gqrnP6k7kn^Paso=K!YoTAw#Y}^4TBmO>GcEO)eWlH7Iko)?_F1uL82DG!aANcO zbaX*7h)+KIK!N^9;4%~r)uYSXu=G!7HQGfO7tHZ(51S`!Y2pu({>+00|JpsfS6hr# z09!ce*>lFBrtc!3EB(`jz1XB{;;hkTDgY(=y6X&H`Y(%eTQC5A~wZ=SqVbgU$7P`N`Kf1mhIP^S#u&4yu)Rr zcboT|!1N;YgUNQY?KmR(U+c!e@%dgIQSK!>VlXid3?TOPwieX1)hyD>c1yE-*G`~3 zH3wQ<7r;c~eQYXwR#&96tx7+|)7#0e=+C%)67lSOXuVbY7+ter=W!Uc-GF^Xq(z*4 zVI#mQERt%n+@>=Q{{lKky_u<<`p1YZQ@ntvt72OUU}waTaLwkM?US5s73VC#+w7Eu z$%0yY*(!+JV#e9}0JzK->}Y5oWf@NHIdMC#2|GnH?Lp6T_ygSY0FSrWY30(JXk1Ld z?XUOMDUO_E`w;aG-34jOf)Bt|23S&cCDDCYas`Bh{HMmM84cy}3 zsS5v8I*VP#dFDajF=*z=Mfvs}A@mc|)_kT%i>RoB2#{aLR=#g|^9hDQ1=>Vh0HVTk z8#a6w6C+bQC&N+(1zCR<#2q8^C>O%XnBnCV3Jxe!1_5_#i?6lPg+TVl-!N;D=(9*U z`aY;M6nWX3&g~mVuS27@${dbPcgi|BvKDa952|L5y;sAAK7JP_yoM{3A*)G$!Tw0y z^9V-dmeDcf6&d4Ze^|ilF-Y@yQffaAP(}A$qrjUez6f^^eOnK4;ETvFC;-BgkRo^Y zWUSSx{_fDl6SO$?Hb~q75@3C@x|aXVO^e=eIMBZ~Ngww|usJBJ%h9ku=~(<+1kV_D zo`3^xQEUdBh=Gt1BxSd|^`w#t4VvfkFqztd1qD)OX>>x8Ti!~H&Dhq zmcB3=SnN)L<(ux15TVU_{nwx+zkSODPEb&~a&{L}i%%4;O8g&bhMR-9O2N|;4j$Gd z^y_ z?=Lk(>Mir&$qX6*v0#A-Pxc&7oBPWySErkj+GI8f%2bNmcJ;SemI&|Sj;En!3o7YS zO>&vdPmuS+MUo-y;Hs;dKiU)R+qW9y?15X2srHnu;J5ayTfy=6afF>hjOsScfRHi? zOXW3bxwkxAoIt%rfIX(xAa?jWeV)@2D{E0Dv)U2MWwT5X+QqXde8hvAffq#fPTIHG z=Mmavvqlk}g|nVik5>>qyDPR0^UQx%zh<#^YHgJ~14wr&vAKCe$A=T`g>Jf)TJT4> zlvspBY+Nw^cm;p!am{=D2LW=}ujkENoePr{%AFrKr=M@?*L*5Y9Z$8Fc?4ONiKx2j zz^=F1_>q&p>)Y&OC1b%yHJ{dPoH#qpKc@GdWfT|1N-&Czi!GEoyUJ$oM3jtswmo^0 zXShtlTVFmKpBU5j_ad2iE24_ObkdX8N{^0wSTovdyXd;T$MZ8WE=K89`2|U&fKnRe z&Pb&0w^?DvF}Y*B@Cy%WjPcfbjBmTkMf^hUEM2vK4x61a`^i@{dp&}$^nZ>UUYM=M z1bgqT#`lc#4YyH^@Gi7)i>Uf0;GH{FbB0iHk9z9~?A(<6FO_I}PsVu;o&`^6NkuuB z!lUxcLiwJVhjzwuw>6G)>8tWD8*DZ`P~};!-aOI|joEX(wl*<#Dac}b58bfLpP-Q>$9<}Ye#0OfW_XV@_B8dY=gHE^v z#PCGOA-m-KO+c6FL-028(bZqMZJmqvj`;@IZW_(&VqSjp@yfne{=9jFi;eCf#{n}* zg_ZbSz?2nI>jy2;BbirDNd^M$7o0o&F27AacHT0Dr}xR1>X9Zk$xy4P^`F!F)rq2# zw&G?F9}TUHU5D*mFK)x+VBUPccV;u}42e1Ar`YeX)Q^~`Gwyn%kx@?Ih7i@b)`rllvgqb^K)z-)41!Ic=`UvhKpA+4E zH-f04&_Zx!=j8eOU9|%X70*=*+Lp6;Cy~gfmWH7Ydb`>&)x&H;hT$?Be~wP~{&YQK zf>r3$$y(HlQEPupGY%e-juJXgI(QO8giC8G))SX-iGS~Mf^L2e6c2!;GYAR zD7Mzn=USzkN05WJA+XW4oGN)nEXQ|J+(<@*loZi06OXa=@#Q~f^6y{&cdp%39Mm1@q6k#Qh+Pl%v^!JOk#UNVMw zBZ?N8dA#f9Syk~pln)1d`F+XmvVgWrC9&v8DkzUKpj?E}3U&xD_$e^fKeU$FS-#i5 zz#7A`&Z{`nrSUOMkY{(67drpq3*G(|FZI&gg@g0`5Y{!{S1GFb_=qr9jzX%V-1P9h z0mkH7*c31(BDJ+`apuNBzl;qw@IcgXe?uI}T&S10O<$UH$`#-D$xUz4*> z;Me{W2h^j!CptFG%BHuRqDl2<#@w!XeYH5fCK7va{7S1UTi&4on|KsCx_`m!?dT0y z@Rg(rFI(7cW=E~(XW_FCu&fYQ$2HUQnz`KKkEOh(-@w9dY1iMyn9WKa-hAeLC0G86 z*EnQn;Vbk`&+*y>Oo~jb#bDU?&RF|IZ(M%^7wJ>2(}jqC<-== zg(*!#ML|T>@a#Q$yR6#lFYx*)=s_@vKgIJ&m-qvI`(WO9s1ox4^=CxO!G}~IENe+c z73KAP{+sHea^Kr+|DYWYUw&v_yCOHs^`a|8JlEo5okZzZ8~#4h+~cck>kX5GDwjW& zv{&ROYo=ZjTn`eT*FizGiy$_Se2zkQ%;*X^6 z3hhYo;}FkgH7lAL#7ZM9zH7Q&GIBGrQHku#gd@LHbND=`f6|a%c($np{hjkhQ+L*6 z_|pR$Y3i(|@YcblppZt=L`3DPah>joofu#|ygo6o`j5!_3GX)vH8d?Y(pMpF!yj;}SV|iQ7yVargprXVZ6a2aB$*M>s zc8#i@_IxlD8rGPB*O{ z;{fm568py^ihTY(uGAhTxB0ldueX%2sDmu^9D(^M7_Z)5?V{Do5I1iHY~F9$0b3t% zQ8lzs(|J*9SNZ~0Z@@?yl`DU7lFS76?YkN;?BE2n3z;ACP{7+UVxMuC#cM%20l^M3stc{enn>5eS+f2zU`2N62MRv zz7<4b(r9gh)wfFlFC2GT=X1WyC6l?nh7jEjn^cGOi5xkSRFbmqub}>-<&-zgto;J1 zA!`#pS_{d|eQmPhI2a;{^&d|>_M7wDr?-!0yqP1Z0D|x?)0dY{9Tyjgk8SMQ#>@s+ zykX%ve*!mm=Gv?R=8T@w`>ozPwHY|InQIsz2(%d4KiPY)jUCP%+6Fxzhg2_HvepL& zH&u#=I*b!ue5<5*8Akk+=RE<;jA>Vw|J|Y2%cH?jeHhVwmUkZl9%Sa0UO#)iwDj}r z1LmGz#gh$F4ex4yHvF7wDAtPkRPy=y=MsL<#NijRiP7+-`@D!}!;|NBh*tFiW-~ZE z2nqn#Sm0=tRzTOI-FZ*=2-0!)8N|CRzWRw2GUNxoAe|qahN_73pv-b8YAjj82VxC} zNc#o*-xgl(4!gyQU=_Jz%n&KBK>z9>IzjUPI?H;shcp_RwK@#U20G}^j&D;rMtFM) z4eMeN&k>o=xRT;=%9#Vh*kBSJJ51Ztw7h( zcQ(b!t^7}}VeP}IL7no>^u|TtChYH5nK633#Z#ZHc=UwZh~d+&B65<^{TKIl6j7bq z6|?eJZlm4`&pOn^T?VVH9M=ohNcIrOVY?KS6}8`36=%dxq?jxzw>HXv>J4IxwsbL{B!0v|y;M{niL(P|4597*R235c1LxGOk@fzRn zE}O1-j=&pgI(MWc_YyQp2{*q+_9|kwJtWbZ!exf5WdW%y(5a+gTCoA;tw5ovN5dXV z;gLrJtQ%}+V?eYKq~tbzyZiU^kNZ>lLO4(7%+=5)h5qIF-VeY~ZNck5??DGo+kDV< zY-nLl;+5(NOXnc_%U4}_v~<2S{-$H7BH!+{J!a)!RL7<;wh`jgS4?UzJDA2U*mPSJ3g^j$yuJ2HRn2Ud6`iQJa^L@w z?bVcMqX$eaws+ob{MA&r3_fL%FudY1akiT8u~CJk{D|Wxzqh&i3N0^VqNlH%Te`jQ zR#RWJ#Ukh|cl?9>w1+II@p~(Z6C#zos&A$B0kuy#&%zVFtuQN|>A2ee*5ZNq+|}#v z?zb{ceQMXOP+|(YRo~;dp{rnglPPitR9kX*Rj^8nqyOe`cUXxiUWU){MzAJj$TGB5jeU1Yia;!2PHV^6k;B z@@t&ru&sFgZs(Io&n=fzEmlHjd|tkfo*wdE331VCd4BUO@m59;(~#YYq>Dz_gB)h@ z=i;Y!GUIwOhMXOXeqPWj(_*rJQotmCQ>I(y@hPuo_NQaXEZ-}9qs$x61(jo?dbU{| zv#mMEQ~8cY!4iU1G?Ap|0M@l>=dTV`tQk|j-IoZmb9SAlj-ElzC{H=`coDc245w|J z8(xZJS4`qQl}+MaerHHALn_<+gUW@^jXjB6k!|Etv+(Bl{9UX&yj&u$CWKj_+k41bvsnD->z=-)-Rk)=B4D-xkAL|CkM}m;+FC51L|9a%82rI( ztNE2#pW1tw*v+(^zamKx-;dX*Z#1%fhJI%;Ww^p4Y?od=!DrQ2=BRmB!?)JJjT5nH ztCLJ#dRAnw?-_(tORm0VU&OQTIaP5r*){c2a&<+!LD7U!QN{51=JwAGtAKSY7LTB0 zy*t7gPQrGC8}4Y2J0HV^M<2!tkDBTW+X3qgq|{#)rRRN{FmAMNYBIOste*WG{c<63 z#TDb?S8*h4SyfdsF|IQH=An36<9T=NxY|QX_Un9nUS>#91Ki!F+h{USzk(&VLF|q> z*+*C=67Xi4d%|+duty>PF&V#h=Wzs6@<$|F{}yWE#unf$n5vXrtQvK*ZIY#^IJd{X zjcH^&y2ndfbY!BaJ1RoNFJ7GWJVNtb5&nUKg&7MDzvuW3DIz=Rdn%CtUU?CDSxryk z+}Nby+dzV%V?qJz7()6Tj-c7CPhMWRIFH+yyglo##YEmc6IIUU|c#N-3agWT`=YP^lSzJ(zt*CWUujq&)B>>I9a zxi?%Ra{eLMatn%iRJ4txysQnRyl$28sJt9!%e61zQK|aI5XQcDA&*KYs{bl~j?USv zY>)1ZQtR5K1}4sI9Ttn6kf;h1V0U9_zy)wK+HCou-My zJD`a}6sxgxw_a()e)f;kmCE^N%)XdLCzmR(s3WZQ-)(8`f85dv`yIsNr9@>rhco-? z)5U2$3VUmc^L4Bx-4b-AF?qR{R>Z3yUjEA2y7hN-3IfX^=e;&BJUH(()4k`q9VlPV z9`b(vjBBp9W6J#L^LN_2CI4Oa%bw>=o>M^Nm#ZKUb<4)Y?~fva67ycl29@RUw>|G+ zh!aC}IF^5WX5fJA;iJqAv!TP}pX=%z%Tx}256s7Fm(XpmzFC=CZdAH_!q~V_%;&p4 znfEKmR3+&!M6Rkq$-u_lC8>ULNYJ5VcizrL{CZaz9YTqWe#y&z!g(#dY?Eyh{hc)lpTIfbR7 za;tA#c8n?FIp&8T#7rz-K|K`Qna{J z++702HCO}1f(LgCA>^gM|GoF!x87RWYv$}TGnx7J{`Q=coHNt9hJMmCg>h>D4Fgn_ ztUo_2S|>R~JInAS(X;uCo7>d$M94rl3|dv$iw9olQw9s$ZCBIwu^n2gFSdks9Gm3- zx#8byI>rol1oZJO+vJ08SQlq?0P@SKp{^~?eLl;+)6Sh3Y=48EYJLHRuR0pw4?(Ok z-+bZWTc$wUUF=$yGE{bn=EkD4b|6YX5BPh*eOLNt%n=Jb!0_qcAL`&>8as8k76L{J3MLuh0hOlxErOlf2e!R2XP2-&$w z>5qh$|Lr^$(uLpI`CW5W`u%ECjz%^E{J@^L3eqRXPJBb zc_*ou`EAJX5s7I|H>S@l1A)-eawzmDrx)*rXPwm_*Jp4I{Y!%h5v~HoFHtwCN(#2gHsPRSU);SdT+LlNNYdmE` z59u9yITYyH{?3rB94KN`(vPltDR{e-6$!U3xT5>?&Jc-hQ(-f>;$tShl@IYu;9vis zz_7TNft~BV^3>R6g}~Tt;z_NDb+}3bKzf4<-4hxxeGu@><6RzRc+Pk)pUvAncbyRK zoZ7INDM8b0cX6uI6^#3w)9?>dM15pXuewfm%EfUQPR7Oq*@PFvQ}=9>Q1l#=aGC6~ zKC>zJ^_NgNz6IEu4Cn&^mxnnsxtuDg-ceJyW{&haz73VgI5p0cXA72ccKy1TjhG1J zFSXI$5f+bIX}EHBckj;B$GR0?7AhCQC%SK=LMn6m`bEW{j-BVG0=u^YJGE))jB+xhO{7`q(9CwtRsh`m1)P_K_okJ+IokP>J zwb#j^{-(*7=<03u(yPs+O&vF(stdqA(*>w$#v#?7`=4;`&ybLrnnu&?Lo}+>dz`Dz zAk1W=;E-25-Sk5cD|G+%71Kyg)SzL#bh?}_`IX!v1Am^^y+0(S>kj!W5n%k$(lc8(71H;%AfhN=*1c)$nNIds8 zl&)OHe7E}Cv~C$MvfVID!W(~ac9kK{i#^2k`ZF3uJBrY&C_=BQg}+%* z?$tkm_O+j+_dfGx6#;eAWS<%XcszgvJZ?Zd9#?17pdEVMZWT;>y8%W!5>INp7_k;Q zfT%&Mg=n87uUp?zyHvvc>y{9xK?h>4?DycFcvjN$Jv!m}j2vSmwu!Ivdt>N9ou1}; zD1^tKc&%f4v!DIw#Pb=~%a8attV(*J|5B0oxJ~Cn4|DswXfG27tI=!e zCU^yIq4@GHlV9Q@O-h8pAL+O2H~G@*Q%rtkia4bmtKsENwWbwWBp;g_!tH8vNk787 zL;IQ_w9h{JKbrMj4O;u~U32JyCzCy6i$8N6mp9~4H{|Fy2l$ec5il>`XO@| z1Mm#=UN~^$l(u&5G<Eb%trOt47w;b(wbmBpyPee>b^r6QK=@XSsC$9ZZ!f1~M8^4ckipMA@1Vf@7*+2y zcc8R_Q>i)u6SJR_nHVRd?c>=g;ZVnuF^2dM7Utud&@a4CAN@P z2PJ`@a!WLFcZ_}o4C7>lQqhvL0c9gbc{R)~l(nenxzirYXC-CsZ9W7``RRNB+3)Mq z%Ja8K#F9_r;-~4^Tos*pyb$$j9j$;CC5$VOrRvO{4GMAYBiR{%!4-}Vn$T= zGgY^{;Fu67Vzjk|4+drf`OD?DeqcBzR~4VYW)Joffw})Km(=Xv-^1U}Bj?H6bg?g! zP1C1Ut^WMIi+Nn&128(@zz-v}RbJiK1|tQ)Ja7x7^>j~TJbvKK2|8~wNL4YO@iBMSqDJM*65bT9Tjg}{rj9yEg3mqos>-mgVq z`%+p4$Dlq|!KHTx)yZ}Lw*qZxFMOO>S;@+`v9sCENMu6)r=m7Q6s zxT&Fmg%@OMWqP7U}5;S`IjaIYxhnSKWcN0RQYto6||C#=S9!(O^mz`B$( zfyh87J>4!MgBjA9g_1;O2r33Z;IHI*Zr{WNoNAzi-zD-ELu4E-D6-&>%XKakcG+dq z2U|Psi&%?YXFg?h`F8udZ3WJ$chZfE)y2HVtm7-_(!79QbG_7iZOpE>Lx3jiFVkDS z=2EwGh~DaN7$VwT-PgTFbrvE_D7Jn4gyGx^Ezwsr+;i>4S+Ownm#flHXqR{|-kR|` zt25(S%q>>k=rSc)51slg!ISEqEa@`mmsCfzSdlRKFbRmGsWL>5Zz&xx1jFt1fgI;U zgsDGXkcYqO>Fhh{@$WV6@$bWjaPch*118SJu?eqI!(;+3d(C==do_C4dyOE;rn$}} zdV7ZW6tG<@kgWR?*AaZZ65-IQR#dFRd5~-S(1)=qDKf=QFt%zDx@#T z%v7(K@=8uVl$*scbS7!W)X0*Hit#VQm4X*WGBd(d$&#|p-%_|v*ODWH<=b0H2|o{o^b8Vl!kzJ=@&G1-spT2BwS=@wucqwQqMa^!`WS<# zLUvD&7?zpAb^fN1x7?8jY=hHWDbHk@JBHP(+xZ2A(*{Or)%dUGDq*w6R5I@CKd9a< zTu{B!ZRcYA&RrE#;QPfBKM?+zRt92SS=_C^1a9%*u`%ReTuB>?YA(6xY4NB@bF^bf za8kAz{XUVj18B*K3?j7iXB4SArgPCU%+z&Xp6$w9Nb|Cda8zFBwO4lk;%b=bZ=*Q% zgB3dVgY{ystL2J5$kT9%dw%payVXy5-?X%Pw_tM4TiyD3(A}bfZHoEM%fU~u6g>`z zcv_Fy%?~emuD}gYk`>k%#g#}ywX0fw&6^WDJ`pDzDvDdNy;%QmQ{=ih^260wTbtk+ z{moxapXhSLSyk6!McN66X6PrPi&BL}6TH0Nx(fKAZ`pbazeu=w(Z7kxaG_*wr;S%++a=^24h~3;f;rdo2zHuS4M4C1{lgme} zP>HM%fsv+(EIqA>FQQ++M`d&dXI59}6i^&$;e=*gjjd1(zn62@LM`&UFLPdMBP#hdxRJ8;NboMkm=fuMm33EgVfLJb!GgcjPG zM3ots0_UHn-zd{x)GIOU*U_^kdM-wk?N$=D_G>O|kou^4-I0Aca={Q=*x)?-@#Q$? zi^{-w?eMv!XbC;nah(s0^wI~`=(eAj{3vEesnn^M_A1S)bVxHLZKUXOdnRJm_{A}6 zgJt^_MzKxmRaKhj!q9mA4~494jTwy|ch6!`+vAscr3nqXv!}_qY4qhf9tt$wV!lo4 z4BS5yVs~cBFZO;UT(FD&cfIhPyY>g`!dTJa&J148cIOB7_Oc%>ir;5)rJAd7w8noj z0hifF^4wXc)$9w+mSwZK_R}9<*p-bKtXfqYH|WTt4f=YaL=|li){Aif{f+@6?Zt?h z(7+-4*^Wa7^+ibpO5|`}Pmyj*aD*~@$)m{~Rbj*|qE6Sd;xw7$q)Wm7z)+db8B+XR zFGJ0JKA;VrU0}p)TwwUc;=GtPoKXD>?QQ@8Ec1v)*K(5|@n(bNmQ-*AB(WtYaXL&M zk3eefs&#n@k+AY@YdhyuujV|1<&!d!#r-m&+j~0@YGdeP{F&+-*3V54fOd zQ*KS7umgql(5RZ?e<9n>u2%fl)cD_F@#@8I z*(GjXB~<3ezl>V3DKV$Hax`C<}l6%$iTo4q-288c1*J}AiDuVd-ssBV6OdY=$2OYj=(SI>c zHvU@E>Sy=oJz-Kp57&Z8>JJ_sI?w2HvSbyYtTQvP4;})omDzxfSx<7WlH4*6yilOO zFzZX7x=H#yy(<9GIDhKw$r!tKaYHej|#5rd9rQN1`D z!gDtG(>-ko^1U$Zt5;F;zLKy(YG%i1#>dk7W;UB56&tr;J`tET9~Vq#I$aF+%TKYE zWEC>jxi^N{A0a=QBMnam^ANd3$~lPEQ&U;cJPy7oLP7YH2@t6L~&z_xbQB zbu(0RCq3?zC-$1;-eWw3&ePp3lu8hQ?&n!eQ@I-7Ui&T@YMP)`T8S?2{Pix?3G>&~ z4F_0O%QQTo{_LttEa@QtkM`tz45a*$q5vv!iU^c$_yB%px4kfDZ)#X_{ISTO&yF$F zZ1$$)_^Dwj{ga{+c2&R4l3`x)53|Y4Kc6p;rafj092`sSQ!|VA7u#sjT=NMZ^JS#V z>*~G~mz&kZC(3=T?@(j;tx8l4oWm=QS7MX2{X>8Twqqx7v14Zv@>Jhin-jN$pj?ud1^75^^Uu5xkeJUNRc>C;BGFOWD zD<$X9i^2UFTSxnM*TM1~4?(H95lKJO*9aA$W!`9%rE`HsDXQLLsT@AnSD!)nI-rfQ(FQ50N_fi&C-tDIyB`rjdvXO1ve0isZK5>9eQqVRi#$d z;~3>N$2GqWJ(=^2D1P0OkN!)1pO>r3Di|G3TZ}CKjdkM?)UURbt)?zSIn*GjvkOe~ zr49}{iMkSHrx1XPx&!q%Md!|&z7c%7WJ_bEIZk4GsW#GeM2V^nv^PhGH+E13&0_4_ z$$p|b5{<5oJ78Ma;4%jkzYn20ox{nF`ZLwtov@x+GGwU+)5kUpV|b`5gvg z8+4OU-j&m!fZ|#9Xlgu#j#~!lX;A;OV_%`t)WX=qL7~Ca!YyCTo11qR$j)f37S2l* zIm~R{WY|sexQNNCOBpuZe_nE$XEYAO`e`EA9(rk@HWvK)rn2)n>*<{v*dDE201##&v&<9R}pl_!%L0SV39`0 zek_bEmr!?$w|TEFfxElPj{GfJ_QUn$pE?t(yKodqAy z{6h&Rv6>t~1HVRTt7v_V&HoYd&%LW?l~q-9l>s56&HpIegY`I_3oorH7yfYr9Y5Y` z(wzGrdo8Q298LdVxdno`z-ZvvP>;OEp)}W?_qz)5)!PB_6KeE^<1oLU!5&}Gp{dd- zCPF&215mTcl*ff(9mQ3VmMiO7bPLYnpf@e@2RrrGpH#L|`ieES%!^Co$5Z^q+XBjA zTS_HU47$&+&s_ySaSr`aUKLWMe((3iC~lr{$Vy2t9+XZa-lJuIbB9|_I<%n3O>M&K zIp|~cazE{y|C4tjD8QrQag^7uH_2Y6ZZOsH#D zty#4N`PN$y$AwRDe`X)e2=uA5Sam{cQD;-(QxuTuX|Z}6i8uLG6?gTw#C(FE;@&HMjv<5`D| z)^)q}X?5Us^E1>C0*Sork$0;T(&8Q9K=L=vz z-4)$0FH2O%P^)vR1x3scUpN%^d`IE-x#xAdheA-?Jm}(0N$x073e73Y9~26kW->+k zZ}cwpl=aZ7{weq`eRC`)ZMdzf{j-NpaTp}Qak~#_Q;q++5))yRAQ&!~*!)$n*8uS% zFTHvD)yV?$38e$31A&8hQSSdK+=mLH{RYDZAPx$5c-2f5 z|9?1!4qo*L2YCoWQGh%{fqhPALW#me0)@&eRCo>3=GwZ^``0lhlWSPzE;WGw7#zi8Ata)mZFGP{??_&OZy+f$PDIF}O}q zf|-Jmg2{q;%_+@c&5_ML?K$b~5)Q_!x3&5vJ3&H+S!9fc@(Mt?`_ma})USE}$3|b) zgBr1fE<|)tEc$2U`frEz)?LFp`u|}!IShgN8Mggj#drLw{vgd)M|bqlJO6@ElgN!r zAQ&G!+Z`aO=b(3}zmL@AJq7%mNVNlgA2(RnSvTy~@1k5LtpQ7q6XhqULYd1D&~YON zpv~kzU|CVnJ_X}~X~2FuJ4~&^{{b@gZ@>nSY@~4F@beS)|K(MWe0jHTdL+P9{|u;6 zGiZN~3tEc7$(+pq$e*)h--`&|cCH{j^+iv^9Mg+;7E;_!Wr>t)=CGpv z;k9*nDBmglcG$Sv2yW!iZKrc!`yVHBxH?_==O7`?3EB^RJNg#?ImkZ?yw`{es+VsZ zs{4;O0_mDCk;+1MaqvfQ0II{dVEi|&d z+pafVO{=H2-KsXRP8k1V_GA1C5g1ozCh@Qy%dIUC{Nw2nDkS_|w))=zN1mwYkd{wA zZu_FBP3&I?aTv9gn93B6tQF0x4gb$MOJP1w8Eq!HEQ1?W1)3hc5~4nc_53e}ZSus_ zVp<%WZa!$Ctc(v9`+pc-_UHv9{DG1QUr|0~M; zcj%7-<9~wEzkt?;>NyI^$!(Myqfod4!oOeZy~%9;TATb|0Qf(gu1LA?X+ZgIV_Jhw z9g1e+V+j8^c>n*!&`VUq|1UAbrmp{Yz?s}JMq&0}JOyVc^#q|zWo8hKWGJp}qJ6kl zEc-rX+w3@HzyEkS9Xo>jdWAQu{X!1d=ls55?{5&L05%QoHM87-@cpvX@^eqAgI~9| z>{6Xfo^ncZ2ch${H+?f_DNf+S&m8_W37L-o)D@$ArN*@|z!w>%Gw z)(Y2(y%)`AEHd%WhpR)~vpb(c35Bn3{gVusnxzlE{Jwr(!hFs5r)A$x>Gn3%ni)b_ zE;-9oT%g#WB%j%UuqfCnz?}Y|n5-gve;T5;vrk<- z_zOtZF(J?kM7w7`=!$f&eM4~LEEPmL>#w*xoldk-8*w5PL^&%_9IhCZl)xPLt>vJA zV0v!4Q4vz0Ciy;C`kr8)V+n~~@sk8yQRoHb55Oz3S9GHeQ#T6l4Ko0D%Tg8-(NEnw zfU)f@D!R7LclY@p*^amt0}BxO2o0wvN78iwnW*!Q!nTadq4SA)^Y8EzQWCu7bV zHt!w#5u(S>ALWbJ5<#n-#CNRMktk{_GSjA@ zG6hSxKlAms>B2WG_RClCi;z;20mb0py-Sk)M{-477Qz;si%nxcI2`VG9^l)Em`gf| zaAxxmnx$JLdY;NGp74NH%x)%05Qt^Re`KWyVyTwxL9?Tu#VS@Y=Dz>j)H&D*oD@1$ zL`F@MzSJdhJS&B(^+^!G@sAqofZ>4*H*$-TzaMd0hJ}|HPdaB9x5jUVnNf~({oE;E z^ZUuwv4gv?2hHrq;=hWZyQaOt9@+=xg7JW6$J{7H81DcO?MBsv2^i?kU*;&$S+ zh&NOsJ4TEjgOc_iLz4m@!t=wEoZ?p?)*df*Ulc!#1Uj-YtAshfPMD08_}V0JA&*p6 zujGsEB-Oe{$K8}O+f%OM)JI3%&Q$7|m<7gr3LXl98><$hl^y$)f`z^YrT-#@lInNX zvDF(7FC{k%J1`D%c%~F8B0{efz{*vUjmFm9zwhxJlFhGp6$J${1W8VbRQFUk5P8xO zR8Ov@0q+gp1Eh-zgk_TR!waaVpR0G&6sU(HokA(3olC?r8Q8Kwd^6gXN^49%S$}f> zU62h9IF~0y><$z>4&a+KA+o9yGt``iF_KkYa9%7%MD(+ip~T^vw^5Qf{gkJ1l4W_6L-eSJBu5 zTTq|ACPAaDlBk?>-g_SXz{Wl&^H+((T$6KCnqQ&Bd){fAeYL%vd)j-zy;opskP)y# zR3%8$d2XvTWWTL^bbf4Q_#qmmf2nlIb_w4N{&|}Lj{M~$}Lyl#R!)LQq^HoQ2TX7piKaJ(( za&CjTv;Ume)J;+KXz5b*4HN1G`^li3?%KeZ?iFJT7}ZUVB54pr_DK1hlBz zG9E@GJX0vy@>EFO3LJJC#vCS(g8ba-`uleF?V6qIVCS>Xylpz|;Pwh5q#M0k;6{aa zj{9df)EqB5wz{<1x4ODIyb2N@5nmCXLWIFtZ>?_`ZuM_Zo&43`tJmgdh2`QK&|ev= zt4y;?4~I=*{tRacU&bf{*Z`ndYS=uu#xz}T?;6)5*YWy-G5p2qa|J*Ixn{Y`Vx;1? zKGuE=7h)&+8@_)ucVNFYp|GK%NWJ$RU-1d4NnQ(D8jt+=t}7$-m5%5w^@Za|#P{gw zngSV_;mEWI9-`0G_fC7E)1(Du?}2!Tw@t6K@Z6((`L8AXbQf-Bu0qeR zlFZzNCIe^D=Oo_pVr1v<2RKP+nOkI!q8AxmMK+hCV@c9kYUFY`|* zJ1I{gh}>7=Q*47mdr@JLpRASKDw*I5d)fK6U%!9-)QBxIjx}JsR-I?ph$`%fzLz-o zG+(Px7=hYh2+t%I%)M#gQ2_k#T%cY)V<77{^BRRv{fEUtoeg3}^P4-PwgC;)ddsm) zu9%G@wZB<{D4+i>_!{HJ`msvq_aHzCBlidI327nsB*Pnm&zE$$?zYET6MRUSHPOjw zwGH4-=7Z!ujQsryR*oB`HQNs8VO#0>&`f}U+%!=xavW)0$BaNsnWha{o*#HTH&}XH zBf5uwcvk}g}NJ^k}C1SH?$c|vKV7?X8Tp1`{-90&ZlHQ zH=X!DO%N9ic5f2$Q?9-CVI=YXCMR-HmBE%4?LTn2Dbb}pF<>vGtQGxNulr;;Mv$`d zkIW{)#DardxgI;i5Iq;Ewt21(fcpzY;->1?`fU)P@gD zx@#ooW1WRX4b+?)6!$6`8@erK*KnyTbqTVcO7VMT56UZ5^D)oIyjD8tH+6Pc_}|0y z;&i-XmQy~PS2Y;M>E4V0ML*>qkw%QMn-?~itklpEC#Qs)$6Pq`Ys1KR$D#%hV`lui zu#YJ(6=ciZv{GJ~L@T874w8=XpT}LK>J`#aj;D~CM||Qn*6ES|DiqzCl3b|tmR0B# zBzkhpu3p8Cta*&O-Vmm9q#g7uk3%vRlrp~Qz7r!-_`uww9z<@!0sOY5lq^zUL~g&9OO1=hx+P?CitGn`R zG>o+tIC#qsQ?w7Tb_hI+8g!~Zt!WB#8qVLQ5Y2NdHFs#k((gkXK8u$GR0UNYed2wY zS3#NDe{ebmt3p#C5(`F~Lp3MXhbn z$zcn#lvzM5PqUm--E$t?hJuX*t`Z$1k=M3zmKyD1MXLZ^n&X7N?3u)+L(A;jeGfVO zuU=ioBrLVBbQ|TP1NOpd<8M?y>J;CX(!heM4%MiZj82==@jc0@j}@v&H@!O67zu!i z{P&IC*#(?zRQJ;WdC?qeDw^}S0<|)ZLMp$&xET<$Q(jH-!L_NQDFSE9kC73Wmk0q3 zp8|K=pxi|dV@z^l*xliWwWECZ?#f>aeD{!Ido7^2EgAGk!b-j&IP29V&R*n;q6gEP z+JJ?Z-q&r!vH9E!R4@pfW@im3O|r8v@4y2IfMlM|wTdPD3|Ku(qk_#?ke|Q4`t2;g z_UUZlp1hU{=CG_Es3HoIr-jBx3tz1|4Iv0%BUHEamH6Ufqi5cd_S>8`9Om2}myGgo zb{pF3MiYT0$M~S`z{&Gn*I0-MPw=lc zxhtz#+diCVh3ud+~}y9?4cG#K_wj*Yn5=h57rF zvE%e3yK;BoXSa{S!wS=wTkSnoi3MfnD_(Nl=ZN?%iiFPH0CzD&&$9X#y~o41C2kBW zr^dfb$ZMi$^AGa|;Vezxpo6|;@fWpgR@?g$bC+eiG#ps8Tk`=uyHE=~b{RD;!2@78 z+~e|061utzMYih8(*eborz5Hqa$=4kNv~F%YrOF!k;w9(0bsnJ|Lb_a;e!51+Mo`T zyp!G)PnF=z;d0p9N;~3U-^Z!oUe~X_$xC^l+j>}!z#-UmsEgglc>KuDc7`#yJ5kMj zMW{Aw@^SaN+4r-fu}#*(A52?kvHRmgD_aY-Er}*CDkybRB-rD*M5fcWw=ng!As63O zfr_4mi&)I?DZ;YIh!LDOOuLi}&HLiC@NQt*BAlSaH}K$0@)pPYJ`RdVlaqgB2A5Hb z^n8cL-g4qM^K2g43gpgtv})7_mGb9`Thqd-setf(U&+LF`@1}Zlf)@&4`>ov1~Fw; zX`pqz6ua*>6$z~8JAw1;G4Fj3roJ_km8iX~8rFx5A`h~+^?7=Jljp$O zONy>H-Fy#76W}9*a4cusISe=is@O-m8$D_ws~h9)?td;!s)4AXh7yBkMBCT(s6|z7 ziuAkfVpeRt+8{5>E*~3UckY#Om)RBwe*{~?@I)8VuzNQM*_{J~BgHha7_$0KGL004c?>s9f)^% zZeYtkf!ZL(stP%ucXb&l;r$3YEWH`JMEGpVAJwV{FL{ZzPX9g*u5nnHvY9*%EP1&Z zj@$`AZZkrKro8WqB)4)eEPUzl5krgKpM!o+zv?3DMCKPp9l?|pWXstJrA0} zY!5>qkYtL(m)eKKV~QZhJs#scq$V9Au5CyjtHin$@A`elN!qULh`RzyupYcc>*rUCEp+64~! zThU+T=*V~PdKo*IT^&kJf`TQHehE>#x2FXUk9Ab1fsp*{ANkSF1;VO=Lk^Q(7K}HR zg<;;ClFK;NLQ8hrx7VQ4dk0v2K<=*J;T@v8{Xr+Ie(m0e5qA5ac;p={(_MR8q{i~~ zWrFrs%%#7T*pwc;z`VJhv*1j%OvIru%>txlY+64Xa@$_etfwZU@Ng;iC)+tF@$I|A z+EZ^zpFq2y)5@&?*KCqg?;zW_eoiCfo%394ZQ1Q;NvN{uQ28YGmiXr>Ln!{|8@gKF z!?^o%XByO$!ym*mrq8$=7=s{`;Z&e`By#>F+ew1_ydWNNn?*7tk$)(8H;3$lz!@L( zk?W^OqQ^euI^!eJBR_H-gak+isx42QN={yG{M{dVc$^?)arT>~I{l0XL&V=k1j@fO zf420OpqrG2Fo!T_ZHY?PFV}_z2!Nx{_E5&d1;cKE5)+a{y^L<1%wzfcHW5AnU(by% z1+I7!`Vm0d3g<@$1a-gzA0yBUQb%^J8T@7~D!329ehm4OLAhocm~m|}F}$;IRb+P< z?0jl<$M_y;91h;RUx??+O^jEM*g}r*$V8p{_i3aT;Ju?p=>4_50=7RY`!EI&+4ny} z`$>X>g!jFo&U0JVC5i$r;qOIrhchAYsX5@wbzc|20VE;tm|-trU%uN+63>+wwh)V2 z-6_w~b_T;jOvp6|^JE#iU<9eoK&@U#D37GgSKveDh0Zz~ABm|s*X_K^ zI_gW+bcZDzlP@W18wjmQItvE-AhoG1$0HfWfsW*u3(n&q5%LTFyGd0R$*9Y4g;#}? zV~(`dBR8Gzo!i)uw_C$Wr`{@S1Ca1b0L?wssigJ#UB1JZc$8o3BQNaEPM$7t)h154 zQVqWZnt0Vos^_hKG9WJBGl+E*p+Ix^YR4|{JLs>UjGZxiiEpmQ%LNCXV9Rd>gDXLY ztMZSx1~OUjxs^mmBP1SJfBGA8I7kg<2rPSUB01bflx$3D&UTTQ$9H0qZXl!Vi(o`H z%osm28NT<}>gn!1E+M1Y5q0bNLtSJ9eJkHH$IK#`1VQe8rFsAV+(WXvHbq1qsfN|G*Tyj z^&35y!y>iGwCa&fsA zV*QgEXK_!oXOx?y;N8-dZF4Kn9y_J9@yV;#ftXD(po!`YB%RivqEWo|io>@^sDwIs zksQ8QqTbT)%a^}mmSwp^(_bW*|}{{uSd|SdleN`81eA^;~-; zo?l%Kr^b-Hq)ka%jO#wcikUQrm^{N=SGuBcp3CPj zmWGg@bNq^FZbOr+Lf1ZLtC1mb4y{;>uGEktuaPG|jj>xNJ)AH3aA&+8L!$ zJ%`7RU5x(@^>h^%R`uAY`R35*U@Ph`fM2*}7h+#1f5k|Q;qu88K(-HJ<@88|Ij#(i zggMFAO(TNB9ira@TLrZWAWI!`zVuz%`sjqZ;82#7)|YE31nV!YSmZJraOf(#V!=b9 z(ZoCAi@y0B7pdH)Ne%Ij;Kuhrm}k_*^P^Y!95Jahi{4=sZOY{lfx^FHsK*EwZ^J5l zq+nDx;Y@{ce=*@^#Qgb3q1{ik2H%WHbil`gTw)j0jkI>QChsi0R`6G-Ke4wu0_O%Zb+MR8Bh2OfOIA>R1w;W!fIK32_(@bbeSx$(-B#Y4J29qqFJtVwSXaSD82(JW!q7uxZ%T8B@Dn#Xq}eFSO!L-S9~#jh0;e z&5NVp(28GwawEIx2R{B1M~AZzzbR;;x=~dp?`$fm^A4|AEaDFDrqmh?I`%z_Zb8c} z%ID~rHvWo01t*Ior8CZIw5mCdKEGq~GlyfrI%$7;vGVGtw9TID)W_V@RnGY~(hx;Z zSPxFq;b|BlLVUX1`6zLTJYDBltw5kaU3z*yg$OiN6_e%nAMgi=$`vD{UpBqi5CBWkaK1cIPtV%98C9 z)SY5!^Xp2=%@pR9+RlK~oAzv88C;#dG`PB4XStV42_}=(+Pi{R$4XBG-K*85hv~sR z?h#?#Ss)P|4)g5C@IG*9fhp}=wP~E4NX8c$9P14E z@IV!dURo6kjY`I7{c!;XI{PtzGe3DqYbIM*|HtIsjndI|>^ZU&MjZ3cLaR9b0@0uI z_MH|jq>fHL&Y31+)^om50i5!!;;HgaV#KO6_KB*v_jZ0H3h~ZjKr72q(s00v?*3Vh zf5XCL%`wMP$B52v@{=JPArkF7dL_~}(DcN}-tXBX6ou;-KN>HTb7_~_m;%u%Hnr!> z7i&W+^c)Rv;hyT`&KYT;4j)0`4l10z1f`UH@ujI`&ZW31D_G_&{Mx8@ace_5RciZy z0Ifmexx>0!l(P>sMVb#aB@_-`QOL#Gq02?vvB+UZ`wlhX-00?WBxJ2c1fmUOTlf)q ziT~4L-n=6Ae=;X@W;hqMuCGb(0F|n`C^a|>vjd1xN)Kf1Tbv2c@u>5k7Wlk5ML*s} zkm>G*qeSgh%|w*OIDt92P%xq2q{6G136rp--C7p`TrD}yOPs}OY1FH|hkahVSasbn zvcNZ{0TH-=cl_=XVmUo zcUA55ZHp^U71Bd0^sG;?drVcI=w^uan-Eqoo1UQQWORn{W+iXbVvywRYAx1=RQOD0 z6Z#8A(-*Y^P_v3`X*>H-b3O<7r+|Cn9MDcGJT(S4f|GiH_lF<@~dSk{C>n35VK<- zVBkv(g)&9^&Wcgolrfnvi!q3qO#u!kFipFCneUo?pN$EG=!s7z_u=inIy1uHm&rWE z;LSS4Lh`AhM_9f4rFVjaRRG4?QQ<##gl_2Y1xLI=hKd_FvGd5&H&*V&$$yr zHqwUIzda#AC1!9b**2@EM=yyv8+Ja_mF(EnrS4GQ8HVc>amV)gjDM;tvZBr~^<}s+ z)CtMq<_-InmTKBig7&dltI&xidbMbW+@)(r(C0#`t3b~S zONSMD!qgLz zVKh+f($ z|D~=rELy%2eZHE<=OYvI91X@YmU&OJpQ)(SL@QXGZ-j=>ugdsNMoKnc@Yxqf$EQOE zhM}%tAyZKY{KY;RJg@o|^yDh~-WqU%sjvf@fg+Z6lKC-ysX=GRKDfrz+u`+MebFY=2|3`))sR-#*?r)27q1@`@eMvKBGT; z;4Iz4$F%^y8ZV%3NQ432}74<2~zjB8q-Ni^OGAZb#mP*QZpnf#(5vUSPTyFIdDui zQ}~x?n!=^xs*hFcx{sY`%$5cC)`aMfY&$8BEVFRf7OlgBmg#8Rm(hPM6AZj@@{b-` zkw>;hYN?akwY*;3XOdsL!9HSO8d|xbif=!5_3;Z|99^d9JwZ2zTKGS^`OK6XxIDM+ zvHWKJ)3W(p9(sMkV%qG;a#|>-BPcwzg?!zig|hEYOX~Vz3+|bUA?sb*F}X|kv7k%x zv1f-#i{N@^i|4w|vf;YWGS(UTvV0x51!u*{pK`^_pJ>H#8SSLru?X$}|9+BRjrB00 zqwGE1f-Yta&p63+r1V*70eq=DMps+92`~Es*bn+EfeBh942LX90D|l2OGItq&mKl^ z$XBJ8as0qvt~~&b1XopmRc9KlMF}3QMP)#l$6U58!2p9JsB{*BSzP~yasOun@@u_Y z=pxZF?_9DK5);23i50n28)kMRsm?|>Ksa2JLAHTe-(T-g$0DuW)SP8H92QN`iRtA} zTyNIemjEE4^#Ux8o}hIuh4(sn5oMSYVQL<4m}aixd9^Bpi63$I9v)Tq=H3XI^7`X1 zE->J&**XJm8oi&mAJMy}J?3*bHL&+GJTd3BJjEw$@P6vt;*AMdPVPIu(c%N;5>hPs zhYa52u8ZHSt$X-0xi$8AY4s%^ztixkGd*B+XF$Ew79f*52HW%LC4aJ%OHnMmKnI3LpWw0Ru zt{5BMMjp=t#s@91A%3oC8_PV#QD>sOQ%nJHIilaE9e2cEA>K1lXK>z{=K;5an%Kb? zo77(=1J4hiKSabro^0?M2T=Vs>A6!OejFQg4n0Fq0tv>p(TPjrO*-%FLxSnw+vZW4 z;GF@UW5C?cJ&7Mr28EyO$PkCAxbCYE`=zhNIeYJOOCi~?=Z1t${Ahb2XwPj?YQnQt zY3!T967MGu_Sn*gomb*dfE4ei?|A}wduzjqm9}PY(I2p|3j}x&Ouf!w{}e<|AFTgV zVD~zQ60hCPb}~JLDoYY>BpTo2U z2%&vuJ_hg#LTI0vzXJFMgwQ@Se+}?W2to77d>r6g5JHR1d;;KCKnQi0`6SjIgiv>x zPhs6b2z8hFG}ax2PMrvSSa%RYTg`k1;O~GC+G^%efZqxswAIW%0sNg1 zLR-x|2Jm-52s%>cUjY7Y2tiZIr0xP89>TQoy_q`z{yqpnU&@>V_(vdw`pujN_+1c! zexA7-;CDj^Ej)7x;GcpJ+Ii-20RIexpr2=+0PuSt1X-PVBEUZfA;{{?lK}n&2%#@z zo&xYMK?pq}b1%TZ0wKuo%+mmVAB3PUWu5`>`ym80Ej#a-ilM*7mO@vFu*guf4MsSn}HGY1e(GuI%T zXTBD~Mds@uTxJFkt};UiZ)8Rg-psfV-pU+9_=?QL_^s#*e061L2RQ{x1lB zHdTJguJN8!^(ikfekJuvfd4L4zW4bMe$~BM2w!+_9>NFiEkgJ;_m&{6+`9u|_1+g4 zpHA&T%ulCY3^6~QYTWxG2wM>I)2R-`{B){&?^i?EgP5O9U4@vRO}zwSem3<|Nb|F) ze+Mx?n|c|<{A}tF()?^{3^6aHZ$iuq>01!SK{mu8bA^cW| znM*J3dp?BA`?3(O?wdh)23)r@!^Shah|v z#LTB(12OaINAB|>d_BZ0q`w_v7Si7VF$?LpLd-(?J0WHv{ap~Vkp6CnSxCPVV(z8? z=xNV~@K2tWh44?GwubP}o>qkL&!1K@Uic@5@kY4*BV4C&y&A45Ttm3}aMj^D57!UD zm4oZK##b2)!!>5c+V~dZ^~O7mAAuJ1^Tzv)-!lG-@e!!)Pa6Md{EKlRRZF!~S5qgc zhf=pv-;#QL>TRj-OT8=gQ>kA}{aWgGQh$*8XzIVGK9#zZes=n+(q{VB9k03L`|o(y z9gp4dp*uf*=N;#se(sCUP0xMfxj#Jj$#cJY*N5+V-T4ok|H%1IoHs9AyWn5=<_kY@ z;b$*=;KD~QJoD}^x%=Sm!QIol&+dNJ-9LZ#Z{GcZOK#>(ncvGi>v4t0Iggt^?)u|@ z?eQOe{9iu)i=J@p3E%L9S3TilPjD{3^702SUwPtl?s?HYwR?{5dH+4nd(u}wY41tz ze$x8MuYB?^Jo$r9{>vx-<5Qma)ap}T@zh_s_iyk0hNr*o=|<{p#+z@ZaQlAh?Z)M= zVdx#k_Yy6g`YYo`HHCB1slPTJ_?SV^$BoziG((>-zPZ5MPZ~e4!_cRUpZPN8e%e?T znfCX_|NR-J{e$uNw=(n@;~jLbk@~#!&o>x)R{GZk^o8jUUSQ~p({p;-U8!fM-?YQD z=ceC2VdzWKKT1zCQeU2St4#aK^l!X{Y0pnT`(q4c6_ii^w!!g=>1VYVDy82$W@sn< z?tkWZFG%D33qmhSzx<0B`s(z)fXwu}MXs#$uZdjQ>Hi>dwVQsg$W=Z4T_RUk(w!e> zS~LCO-(;wre#KiEdNBPmkw1s#*AVKb%OZaV>7}^$TKaFqyIio zUotdIf8v^%OyGI`_dJW7?a~t-r=F?gZ#9=cXTF=xyiTENE{(=l>bUd&jw- z68C=3xu5uMrhV_Z-^noT`_C<&$IuU+`_kuvZUVXb!}I5!!Fm4U^RE&m`Qh__E=uSl z=bNGoK6?Hie~#n**YiD5l7FF~kDdQ=QIdak{s%=_{q=cAl*`A@mqi(T;`~pD68hx% zp(ycBo&V||=9>QW`JWOs{rBg4l$X0w|8V}5g7%s7?-ecf(esDm8UJ+t=^_V@Dd=C$ z|D4Eu>cSU_+~0BGNg{veF8s7;iRUl;kZ6f_Uw8-Q%Dy9Y@g?sujJp83{z%wP=)=sn+m-uRNtA3*r*%pd%~dE+^mzlHF*nZNz_=Z)uO{u#nA&18P) zyzyn3XF~YpnU_NN6`4PS@GCR_4B`Em%nzS8o}XzzxRrS+gxSoWL72JO;qSr2V~k%A*q;#g15aY?-Y>%N>XRA!IpXa-m$AORm0?lb;J>RHC$!}UMm`UklF5w6d`^}pbH6t4ddu785-pW%88uFs~v z!1$L`4qhT>q~J=!bq8E`!gUU=yWl#XMh&5F+?{@-aWVZ}#wEBia6K;l6UO7y?>3&0 z{u$#kTu+4S9=M(a*OTFT3S3Wx>t49-gX?K&w#5htc5qsjquc4qOky)rHG}s|QyHP!gUR|+uY>E~!8L&EWpEAQI)rNk z*BCArt|PdP;W~k90vETd-+qki{!ZhUALI7)YU8CZW$3jEdYyvaprAJ?=*rD&xZ~q+eFCo6!}W;q{yQFp z>oNNMZ+E=PICtlx#-%$SpeF!1ZNtZC!i}Xb-1ecJblVt1doj{19A!1Mtf)J!(8Y^QiIpnfIn&oB2TcJ(*um ze=zf#>HnGeE%^OF+J4+`rVk(Yf%LM~xqR@}tHF;QAxDJ^|Oor#xyn zPk9Wkb9d(NeZrlW?t7K-#`_+D>*3Ug;P-FtdktKV82Ni2PCfl;k3yN|@5FNbM}XgW z-+34vE*iL)+Hi)m#nkN%S8jQ0Ys)w=_w7Ng-EEq^fm82v+YPfaFfF^$DFEN7W^={b zR^GPC+ofD?yPT^QvlTO+E84|sp-{|P<(z333c1owVW()?Wz(!}*K(CgZl{thZfC>k zS8Ib^r-{^Ee->r#x330RsCgL)yiWz^@Ze6HbCB-kV{`S}|dy$1_h#$e#AhO5cQTrP)a z_4#DgJ6pKUAN8Z@2Ojb+i6~3Nm^nvybcfPvKQ#Jl@xMj=+hg*g}Tdds9aJ*$KD(j;o zcgYW}&lhWIJ^lmZ!62IrH`?xQC2LfjDm2zIG+PBX5e~;R4+bW5nlQELnEh(Koeed~ zfY=O0K4>}}xWC4I%3IEcs{xTB@tTg4aPNMWo5R*1yQwshqcziPV!dRI)_OV}9!}kt zWsSP!%@)I@#O(Qc<|?ec9J@;>>=4oNrkLc!n*-*omg~`Ky>u(<$rK_3iK=FAI3G_5 z6%Sz6L+jymvO3d9@`;dV#HusThN>G0v@!8l@H-m}vrx}jV?1095k1VR+RhsN`Pz5k zcYF$B$z9$+c&VVH<#6Uwo(_f+kuS*iWIkd6jrVn+0A^WZ!9SBZq^^Xwzwa)6cv;B( z=)`jtt~)xhyye1!JQG_G5_4BbX$;TsXK{lnyt4v$sG#vFQ7dQg3_%z0 zzPCJ__!uK=+{_wh+1p6NVm4=VmY(m8&$8P9Z;lDfB(b^Q1xBc)UE2o=Hn8@373w;< zXq)U5a<_Y8J{Rk2K&qKmy;1L78ywVIfWmY7^;QocM?o({Oy-2&1Zjftpmc6bplJfJ>kh|#8kP*_bhr>; zZ+S+UAOxc@bg-PPTn4R^_56B$3~gv~G;x^Os6yJz*g zUAxumw4Hjd-fqRp5M@G~xF4rA3r_fHmJ^TT#AzTn5@^)+_Mh$uw_ z62uGAn}bdr*<<&{WaK_j93bLTg$iWs`m4#Dx{#o_APAuQ3v4on9&|K>2GH>c7W5T7 zr9L0KH&wgzFY5^jW}b!zTb{h8+{A< zwV+43VW*Hcw#@BXsamme+dJi)l`rM^1~ZPo08Xc&&wdOl>bO+EV^DqgSpF8@+&}?3+Sh-xR_{ z165v#w8L&MLXx9zj6sAOD0kqOJ9p31B@>WKxsp}M7faQeT`QHhN?;xqvxN#Ywt{8b zl}grzCS-0w!^>|&8?@}=_I9pfmhEXhqvvt1WPX4w z#!QSL#!LWdkc3}*t57PJtJ&<9T`bpXWvjGh?c^(EuzIsQTh*OX-p*IHOXbpbWjmYQ zF)J1552fvG%PJMEY$;v|1!GtcjiR7hLcyq@*eifQD<0G>Qz8)dUFpNHw;j&r^hA&h!S9HWT{GG453O2Dnr!#Bd>yPnNn_Bcd6vJ zZzq9@+r|zwKx@a^*@50-S|w=d`FLa|(^>{P2eAStY! z?ZS4kTC&PJ+jg!1GRG{!bF(0EYFj14wkoxvX%}s~Rxajna4VHzq^s5J9kXhdVQ{md z!`Rji2(0bx3Z!Y~tSzgStyFU`5SEN`rI4$ZcWN~gA7^i6YvqbnuxnPKlrL5amF=xk zxoGZ`YCBtyRIXUDO8H#L-rC95az%TmWSGSrbKA1BH5(#;d@F4i%cU%&lie;>>{78* z-p-ZtTjjE4?^Nv_+bnNwWpjCuL?D7nX33~+Rr5RBFyfXW;hkJDYuSY|bn;4dE4!7? zm*G__TV-HdrE*~#Qs2r}il$ZBhBwGr)zT)-x)kZ9TjfYEjS!%hMk!GO^wMaQa+H#F zq7RA^pc6(ZQ37$+*`}HHBN8Gy)Cm)j)~#qOqo{M zz%2E9wQz(4$7fmkfm(LAys3`M5j`oOC#p)&_jfia0XwKGMa}U3&ZZ~tYexOx(^sH>?|iYKuXq8?9IT2APHJ^SHsEFf550_t0ssPvyv-rl}za0pr~$@ zN_o@T*~(?NK&8l*tJP{TU)-q_iuqa@H4byTT7!;UF-xXV03{bk%2G88J-D=8wX)S> zu9mH4%XVek%Gp&&s**32DusL=Mp+xi+aip-Wgxwqfvx z!QQNtvXIdBPAzZdK|d;0i`F(e$3aqoN&uPKDL~Yn0=z?^Y?_AMGAj*eP5@Txj)F<8 zHl5m_-r6@C^=j4ZnSrj|?)TcYfQ0dyb;qf`x2!@DMEzF9$mOj<9^`D!F2HyP;v7`llASfTOBJhVg85VgCAU-nXTMHciWDwXf980TIk<&q3$3vEQzmwRX#nkhQ47jU9<8sbR5#lu!vqaLa79 zJJ>pU-3X`MsDmA3%w`kNsFsuYanGx@`&}y>>#7aPLD;C?gJup^im@A}KUlS$`fdxl zhEuncdkq_B-3pp~*M6{HM@jEoYY`dp)p9V2fMko_0$uNlgWYn_t__IE%5C7E>~_L= z=yj~1KU0V7h9kgjtt*3l%W%+7WEs#7xAI%Xt!x(LA1E?b7HlxfELxzKZ9yB|LY=1o z|2D{=T4@_ZTyC3mqZ(*iTUGU*RoLN`mc{gPshA&yEGw zCvYf3C>mhwGNPNtM=7ayN6E$y4kNV`D(|T^ z`pzD_p`~ox|-3l?Gtz5kp=0&>76+L>t+8IGc2|xY;x&1Z{o}aDc75j^LDob z?Ilv5Qdg^7gABu4M1Q_U_2^m<_5FcEzqD==~XD z)}XGi_q3pKhKf@3X`#3glXHyo#RHI^*FXchk`ygS1D;Ca&I$2htPr{yR8O2aMicz10G%AkL{m(~3vOT1%#~ zco2iL6ORN!v~FFC)5Xj{geo;YE+cxMaD;;cDW5O|bgy-&LpxxFG!yTrf=ob( zo5WM{LRDBK0vSaI4JgJ&61&|=B-5x)?Q^%=?suF`ahhhUZ#JAnKH5-C6np&^jgLW< z$0^hZBGfB(w*{FFQ60QH6pK_Rt%b{oVMPbpyA1=6)pNRb6U3R6T}s0pNV?YHu3DgG zp}T|Lf=8=H`(Sg?huBrS(%;?17P|RPA>?BbpdI$a2p6a_PCVXTeHZ%O)Hp{Cp$^pO)p+SRgIfKnlnt$Z6E#*SoGMn*HB}SPrm;Dp?Mu(7x9Yt*$laId zLP{rwN8DI+kn%kmC=$70@s_}5xt9FABrfY^Jeq+X1S5l%TxitdV(irAP;a$&TS3%* z3tMx$OO%~0)65mEl3B{;3&ow$>z4orF_=hD(3P#TV=D5E7Yo6 z1*=%v$(wnzRtqWFEF#5N7Iti)5y903oL!fkezm1Hvl>oas~#TBIkN*3UJz`1)@?M+ zVz&>sbWl4c6W5-P7r3&3>5w-4I^q|S?o@;E7zV&5Ha_{#K+Wy9uC&0O0?Mw8fj&m~ znJ(5GgJUauI@3{C0-QrG2i9+Y{Z5wQ-V^d*b} zwGv^Q`@5t=ha%{TcC87+*8%icrzM+wuh*?t`q2B^&~N&ZEXFB~Lc<=p54foZoCvzx zZJ^d`ADE3;OzAn()R+icAJij>g24mIZ=G~Xknh)`aYC|+=^@``yVi4vx_1D9@_J*=!WA8n2cyD*5#d`9VTj`^5qXgrm2(* zYJen*85z=X(S%ydL!$xd3%X(ttu5qX>VcYCxi(PD=ny9tY#>Rz92qx|QBoZwC!(0@ zH&Ck(zE;W5*PvC~2VgRZ$kNuuVsp%zjYFi+C~7r&KtQ2{rKD<;wnOa+_;uU14I2bw zb*s3QFKtypLY68!xk}k8*K9j)**n|$+E&%7Y;PBH1#7Ejo4LwXscLUkiq)M$wNR?r z;pqS>_ZDI4H{`vzM*hQpmnDRiH%+v`k}$9QtydzN=r=&Ak<_7 zs(7syJUc-wk_}|w8==%Pnoa(pZrdWjC3aRF+1MN|!X$?B&HFQ%;GUmr27qyHB1>eLW zCpkq;VgwOTZid=HI6@N*%@;#S=vis1=>{YQGV-9?hVe_ePWcvDsZbaWjOksyo*9>o z0vhce2*LwF6Rx5Nl^UH+!*W2wXi#gIy8}I{OcYg?c%nL0CaP!&ZdKJF(K8=3N_5)x zHLi3hNq;Z$z=i`$UCM3f75xtR{JM2?8A*4fmPDhDjShOT6MaAEfQ@Rq1_pkT#|{mD zZr1_z!KTbR*0Uf|r=>Mv)IOseIe(Zr zMyVZ&Ao)IZAlAkH^t7Z?!>? zTRnXeB+yY!vlcCYcpj>4TeyL$RnP^Dtzw~ED{Pl?W?`#PDA@UeRV!JQYR=xWirK2Y zlPlZVTDep%SIkmj%dQlPC97Jtt2>ru7HT!4oVCrZ?V`0^-YL{_b~#_Q%GK?xnXTsS z?fj0lW20Vfm&;ahYX`zwZM#@AOI6d}-m$kKflx)8b)-aB+&CQ=vo|cr9xyYs`Y*!U zuw+|sRr%F>HDj?js2PKhu!>tsf*M}9ZSVf8hhe94g=Xz)_1(B?9!!~aU!;pG~V+R8&0SYCe))t=@$IbyXk$U*A6xWqt= z%Y+6qSlwL%v*+}7je{yWUxX}anpX!cYcFEmm^{Qo0YJwAuIdb6&UJ`_RwPbKI(wm( zgTtl??TQu>7??O)0}Z>i+uMuTcG7t#*ytKF9jji4h-#|>O1*lJgT9V9cCX(tJ37Sy zOz-vmR^7PM-@{YI5m7bug`l2~+| zLBB(<-s{9$$zSYfK=4C+lYPH#8rabm0K4E8Hm;|xeUJ4htwlF8c%WXEh> zgOQ;sSXUezEhJB>Kk*lkE2iVDmt4DQHxlSd$i!Kij7(te;S#KPa(i~K-LD1V+aXG11GCkPs7y>r9{0>{*Oa3lo8u@2s`Vy~9M$1!*ljmy=0?Ji$HDLxRr`>V z=;MMy!Ka5;AoeS}POQlwDg2oIa2&*w)*4mX?S^f(LXM*j;4p4>(2)hhVtgN@1Jb;e zI3!iOpk@iRLpbPIhvN<&p(U=_zG64_IX*6r0Evts46r)tRIli$O-nJUn}g-AF@#@7 z80$i(;<@BHD5<<`>|d=N2kINVZUvok;%>0jC6p zsiB%j_c*kTW+&Q1HHP$?zPPVNgPQFit~%phuh&V~0MRiz?(q6#er!J&#BDmw2Mye+ zG#O57lPM@%50ZZC*lcChKuNdFZt!Syjvx+Yv{&thUV$qJhMS7r#YAvj;cmNoP0h#B zv`L7=f=_bdE^;!h>f}?7->i8P6O)ykK#dlYeC;mX5IBgdIJKh)oh~Ro-D|8-Z*c1w zJSD`-Hzk|r@xXSrTU0R|Gwu~bi&>LC&<(Vx5zAs@+*p6PZOm{Vx=mE7P6x2MMLuXP z4LO!#+rY^Q7*GN22Iibt{iLmD2}MC;1=<|QpUU9CtoO*)kEAWfX{dlJzzT2fjaW4f z2u5Ili0g$KkM7tA78$|V0D4dt6vD37{Hc%7JgM&e)`kdlfr|*Cjl~MwLEq)QJ5I0893D|=^BWi>axzY^#7foXZdZDSXkLY8KONOYnyBgE zno?S#;UsiTcq{BcDBI*Rr349bu-9&c`4O=Zju4X-adtQtVLq>7QISz=70z~SW_l{J z8`CRpPF}pAqbC}a57v?s>(8KJLJ9Yr!9g9>o*tT9Lh)^&jm=A9YBp`maFp9gRTu4| zQR(W-V(9hMtcrMD@*}W6TaJY!bwmQ(rEn6kfjy+z?}2c`e5i%19C?ta*67T*c9Xyj zt$m3nOg`15G^32jh{c?cA>ZzH>#~x07)5!D{^6G0h*Xpi=xne!N#HMs&3n9SFa7qS1Q1%kER_FlSaJ(nyy%?T}gHJU^EMnLpCZ1FBE~G zStW@B=&fKoar;Qmm|*Z&eMj32TDPuTV_L$b zT(#N(>7kp|O(G1s+x z0+VjS)uy3k&pJ~|-{=iVbVaK-><~kLGWATIi9Q!x6c1I@w`jYbv& zG_aNvYznl(F(uy7kYtX;8NwQ2hHA2`z6ke3T&)Q)c#?u!cA$y0JLZFZn>KN3R2+Ic zP#ij4Dpkk_bM6Y*HpJX?T2`k4Pt>M&Ngo7C)xssFFdp7!ZxnJP`SRDRqDF?L+%>9U6vd5tpVPbCoA}o~c`^MaDQm4-%)N z-3ppgFMd$1gB>^QFjv%IF0&i10Gz7>IUVF4dwH1H9(0-=81#S;%sBJl)@bXuqQn46 z7!Y{Bbc`(L2We1^d1GzpY^+E~wj(_ra-lYibIV1O+tJ>-XT$&LUNe-Pm=@26}$Hv4}@;3S8w$(e;6Y)7bG0!Je8`AqqyLOHl4_=_`*(?6J@kr92e9@#C~|S-R3=s z>Q-eQ(#}C5hdrnPU6nFUG2rgbRuwn@i{%AmdkE*FvR}!I(6m9oT+?J;-;p;#{5E=J z64zrZrnVY{H!SK_K(Lz+_Y_CViPjk;&;?EJ!F}k|7^^P!rm{Q@vd#7ciI)gRDmOSu z%`7@zaxgHi4QIoXp-~x*t{*S)=pJjhz*D|yrGl|LoCydzoXZi~^XVDWn(OImG9$3% zo(kZ`gjn9nTYA%>I)(FKHZ;toJ0BYRc!I9sOx)!X5bw-g!EZ3NX7;b*R=8Xi=TD6Z z9^8(z*@Vd{RyDs$6#FKmKo~A|2rxPkkmN)_a}~6NxCAsj0nmZdv>{JDLq`LU-n0jA zPFNF4hM$KEDnve3%ZYn~k-Be=$eTDn7S9vFXzkLDK0q!FSE|nm zN>1^L?j zIt~vHq401WKMG-$;ru!unA`9V@jDHwCz->M0VRq*M{qgog$r$bWSHaWa5RFRIO22h z9RRxS5%y5O<1P`s>K;Of-N}NaMuyerUoBd5GKJO$w0&sI5JE{$5pZ~-5z<+>BWzqo z-J1=M;kP;&PCW$ZJZJ{3$#S{&8K$kUerJ6+1w>3N2Hy|x@85Oj?h^0eQ#;)y9h%ki z=*X>2O!|p1y=8sAktObf7|C}fF`N@`xq&5;qZr8vCbLA6A?6IF#mH!!am?9b?IUoq zgaTfv0_39)4SzBp8S+CIy%UsTc!oJi2ImX_=#_LxI3W|i@8gW5BA7mgJr5x4MTQwx zrS?4UI&KrzzVWjE&~yQrTaI|&H1A;+KULQsp-g~!B{@OgbQrCw6Q6T!t(PG3S9}Wi zm~&enLu;N61{0nXRYY~zJHXuWX^-?6dcs)2l&CkKL)(G$JVn>DCbB*S;Uw9MQ-2j; zD5fMlc8`WIiYYwUusxQ$w8N>()pjB?5tKG@(-R1qA9?K~L7R(T97GpTCjgGb?rnI~ zDSe?tY~eYjj#dpu!izMj?aoO-|KaT?UPSr_obF$g=vqv;7UPh|4V;mrngrXdkVhaq&PBjZ!- z&DLVwhUy>+e+P#p5QB7JcdFypEid63RO7h zzO#iSKXlq!&qO^-8dhe7D;TSV(hcK>A*=>3X-M-$hNy((E;lPL(OfQg+VkhYR4x<#DP zp2ul=5yv?E~(>fAN8b4-i`}3u^(=5P;2G zD_+NSuj?K6K?{`gRRdL7$frh9SluT@m`3v{5@4jXa9k&(iC-+~ zcnoW$+JP}vQpso2fJQp^p`C(BXieSWTqI4yyfZnTi|m3n$B1I~=RQ+}VySSBuF$#< z5@CW67fBx^9pl=;_yJLs9Dgy5npN~OYqC|v=!qX?gCzM|R~iXZjeMI;CK@Ftea9_S zrZHN8%QhP!^t=UG9ng88$d_0&C-ei=vmgNb#vbj10AVbNP{VPW*1k!)*f$pwWcYII ze`w7(m8uv91nn?{@g4Zxpx9khd<}PgygC6}dQ3)jj2K9VsfYN)M=4I=SOM_?PN-|~ zAueF(gPcyqx1nAU5En`7r=BPrYnt6;))h<)?aXh8kDvyJ=*TVO%z6qFj2J87=6Kpx5~28jtvzx zkar2fFDXt~c!pT~kZ^2mrw~-fN~S?lrt9ADgm1??oue*>wKR3LC_)fH@sTLf*!B5% za$_>aZ}8osG-CJOHik&p96^(2m3q^&{}oZt>9}6#To%~N*bPtyHzzak)j-LSq7Cec zs9cgHU9LoE0j~Nx5wxx?oen5=gD&Q*7YmQ5G_G@70n1*ICw>6eefgCtNr7QWkIHr) z8V_dyIj%&Z41vmYL#Br$%?4BG>Vu^skO8tr=#YOVKL5@r90z^-#-gzVyoB#*9QZXi6Fu>Mw}YVN+j?SocZxs!Xux+h`37PF?3HxoXgsK zoGvu+gyc{nCFO(rQ=CIhFHXi{k5hZ}tp#tIz}g$4%LXkFd!E2nJ8KfTm0=PUyI9wS zF$i^&IJ>=^9HWMgB5Y$M(p{nY5?I1EPiEFv>mG>FWF}O%5ZG}Zo9|s5WD?$UvZA>I zYH)EjcJhRxn@rtg4u6d%nTHb|$sAd3+?ri1<%Dv>;oCg);cYfW;Wyn_uAA8GDAA_d zlKKQl*ySc}!#!GU;&ms-CmWgcsXgpB;+rZ^3JI}Dmc*!}n(#-?68SXwfNe3ET|b`V zv?f~`3Eli;h}tCxyd*B^(W16CNw01q587KYgQO@8=+GP=T%)SCgmECTx^5-b@fvi% zL{@#Azme??kCQpML=GEjNm2t^@Fu2i<0ZHMga-`|-RUMN&uY#lu2LHkDt|bcC$-}1 zZhw)?6Mckyt2ja@wB&YEd}uKt<%N5^k;yZs-h8z=hA>vC%GF4pBm>+9&bgq%ofv^S zF?n-t8%-)g$)asDH>^e_<&Ui6jeML=TTT|q%r0g&dCVd0Iq7Xz9(qfX9)#L1D9VTK zGHDE7jZQW(`5oDFvatljClWWcOzsE?{cXO96SRO$F{;Xmk}!a*H?o2cddGSF`2Fywbj$GNiR8&Vi5#d7$!{)(M#ep)w|^GlE|>U z8Ge>5DGU1CaIzw^iRS<~701-H4`1$%65{lR%VU~~MtdyTN@^b+fo+&9u{ZHVeQ#px zZD&&))a^ECbxGy7I9n#O%<1HKj)j|)4S%&ri9dp; zw8cP!v)o5h?{uRgTAz>In~5S99r`?_cXk`&G0wW;CJ?){if1}aU|AkczU)oVk(yBxme&&pqMx`X!7}S>L`{o)wGBkSRg_%)325!I^)<^1|oq(IPzoP9$KCZ_uv;YQ|g?WXKK3 z0x?7(fp`>-q2tI;@D)3!LO{X8HKDk`m5C#@7E=(!>IX)!=ouQH3V>(dB9k-r&Czu2 zPi~N36vyl(SeLO`*W_5cOAslpSma3J9anl7s2u6|NP}^dz#1cj=lED7@fCF?0eA%% z$xaBSg(x^fMOeaDhGa4WQc`HbU_QXyVrk>LF@kY_x0voG95q;uM8c#gAEi9Syog_6 zW*{fDC<;1W9;qZWkFxmKP=L#c(%#8r&X0#i2jdrRX7GK!1=lUFW5M6#~Qi}z?pWxJr;KoV2;N$ zYd|b*7QqNLdS>Ws$hnS!?!v%6sFb70N?;3LxrwWjF;9YXXJpkKeYt{4{wfJi06sWz z-Kijm(OY3NTKycITBr^pjmXec+BS>=47N|2ka>J2P zG6)LKSN2?JgU|v6aY`!)r&EFYBp(H$eV9&ASRWC{sgAIC5y(tOcu~HJc2mJK4ffA` z0adXPgWB%XFhnHY#C8Pg(L|C!5Rq8cNJltN5hc129Lk)c=xpuXK)7h{6JR5;D*a$G zAA6^Q=$+2pWr#wq{Id}0R7ZNt$q+q51}GEcA~G6a>j*Hs>1ublL?UW+0<6wF3Hh~~ z0z8sHFficQDvnX67CI4CrP0mF(Gj6T2`nYx^AEm00bF|odgPuUkb2A!LUkVm9~jWs z;yg?U0}xQYC*F=WRD#qq7K?hb#^XKpMFEOFD6pnY@iwta|lN=sJ4w8IdF<=`Hz0*qXAsvxz+=9OzdlZv@7#)AR6!BP4oZnLkl1 zi-l^_y~%2dS|f%hJPR&bi$JD}5r`9k$n`V4+693l6k`OjQBI(k#X)c!fU`wjPQbIn zL?ZAm3O)m>%*0#El{x;gT+VK zN{C#Q0?zU(1ozGoGL-=IXqht4ThUty%ci#kIizluD-5J_h!OQ+O~P;h*ZsbV7@8p< zDkx+CQ9!Q0#~?-tmTQ~Tvv|yxInywq=V_F207?Z=B_mwkvYZrLZMLy#%4qB#CzM_} za2W?xg{mT9HE5BQvjF#RX|RGKtD1rr3-*%mE^H0QH`P!ljE*%}+fk<+6NB0kY?kpf z79-4HCt!rY5kqAEmiXz+^{z0N&7S~a;p03%P2F=Vh8{$SltgT$jG2h-C6EbBqy4r5 zR1U##8jJ<{TR1VsXjC>#^j(|d#YnvyEq%ZeJk?+Y1>2Gd^}{H(N_=lZPUd1AD`9AU z2bdGWmhKdcYF9jV4}_&$dJ}R_XiIWJ?g^bfK5clXp}X~EI&@ozK&>^pnul%N7ZfPR z`3<8UThhgq5u;)ci4px6Wf)0FUk+v*g)kgOb=-;IGaWe9K(sm2naN4 zss(6N$r?(sBUpmQ!b8J(kY}%zgPUZao#E|ZFzeBfq~k;30q6uC0BTcVr+`tfR|oY3 zZ$VJg5xP_#BIIFmRAHn9B^@SA7voa_-r%3E>*EiaK<&A(zl2qZdY;&FMIh5+qzlm^aHhG#aRrfGPKP)!;(B1C5m z!dMCvMJ3T2qfKKpND`i625~37rgHX4Dw{$Pvhc$3>j%!N zpd|<=iF)}EVWuM_{X@%_SxF3&hGCQ@#<@ta@Ok6*dU->nkES6(sEvYZD4!$T!+axV zTPKW9b!?>P^hbf^o6^7VmYS?psy%hcTXoX9L)}s?Nm5A&olZSDVup<=S z@up`Aku&VnxN)HX&L9OyX9bCYqOqopUGhjW(+@~ACka{|`j?@BO^H}_@C(jWxmac2 z!{au1Ap)pV{%|n~W055d(fcJ?tYrY}hknrcbHt!@e)N4e`T>Osr~=XeCz#Dy0>cZe z)u~v-8{@!FP-QrlOM~$350S=h0!mc)2pEPo%sreIn3M7#S*s0nkvH~GoyY_kI(F7G zhH6uqonV9)P>CqG>yyC+g|v0Tg)Xq@Kk9)Y`Smy^b$6SROo~Ze;aZ-KU|$034sPY~&3!?vkUc zG{jO-IW57r@B&eZ9*SS(!cjK_*jPb_G{Ie6FQ&NDMLLKFJnzkC92naC7wgeR_zVM3 z_T6JD@3?IoIxbSiqp7D6bWBC*pi?O_5vo5|%>1sTP%=lOwLn)42oD#w5qabwquOyk zMr}A2(2;_w?jatTw5%+>Q|eAkmL>~h)a+TlGGU}6)RELVBS=|Lk*K?m9a z1&K_x%d5Hsb5Jqr^N|D(PA02=yOB-~4)RYk1WkwmF7`PiwC;`|S{uQj5K)ZavNN2* z5py~D+#}Smtgm z^MSyE4qPA=e$CR5e(@aRy@TLWb9`d?gB=S+&T?`n<7nUGX*i%xgt@hD-ELJI*Z4Cg zVIH4L-LlBX?{~v|E#LIXo5;=D znf{w@3qIzc_}G>~+U2VyX z=MXIhv8gi7)OJ7)r?FU$3&MP|I)nBMdf%2aw`HshBporS%w~svi5%mPfemBK2SkwW{ALPyDMYkjJD=fCZn^Cv5k>q4lOSqq zA2kbw%ogL8yIw7!VzKM8qX}{% zD6?Cu5a^hM&BQM{(#HAT@R)amtGon@bg8xjOjv{(WfJU>CEU|?yAlCxT}-cB^xEbAJ@_; zH{;1+%RSX|q?f+HX5v>I8(kmMz#>TOk<@7pZD2Q20v>vVC1<+N4_Lt1OmIRuWle&yAUy^i-Cu}j3B;3$#(a=+1?SG?F>3Jq8Pm8 z7696W3BN*Ym_EH35Uk;JWI=AEjZZKe?gZjw4*rs9O;FuO0X%3_6RbDomq zN}%egGg8Ug)iJOZ15{s3!Fv|SN;nq#Xsi>LHgV}^!PU^7Krw>!pz|uDKg35j;(9*U zibD!1q23b*_bK$&bD7(PC>eDMC!~iYa-s{K@}Se}(qcG;a;uX^V<#h?u?L2#NBSF7LCbn_R+H%zT|Y>`32Iz4 z8rwSzoi|KFf^*`X>Rw*{w1rp+Va^G;;w_J*s~A&m`U>UkIDn5&i3->L3feC^j(h+@ zjv%K~t%C(@?hbN=?1|A^FTtFw;Ff5k>M!U3>fUng;z52ug52TvI8KbV&%fp^`kBK; z0tnlaI6oO7-tWTjntv7)Vx6B7M29fFXaQ@K z_-X^mS#T)E?o+}V=y&vLp11OuAm)LBNh6%<(Xi3s4AOv$KAN#|xt-yDJYz*$(7~`< zL)aXyPIxUBH6p}9pL7r>gmYV#h_554=1ADl;E8@K?l(V}jK#eHMrG^yEBm2vj3|wl zYT*ejVwo0!vqc{JpTykNP(#N7C~S%9%)6f#VX!2=U#VYUeTb+eh~D8fHKlxFhWSZ z4W6Z=f!?ZRElh|V;2b-=84p+0(L)_^aGTEbhzDgsqY2>n;X6SVKS%vKDh9lr7~g`M z!vrTvAl+Nu{?Msb5O~a^N;W`l)5?NKGX+ig2js1fCj=R_rgJuj-(XD}q4LmFfzjl( z_@E8qxRu0{4ZvN9nqg>kcnVpB3k$Y0F?y#UVPrOOjfu9~htLs)i<61bzCKaY#n9mT z^9ipppmP-1cePMSS>BS@d?KxV-S?KEn@t$F408pn1qNupuK@54Uv4ap(C@(=#&ySd z)B^VwiQvK(GuSzbU-eM*V9rbJf(-F1ngHF%z|M#6J{4gU#5|jiTq_voeiS?n7 z>7wf3{Es5&8f28go`dA*Au8{SQ|M6u@@zIH!g$j)JnG z!c$~FnT*ApKt76-T4EnXaI3z%9ha>5S~*Wv3K>S@DGqKgZZB~N2^Ak1xB?%aDp2mp zGvvAjUJXvFDU1tpqAYP4M8NbEh+4#^n-tv~k7+jwSY1#d41ysb&a|5I?i}%M|3ZOQ1mkK4UhOK`@ET0x14)F1sZyd z;DlnvdDc3>g);;!0>;%QED_W3=K{y=mpZ4ba7ZJB^t?sGy@4CQgV=b)1LHg|9^fPo z38Kjg=zxSQbcFWK1PX;nvo;*9^fUt;G|vFR&nn?NGDcd6m`ulytQjqLh4VYXH=LkS znnNFZt(ZXq*jEtrWpOqGVqg(R4$C5PXw}_=Yj=4@Wc3I{4yWGX{%~sGvEj!0gu)4i z<3set8;71pziSGY7O9M9ZhBw72QulJ(9*n+(QD2=MjrP;C4>Ve30f-IU}S9I0r@qR$}p?D|(h%)-Flr zbSxlid4?Z*LE!}Y#x&;S(N2U1F6riY7OUak;@>HS!FdC0(lCg2q?nQD4589^)r?MH ze=XIhe)5LsIEoX(l1692+7}Pi@rkzQQFve_Cid~btCA~x z1t343unllOV5v47T zg4~D&_CZF%1RWWl^6!*FkOF*ASZ_F?zG8S&H=nz|3Qz+_D9}`=q-m~a1met(yIc{> zQO5vXhZgNl1=93~qnUtb8jPP{72uc-?cx|m=mk5)^%nxCpVP^FHX}&rw4B;_CZHo+ z;zJ-h#N4sv0@#Id+gY$tC%9U8~Y>N}}(|oycKw!ogqi+lvzAPdDj{#SQs+rV!Dh z&-R8$SQ_qd9-{4vEkY8Me6{V65V5jd;k>wAp`-?&ejECDk0u-gnx8=9ZWG}0oV|b&@lpj0 z{<<_Cdjx4hlLqHpM(8l&Z8Fq55$4O!%L2SVT*_Ml zKa`>NM1_+hOtTuu|52awWD_n_2Dr}K4~!G>t3?+SIilBb`cBYzWdbgCh9-)4v#*N| zrY$jA4K{&tgGMxG zVIH8)>2M)He1!05(0-c*vgH~PMe#8(R}k1YAqciB;L_k=2?=3b76hIKAaC1{(YcZY z=6-9pHL3l|j+;CCJ@uHbEz!wGje0>+2*gC&hM zz;icp2^o6!iOtI?)tv%lt5$whMVPY+O-|CeK3T4aA3A!J+G?E4vXtmx5@BPL4owq} zpG1nVTX7KyzA;i<_d2^=aJdiz?0Pk(aJ|@rU@`?Eh0~k=W``pBIniJLzi}(OF~!X^ z%H1HH1xB8w1aVSafZk$Iod{TSsHhdux@RRIIyJEz0@rkU%fpFpTJqC1tZAq(*|5IR z4sqL#j!Bp*h0kWt+1iJ1xb`(1gq;L;<$+L=5IQAF5^sdjaTq&oOb+>V^bABlu4CNL zn022kh$8vI>SeW@LEQf$Ky9h&{qnF%q#xqeAa6OG>O}jd0>xO&b9YkSh?Aov#vf;m zZ%zt6(3-%*kGzHm+9@n}9CC;!=Z|8HV9qGU3b_*!Q`;CJNOfbB;pa;H_UR^Z{RCQg zz9ABQGb@=aXH~=MXVQ@crtf>B3A2MmAYwyU=p#)@Ud?Ef;GCG~x0?d@PK+ZRJTb;_ zQ*^n-IYJIx>YA#@XNm_X9?hj;8cYpeY?9!1FOguqfjbUj@Im4VU%_~xkl;ioMcS2n zDHX+uQPip6sBQ#Lx;|MX^#NMBfO)R(6PjI|{n)LMNdm8X@6C zPnfb;+=x)b+Bg$+yR|3>9(;IeLVU_t?Q1bds`SLSQJ-khX#8;o>Q^+W?=2DPqCVL{+0g zaJh^^9$JhP%nn)^i+8UooI2U~QVXL?KFmPjfw&^6X7BEB;^U~b-6jhwL!3T9J>Li5mi5}wEPDS;?=z>?<2N^%rF?cft2j9ij zCi-bA1n1__cRFWEyJ_DXxeJy1028ww*a!k5e_TU2y2k+>KM#$~63_6A(A8(c1FE?^ zrqe#r7Cxf$(*qu#!xP|gt~7o(&fo;p=1jXM@My>0M|k+?`wKEb)P)r`0rh(spz`Rb z=+gs=8!A9;PoP-#72vd911yMe9NuW797HyWi@kXD-DQq ztE=?sCN&^xXm#f4m|wf8p+`DWr*kkFLd(7D288hG8oarSS)nhWN9MnA5q6lsE8W-? zJVAoJATm3j)~glgSbQl)tkv$itMzh@I~xCg+TJ}%&g8les~%u5Jp&AY0Tx<7i{Z|i zVwS5VzU%9d=#rkp(q6U)gemJ`}iWIE2hzk6?0eP4G2SYU)l^{rcv zuO7E<-Kx5E%LU>Wn_%FgxR^E-!81Sy6guGOLs7`PHZ&V#sNGA^%{p_{ZZGbDXjZFX zdR#1J(B4c_yAXJ1NFtyg;hd{gJQYQL-K{5x8jjq+u@H##5~$Gow%}K-?NKs+Hn_Ar ze_{BQN~v6R5k?U4I~;Ffc?m5LEzMQ5a8(bBo+pMyP$@pVuVac9y4PaLh!An zd|Vpcy|C1=SEZR4Rg?Zne>{b{6dij3w-`*BS)AahdB}G)y2fIrmuqU$(U)ELsg^ zGIT_Unl!6_)I^$!O?CuW+1(x)o~g)EGqp*=EkFVSyVz9XIZ~fpX(%q8AYhBd@e> zAxDoXXy$RtG++umiBp1V!b>oMSouwk@m6nEBj$gl<_a~pR&y&`|MRs3F*sak2DhvA<(JTCBvNtA% z7nJ=|UE)ivnghDFwG}+9b{G;waKl6E#Uk@#Cl`6xDvQJQqiRi#l>qUJNi?gKSb>hb z5P|{8kqOwbsz(bvUEKEQ^mdG)F%w%tDBXxBEFD;hS62c6wQH-C zlY8EC3Xh5|<R-Mv(-ljyAP-jo>Dmu^ai=T~BUfO?1mH%oP8 zh~ZswWrz_%=(7pMmX2dwDfU2<+@6E*8K=B=;$Mj<&I_Rq1xZdRS2l)t7N%#342(O+7W6zY5G*_5BUCf};~ocR%F z)=V^8miC0E_lv5a_qI4?h*hkY3mYNsV%kh*yocy>Z$_zzl15%FZK-M-D>0?R=)*hB zSR5@hqha5LL?h9LN{6j%uVJ%yWwWy0BG{gVy4516(gG=OR5asp>#mxuL{TKzRsqAK zZ32eI+XPIu!n1T~3%G2}ffNC>xxv`N3N~C7M>0${)^sVUXHcp?m_~~B&ZXTfK1qA! zC4fLk@z&8GFo3VXD`d^+w*T4yO++Hlr3Law`4M_-Yjc z&|_uu)O`F%z|3xCONTsF!u#y-+#{k1#c7R=h{wS(JW^J!!Tl&yi|Q=1~R}axxe>nTPv8 zF5fA063X)S_PsaqK%|TONycCCCg~Ni9l<0!%gUc;B*m2iSgWlm#Ee=&nVY9e=9gJH z@{94Y`14p}kSu(|qxpiJeJ`1dEQC03-!w*g6>g7NY_culYW2!C%`h=ajKoGQwG!Rb zjTkG{s%lA5GkA}172kQ*DV3yHsF$v8mUmvN`Wo_PpQjYV@{-5k zO1((K*Sy8FH*@7N>XIg87J&^se;d+TQPg2|R2p%4rjqWL)hcA|4VJazOquzqe?5XP zls$I6k!r(+Z>ks%g?BdTrW-HhO1KR~pLcH=a`r;8``Rd+*iysa$XGM6F) zT4)$*rW7u=u!WA?xl&t!*#R0>{_|;nc&~%i+m)hm*vEF=*-G@XE%+k2fUp*$#g>lBd zqnlwm+>8)Qx}sL^OV!BJZnf>$%uM7B_97#RzuYwEhXA6W;3>tPx`*%%`XV2H$|0!R zytz}l#4q7C*+S*rO0CLLp=O}!hTt@Z%cy|t?(FQY7jPr9&KAlO`nkfg&s8QHyQIcT zk#IW=K329PVM-P|f>JfR47Qf`@}`_Xc8d+3W+l}Yc-8nvK=iylw&>(r9!f2R$bYf2 zUE$woEsIriSj(z+=H|LWyhbKMRiBC!0YOXV;NhEgmI2nS>bWUDSLZHX^F4cQaq+U~ z>Qda7cZu1GN6XdF*;qlf)u%ohj>S!d*$NDe!l3%gw{apLTXYe1Z$;4H#%*ccoa7zX zN?qaA`rbTCT{38(2rUCfz>3)&R-3oZ>mZ1Q7DESnaC|sm*m4BptWr$FQ^brZUAZg( zaJ6cEd1WCG~@wVyO1WCHdw#izDEZ!q8NH}ftYadGM_u%1^ZyLKwU3>;}>4wsm_dwKv zDzXW<>Z6qctO58yW->8mD}pz@ofuaOpxI5aoQV~NM`=|7+HG8Bdy;OoN`s~xExnmZ zm$xIIHwwg_P5Ch;?Tdvytyu8M;(rV9%>cq&0F7*$GGU|$#xJeyb&H`;smtv&*5Rv^ zswUesNKmvxmCdTL^DkCyYyOLdtLzvKkdG(c?Eq4DR(VRs&atQ+0ZKe%&%v;aC>WX* zYULu!2&Hrsx!;$@fh!7%ZQcpAH2+d{XMqO!mii$Ysv$w1>4ANzD!)()0_0E0ESu#j ztpxYPSBA@CEWSCrTTjTZh8kO-xKk8^g}ADnRI^gxtlx9cmro)@l10$u9{Wf_jJ)fy zXVD%Dj(0V93%4bn->z$g*O%st+s#3x*yFcJWUZhtx@bp7URi$ZRJYY%ir_?^@zhu^ z$r~PA6MN4CwNi!F2v^7Zogqp}+6(wXYjluWBP5^W2cMq91y$JOJa&O9#q(CSwXO2= z@hCp;pC9`;TOfPr%-Eb+{I1}m<(82d&qptYJYvS7&ihhdlRv8ul3kQdCbHRf^m}&M zhv)oqSasq)EgpW=Q{8V9Yo;8BSw;^}i z*k(Tsb0Q4FiMl`vRcwyJ_NCOP<9x1C*x0EGir^wGl|y87O({t|yvh%-03!g!!-6(3 zORV*UdZoNm(l!>0mNHC5kTX=$jH;)-5Seg?HBOVp6jDCu^uUO{B48aOoqKF)Q){q6#Oh$?0zDZ&0>KObl2n*ZGE%;8-zC!IJ*oTSqh-Y>)T&@UST_WQvyy)Nh)M zF^)=LAYTdcR<2pGSyQRS>J~xTAXgfdt>ipOgc~eBU94`LuVln+0oqGjyf4x%SSE<`1uQs9ph``KB53~9!&Xiw-2o#W)myCcnH{90EJ~&*Bj@rR(3{)L%d$mD zWT`K(C9r~|Aa6}4(b<>b)!32xM85BdVHDMay zf$A}P4R$u4q*nBC5t?urKc~A$Q@cM(Pt;m<3bmE?>Z`iu<@YP1>~NibW-rbzgDR!H zBtzJX2zrM>p2cSS)YO0WWU_dn%mqjkv;f*^f}SF!k$OxUkbcj>qcUDe20_r{s7$P_ z1#dXW3Wl<^3wGBmz(ZmHlwVT<`$^P3zxh^DzMb;TY{0H%&gb~@MS)mtNg%OvDR9Lf zri(ukGx=Pf1r@@+23K_8N^H!THGwtvG{&o$dvPJ%OZ4?x>h|}&KbklQOVOOBcJYJ0p8YMJLOjS2+&e(Bzj+iUyc&|Wqr0R7O~2T;ZrT%_R~{( z$uWX=RG^7NM5Gst+|Pn}7oR}m^7|T96D}5a1bZReixh-^JW8H^qFN*diO!qAW)0rw zGM#uZE}Q5qrR#=MV#y^yH|2NDx6ACV%@2TzyVml?WAO@EqI-*J97eM}%0`0ldgKYJ z$4P{xS>{U3UwKX3tJ~}PAW-&!py6_@NBwrq6lr!m5CN6PV^% z#pqQXo!-6!~Fj0p-NZXB?i% z5)|LdB5}YKWc<=kB8&yB45w@^rfM1Rg*xbfH#wPBOZ==1rkUNH%_`rctI*7{ zx=HTyA0NGTt-;Vse6U1p1jdo%zMxu%NLasYr(7y}Kb9MHfTERVo?Epo;;5_DrNYjh z;$ZEb`JE-itPHlV+c;);JxQ5iPw-x$f-s{%^Qd}xOGUw={NNzXPhzmD?S%%rOQQ<8 zF-9)etX4fj6ts$UT$axyY{u){nEgP6@f)D3qfS!huuX*_kg)B7#0+DbK+P0!+GX1= zP&3X1>rS9}cGf&t^pL1WdT)C};wd(gpz|!>-R*SxtOXq(8VL@WJE}ymYm1Sg@$}wP zIwWZuveOQmMpRP1m)0)DM$OY-&IBdxgLc}YGni`HTQmT+L3t&rOxYFJ4BAyS9rMRe zsu*rPi(qs82FFICQ#d(aXhN?vp=;5%Q*%eK%xH*G%IC|PE~xpSJEH0IH{PPNZ5{E* z{%ut|LZC<^jOp5-Z9D!;V=l-YZI8T=HnB|~-%jF->cY4wV*_f%NRml1mWPwrjxfiK z1)L;hSeV-lM^&sT!zxb7O|em+h;rP z+Dw4bP5HHhx?oWjWn`^ImQm$eS>iBhmze@(ja#S?u*63jfMT;Ze*ZavWf{E28R2Bh zKM~L6@;V#F^nQD%v3#p>{&IPP)r5nwxWr7D`FLio>3n#HJc+EJ#n#Di_OQLX#|HP!QgZd34&cMnOl!Xtd!&LQmE~%}k z&5p#qSgluHllmsXc#*4Z77_rkz9aUC~c44r`u?}Gd74uPM z@Fv2iP;35jKh?apRiHj@aK&V>Z&$G%Bx#~1kp6&B8D@xoaSXUnOQNTH-FCHx-zLp} zU~3WVANbXc;v|0LHyAmZE8o!QEc2xh!Y#}nj3C8H(wHJUTh%JLi&vNY2{mseQ{UEV z;bbn+`+f|u)(me2iVqWb@LsfsFU8x+a!nl4jMj}P@#!I;unDO9inj=NBXc7(NnHuG zjY0Fp1`X1JD|XBkQu9U9F*50w(kQjoA4MppF!5|`xTFP6l*p#-euK$=UYkA9OAZl2 z^@LKmO6=JXMf*%1X$;3v%fV(-DvsPHh>bs_F91U14Vv0AjYZy8nhLvH zTQL8mO580Y*`ql=PQ(^H4ywy6|9QRW#Obc9s46FR*l%7bzxm{~xNry)5(Ty8#I1S_ z;KV;+!xK`3uGxdT5l*(lBg9G;5f15PZd6Rlqi6W4>zG}bMFD!ipY}(JjL{tH{2E6< z_|k&hqy~F#4!&63E$uLH0Y*lPBv01yeNcs|QX6(@{_4`)pS~@&sAkW9AwUAd zgncei5>c?m+hHnmiZINII@@J~{UL(9@n=W4c$&@bv{f3$>;Wnl_h^IHDvd~w1-A*( zBy?qmF(k3PNKH-b)fO8hmsg5B*8J?0!mY^L^4?#JJ+aERT`wx5bmh9;ulP zqLeBRgR<)@k316Q47Y%rNS+RDvBsK zHp{ydyHKj^f=S(|R0)_Z>{M&?o6!cwiygQUrXZ{QD#Yr(0@xhyUZJh}Jy1etZt6Tkmyy>~sYOT6e-PlunqQNzGy;S=WbaW!AHXuZ*HGhz5 z<0NU!nl0oKXJ(K;RVL3XM9@2hgdkdNG6j?vUMbUTwdcF0AqRhaE1ME3p_6~M&>*h5 zRiXuvnm^zh*un%-k_nqlzjkSUNrQ@O3e*g+lXCGT9>PV~g7PM_TdO{P21Djrk1A#n zX#xEYO#CO6`g~7hOt8-A3`I=hV9%K$CNDfT%cV3+RUfD+PH*-V5INYK%;_ z$A<<3pVb=;(FudzY8c7H$wY{}SGNn1&upit*OxQGv2BL}Ulxs#(@6{DrHzd^oqyjx zLfV^05z20!sx|>G2ZYdCQ_NUXQJ-K*mp*AqvRE#QNs=gp+B;5K&V*@Sw8$OfKAkj+ z3X6^w>6-(Lc|^Es77^|@`MYOI^?YubG?rNVB@}_}^O*$$r5L!f1ksCh^qQH64V zqHvTb;8rcl-4|RTu~KIQM}?d7m#?CGSX?WGz}K5vD^-vbs@fdR_7~D5v>PzB;`%LL z@S7gi*(cN_c(y&XuFaeh`#?T?9}oAi;aNDqZ)+1FA-vrU1lN2w zCWI9;$?bMHuH|RiIjrwA#7x?%ceNU&AUSEn%rq%FX^pPcZYWeDK}Nx;N`8JMrB6}CDJ*`3;aHy>MzEa>F^>)yfZon^Wc1OfM$9HnvT$c zWvl+H)vN2b)K4^N@Ake#pxqo>0i2bc%FI|AY1^N?+ds5ST(2w>8{4QFD~zt8~3^;LsW4ddnm#7nRrEf6Idj-fG2(y0=x%{MnEebS{#|XI6S{| zqf)Q#Y(tS1Xj%#zD64eY1gG{E{UTAV4BoBEnnI0gQ6YX;UZ4%HvK^&PBVvzGoy%51-Uw#fz?K2Lp={OL!b?Y?c)Eifl`xG7CKaPZ@pgEWvIV-* zj7psYDlTiQBo#G8mlw4KoUS)2tdh-Z4E|ZEZ1Lk%fW5x9swQk~%BK{P z)uq7lG4aScT(`(|A#T26fVL?8Y895ypkXl%sA%S8U0lrs;+irp>J3TT%BEEfb!^mqPNrI9kWGFM(N5QEoKFoEseHSw)}QJ<_c zMD%Q(q4?>#bZR^yqZt2$ogwgk?q;DDrI8!q>RsN9Jo3Js56Zl8=ke)x?!u>Q!DH{; znO|-PWkR>&@5TjY@y-15Zkzvzy-<~^u-a$#t(G>&?7v#6(;%svSIjZQMMzys4DA&? ze-}49Nuj>XtbN|dAj*3YB6?phYTmTJu#@s<-`z93e|yhI^zZMbdnoe;p9ShWe4zpH z7N5@y@9~+B$XfT{^l%nnZB2p2X?}=VJxkjbtiN^nDXwjAvp~0gZ@@S4S6mBl!9$T?mD!Wk zncsU^;EKFq!pA$_?`sZU)b`hs=(7eMKy{6a~#3Qb+cUFim`SC8=-KgkS#s%v?ZudmG?3jKF${i zn|SN%;z?pp)c{>5O|Qd_)NXMzr1a*{)F6)ewmoF3&*Cele325i8dBFP@S7F_))doh zFkS+d=4G-ozaATF7m&<~)w*_6ScHb}(;6xCHE%Ik5ezEb4B_%u9% z^-=~eWi@gDH}p3y$AttnD8Y62HzG|m_fAubv33Q?3 z{*&W6RnoBTYk|ZUjn-rX!uwS!&yEpzQ=3JKx+%Z2o8{tl9F5ZQP#e!@afNzhXncCx zw|okry_kxS4Ud8%EHB-m!5l&}C~RF-Z)PH;F@ZUTmyV;zZGvc|@f$Z6t9-_c^*O6e zqzvhc}t&Yd{R! zb3hC)%{M6=S%4}UO&4F?t%%06g(y{;mj#muA@2v-hx`_~FNW-Y!~1@B&#?ay?Y!$U zU$#tP5gJ|=BKYMhw^Xiglvfy=)|H58bnrWWdU)&RZKllz zyu4ek?`4s~=FO*Kf_Yg-L_yU{aQdza4afOgK&-sV#ZDS-ftI3fp7`>%SWqXT<2zD> ztik0?TW*rnO+VHs<{y}mqUOd13-oZ@*49PJu}MG2N99ME1;dxOXr=F{kMsmMfgjW; z;P$mm{@G&ZrRp+2A;1xI1N>q&k!>W|HM8j{HZ>93n26PI*o$Yh*oX^z?7)uU6>lt^ zeY1QFZk|m8upK1tF|e1ip;5`uR&7&nE>gE7g<8c*WT*5?o@_Z}JLQ`e&0kjF=O0#_ zxkjAd?WolXc($)49Kc{?P5GsAS#Fy+qZJWe8B@KvBLIo~K^sc2&CBNR#PR=37)Ysu0V_)D8HF z?v12)BoNrIV<0iWL>YK$9@?tm$7@VMjn<24O_~onM+qxm zQj6RmiT?(lcJEYg@Zm6CrEmpypbp`-;nI?m$n>ULyGbMQCQ-pQn^clRaz0&PfzQ0Q z(o(NX8hk@s5z@X9Liu@wd66Vm1+h>`uG5-S5i?tq_clc!Qmj`J#lBR&sgRv%5=BXB zgG&Y=hCF3(NuM@g6E^D{mfRz3X=_Dh>GKoGs3w4&n=mYA zCYB%n%2@~!*g1$VhMs|-?CJ9lM#))#<&`?C^$gRC!}IHn?PcmOQ2awB@W?zqP6mL@?!ZGU*9KTh=4}5D1aP; z3rx%FWv?Kw!FbX5>~B(*xm7^sw<>Mh5dU|NLSrmv-e&s$JpmzU|ET2 zHo7gquujkbZM|phtLwdNbH{CMU95{OUkt;`FL5*hSQVLO&zU{(inw5QX?&D4qM}hZ zxF4%b54ZTShB_lR%X}r_mcu5Mo95X_#N=DB$GK3srSgCdY!w5{2klcE=c0V-eSRy$ z-mzLLH0p#0@dL6um{go9`Dg{(pk(s1Qf}}=2ugBGgrT(+IlGhr{a+wXRK3Y2gxsY% zO!Vk(28@fvcE_B5XK_^(n1V4@Vt;XPSlOkc@MdesK4cy>O$dqoyhbjDsK)i=Y|%Uj z(KB2%!KEI43E6w(TWMCAz3CcadIst>HKJTRKMlGS;?)_L^?lVCEC6Caoxc>xotQ%s zcu@}dDzB-3tA=f7@kHa&Qra(X3kj?iy~Ja-yeu>74gm{rXAAXOxlt~?NOHz*rnNG^@Z_L|`!r4@Y)oOjBj5PaH+izKj9$2T@*Ik2aD(L6d{ ztR%oBO&E^z^7gt|m5-w}A&Exo+zJ^Bt~TJDm~oxiP4-yh7{9Yb)67Jd%k>I3q9!F?G*0TtrIRjS$D2&ScYS-jx5`h?&p>f<*wSRN;|*W$%^jy|;AJgEa#(COvd$ zVa=rzvA`@$h{idO3C4sI=@rDO++gft@)8ZHOZ9mgFM*G)=xteeqFp(U;-V>7GXQ%r zFw((G`pLn;!53eX$5XOM^dVM<(sKgxY?{30KE3yvb8h}i?n`dKExEEQxr!^eRY#v9 z-++68{(s30x*u^LA!v?pTdqMdEM$m62I&8fIQOK)8*oJm-=e=2x8pW^EO(N_pL3sf z!{k$3XRqsV?h{LH*CmwifLp^?IsbK6C2Sq}Z4#zV|BDo-3>?R<>lfT?NM9yQky4hB zPlF)F-O{vMRIfPaHS%+giE|egHD#UtmJxe^;+OG-29-e4ajHc(kH3<0193`dyYtSS z+on?8LMd0sZMa!VwS&@DDZe@33KVCHzj`dhUZgPhWbj`=Opbqp@+eS$Q2eJ#C~X5Z zFW{GRU(^!Za_*UI4i^!(oGAz8^}-eMU#I_7caz)!7g7$OB|>a&Nuvnq<+z>~9-y8^ z8`|$rwJRmpgxlGj%EmzZJbOiJx~}m{N|nuR;+~!(XoLPYK#y(XowIKbP${^z%lC@? z^b&q6psjlQc+ae$y$aOAT!-Wy-+vMDN)&$+nDV`1Kf8+Zm8010bG}Nx8;HT}S|h4& zw2%FTO{iLoEr)}D&TJ_6{jx)~D^=Eq{75c%}eUOf`gwip6#dS}` z`Opf{=?=y#m$TwtQ+iItdYWl@s|9+NTgcE@=j+9_dufx6-pm1(Yf@Fo1c3c{sy^?i`hH*iE?Hhq5J1*K-SBb~hg+ z)+@f$#vQ|4(JH>R6Sw3t;S-eX7FwL=N8*oDme1@x(hp?5%>Cs)(>lct#o9*u)E~CR zuC~rOF2h6RJC$u?9z}bY<164l%xA2x;~CjKo~2rCgQw;}*#jsmkMZl-l%HDAxv8x2 zswkiEVXlYFUc!mE&QGJ4N+^p+C%b5aJ(nvo?_+ALVbs+@wI#??JWdwKy%hM`1-tsLwKzVa(w{GV^6N$@pFA+c6q!@1LC9P8-6?!x=S=s+ zEO3c(*%vAGIrk#QajySGNFkf8Q=VBy8d=e#(jBw!Y0Ss1Co}OLmw4ygl5%K?pF1V7 zGT8oE&{~4>%o1fX-OJahCHq2It!9^f+cw4S=efJ0>&3|T`+ zTK5F6ezsbc${m|U?ba-Zdz62ezWEB}xu!9+SKHQLSnJE>t77z3DFq0+`<)K8eUn2{!Zafg%r~$Pr95Du9tbh8tP78I=1BZycol+ zY@=?#T}99F$iO$wT+|Xag*+aoxQTnKNn!@@557GIzSAKPesYy~5p8lN8^9N>~ z>zs8TBxsJHIY9IDpCrT11^6xybOF#bLDPU{XoYnNGQoT#<78(Co%RW~E z$<3X);KymC+6^to5-&Y3aNuDvvedfa}lLW{OU1^aq6dlu*=Gm!5IwT2a!j?vB=J9PDUo?eGY= zZ|nqPhTD!}Kii7V;@DrL-`D6b=X}4oMT8f$9QTX8t-QR%u|IeTy}-4uYme+?Qn(M! z>1-u)lk(n&@q$5 z-=i5(%Jr&A14(FL?2XZI#2U*1r zJwP0)eSc_|^cO{{Z67*}Hev2l0VPdS$u_y9r{a^3O9XFfPlomnF<2_e)?TE?2I?$Q zNln&OeXEeHL}muh>lU6DOFp*i5~X`wC~Qah(u)`$)YnhUsC1m5y@giw3?`zNIMz_x zkYUuZiXC;EFIF7yuerWy>`X+MldC9?%-@PTGow7d;lk+%Lb@-Z#w?r8tISqWso&S- zn9+1q%HKDu^MI@?xHXs2=0&AdcX$D7S*-v2?1ZXrJ6I=|o$PBwvChos?%?i06v zI?f2j``4nms-;4WheKBr{8B%wU}_WleUiXB^>^t z5I%`;;~vlIYykfL1_Y^8At+gy=^C7+P9c0m(+dJ$;n!r@1*wKP0Xq_4x59yW9~8Xx zb``s;rD#u$dqd(_Z`V;*DOJcp>d72;8+#Eoa2TU2iDUH*a^{ZCK;bJ=ZpA7qRoeH1Ukf9bO4D@!=Uz*cW*$_N}1hWZxP)RNbEfjZ@gMPpLev zvL8nJ24+y4LiR2|dMe2n>s`^+1h=Vsd=+KBuKeEbJsgf!%8##jc_-{85yw7htI@S+ zExL+)uY;F`y{IK8JA5Ub=XJm2RLt{z?EcHTN~^cpDfwVpJ~7!q_G_hem=D>CXEPnr zw*q{kayfIR8PK`R3PORrL)Ypo`m)Y$ym}}rg)o_@s;j^F- zJp;-e%bboK7*Jgm!;rs_t>X%<=a;E(=AErl6YcT%6y`a|vGMsC@A)^M>5Mt|(ez%0 z?NL0ZC+z$?s=s4g$`Omd0#3qtJ{PrH&}!mS0p0ItItgk(uBu^Nq)v~X3Z>zcYZPZ& zdqdAv%FTIIbZ6jxXSNU8Dx<`evieCM_UDl90MX6?igRGnxlTTN}3JUpWo!OHNFiqx+WA{`8%Uy#31QQASIdFyq8SIPNgMhVCJk3)o6 zCx|g6Ut*3sM)+|GT?3CPWcqF$sUEdPCrlT(3y*U2|YzXgxGemwyd$$B?VkZW8sJ zLaB>@xD1o1(-`Ea5-2dYIEuRPccxJHb127@mT8U3F@p4xg8PnJc$l!vWk%5UQ>fh} zYF9?@NGdMRC~Csva}X`gbss~SIPWox*#hOq<(NcWbBn{u3C7W*5|{g8QmJ4RwJV?x zi%L%;D4*~IZovtPm0KL497oZbYbYDHICID$Xzen}#4RJ#R00JKfexfh{FQNhX;@_yq0)0`uPKzS0GVM# zDPs!MJcia^LyTdRiSyvvkD{;nt5aw*X{R!3%w<>uWvqj8W&Rk_o|*#B977Kcq1I)k zqH(2BDeV|?8UqzEj>j*Li(znU?r$z7=QQF=Br+X;Y2A;OlG6AP#@IPf?F7cjB=Vnf zGGj44mC&z)N)6|*(>JPZGK{jE1MLhWrzzBG5VPF6a+NY#d=h=avADlVh|6>#H5o#y zGFKTvSL#BN|pv{#I80Gyz_94${Xc>dxF}7@T_oD}fQr>0_wfFy!VkX6QliBAK<$ zc^O$|PH8dbD5Kz3%uku4jbg@P{#4L-Jf{lxT?c2Cb{fJgSHNsE2B-)QH>&+I1PN^j zWfHk%QfGXT>BhA0ikOjw)0KcLU`zWYKsGx+_KZhP0LF-sPH^ie=@fcf`g9#-5*ja~ZPtCNNtFu*wM>JkzpO*Y zF&@W2(Ic3X*C4Bi#5f3=Eg|kCW<_bI2`@#DN0R-zN^c?u4`B{2pvR3q3+SCe<(@Kv z3))UHbB+PK<|X=3lzJGHS%5qsYq7GHXXbpudHPfToGeo95SucO>*QG7g==;6g~wBV^n88S=oy`&+RgZ&|y&N8on{4 zy)%gxA4iEeUKuSh1&W!}oW@no6p8s9YBmg6coHQVMZ1w?za;169KPLRM}5(y!)1qE z?x9|HqS4K#el^iwUiuQgT||vb%F)IleT`@juBj9?fnJuiegQEDwO>RA{t+tMm)ttq zsf?P)`mn5hEu! zc%-Zxin^MaQYm`^)Hn>jG7K6S!E7YCNt;aoCoNt^TNbnz#z1|OI+LD5Z%kn(UDpvb zjuyAvh9KvTDwUtZ*cj59mOxV?qfdYqODNMQ+HL~*PJwG!FARYbj6!0b#5_FiCHAs@ zVG2ECty)yRU&K0c2%JiClNo>BP2*f=mf}y--!X!P+pnXhQ{onB zAa?(yrh}l5F|^Et^2D-Vbq(scDxQmngz zo=@YnZjtLXt@HIfT5%HXB;#gASJ;y%)q-*}*{hgT4l_#WXO$bvC>VRh{Y}eh9Q`-` zNI9+Pm{|Axs-!c_sGmRAFgiy;k7ca(O5p0_=yzG~l~raKhcq<^>M7|eYZTmmP2~ik zo)L_yN#zwqwBr!=G$ud^6QEw%J1Q%OlDV#=>xiPR++_c25M^4&$QlK=%H}k(Z#j+b zTTWy9mecsd=kzS!TiF4<7o6RoU&M)YLr>dH8`+&}6?X+=riODg)~WW|-yduhJ7aaA zn@8Y+yF{_W$lO5*1RvjzbKMoa^~6vj=j_N~+ARSmnq3TuZUBeQy31^*pqp((yyPwb zTK2eE`o^+Cd`FL=75XwkPiId%4#I*%P&p>riZv$j|x4=OgH8sAGwOLpZ4BkXeWidyzs*xJ)YHrZy1_ z5ES$Xc0dndIo>K1KUi^C@S{=w+n%T_bWB4-bw$;1Lsict)_7B_&?v8@8d%~___7qB zFf1wo%OH~yuCH6|CN-wir2s{aOGFS7I;Ek4YyGVuCHhs0Ge`eLUFVjQ3+Hi-b01sM z?{Bpo7z6(BTUyjwP)xSSHQ!kqM0)A^TqbRH?b&txGD;I)p^gbWI@<4E zb}v$$E)!J4)!I66GekuffMWr11GpvBo^ji#BjYY$;4yB)iCPj5*%b`7iZU9;S$-9t z-=fd2;`3Yd`Bi*=E53Y*mG9hx4PIka%Tb%KLS(px%M^;Moc*nsq7UuHYx=(%iQ&Q#SUf8UUm=pgmL|mRN7|MlUzCex|!mT3)#;_6qrB(rRWMR zN@VpfM#?07Z6@%L+^Y}vm7Rzpx6uL(D5GupJX?Rwa*QsWd^CJfCLm^pd(k&!*|ehu z0{F^%Hh%Lpn|6kdXhHRv%c}U9?ajD;D^2Abh`39vq!eA&C;HV9I}(rBB${H|k5_kq z$LeJ&2`9_tseyj+b+V3W*%sth-L3kjc&Qa>4g$x0HgD!WfD z`n+Na7Nsbgo0c>DsW~Qk{e>U$N_W=gB5)*721;{L;kZdq6Y9Q7+~yVHByKt`vthGl z0z?%%gvJ;3bKTY>u6v#O38K>H(^t>i83t&ky*1QZlnj|~4LT8tO1_@woh!DYzDEU3vupa?NW%TgH~z$Ox7i)T3ol8Y;j}F{cknTa<&1z;Ix6O zXe{fHSlz{(ZN#~!vI06|Z(!-%koo%atxaT*%`$bwNeQHK2%;2@UrMQkArW2;}(4(71|F-N>-L^m7QH-(KH&S?%gO(Umi z&1stc&)z4ep@+}u_FoT{$Py5m-1nSw%UIWiDdI(%l*5FazBQXf6UG{}n-dV0**AATG~f7;y4ZL-Z|w#?EK&PtQ$Or%i?7iCWnBNhh;^#0VdOHZ82<3h_S8-NQd<)!r{WmiJje(6!j?(S z%!%tRT#wRA0*}WjVp%jjF<&8fo}W$ah^lJ21BFg+{YcS!n6E5 ztTyDrSJ}ySOIUT}x_Rs7GB#zVy*#=?HF=3wbMtAFQ(<+nt{XTu$4sk~v!Ju>RcFSj zcyl(LO9E-;x(kMZ&1(91KQrP_T&>-c$M&3`S+ZYs{~gcfw+W|s9f zwW^^qb~8eVd|J1*%r@pZ6uW{Oa80aW|dWvdT@w-E-N;yf2X#;8-G3bDvf5wxb0pPOFwb($eYv49CIW*3D_zo&bO zTJrX9u4D=w7w=x3V6;7l>u)j#g#80)w2z<&CHF;7xz;47`IlP>Od?`ne^MLqRa>0pm>Ky%@CV6;)xY!Iy%dX-woEthE= zqCQ|QPsXd{W&`T(v-2)CNZxK0-Yk;ee2|}J@o-mof8Pw>VR{vXFEQm?@aJL{*N%hNbwA2X!QOj~5HEgPNa7bB zbcJxAd_MJl)(7{=>)O3n2lr0>0AkaJn)f};(5jg7fceP7q3zu~o0ix>yYE5ttI=pF zW3JtEV(z4_rF_kWb6+!MqhiX`L#MnD^A+yrb1g-_0i2iyLo{-Ue$TJlbAEN4G1K`> zkf}`&3?iVkQyt;%Oge{U=P&8^r$c1z?N{q(T7`=F)O1KI6QSuCElh-ds8t?K>-*}1 z#M;Ld{^RMjni=1AFVEqmmUETRqO%ij6X;i(sFusM>Lg`0o%=+)-SGGUg|tFsYB&9f zFvDkMO)-{Wc|62?-ya+AZ_0i8Qfj~cA@V;H%QEp!m%AcV7M51QJn@!mXCgN{vkpbG zDqn51u^7t=^~`r3sN9R|P#~L7MN3okomADbf|F}~a#?oFiPHZ#lp#e?mV0;&lI|Lm z1xKMEYwDqENM{$N)>Gm2+(dS5-Kyk)yHo*FT|R0fE8D;4TW-C& zPlY{_^nOSzQ4~QnVo=H+!D+$GuT3kzs;JDm?Mv9absc(p)7kSD&4waVV`DM2Ntj`U z0^$>mw7~>B$B8$-`I(O}657$ad-~q7HOlHcobOIIX>Y`5-L}7^ozly$h&LCx*J^gip3BEaouc8z zamC-@YdQ}DZc*x?d!-J$PEq=& zKI{IH`y7=v?4FvB>G<G?`}8moP`plxmyL2yv+%*#AZ(mnXXs6(;9cZ_1;)^hwDMU6>9|B_fn&8vE9ll z?6x+q-&)FFZTA%7_53~B_}qhNx_PbFXWM1~?D2GpT<^b?8`>haVVz68SQfvX7G7<-ZypzBTWkgd(Jf6l ziLyAEFyaNAJDC;ulhixD549-1`Y21q_Kc1<9>UAEVaamu1GtuppN&VWVXR_dqO`ny z7WC(^4f(8GXp-ZL9o=3Fbx8HZ=dIP+#dy#bY`MX7pG_2_4);Pkb{TIwNS#}-$g8c! ziM)@-+wOb-7B5Qfr*mObXYSQ|=h5ojmUh=eTD8u3m({K0_cxns!nVdaKYJ13q3V*{ zFPA@u+PvJVHhjVDI=JOS)Z%)()PD}8Z%I{V+uV*o9)_y!oyVU;O)jKIVOplW|JI8i zrPF33|H17hpTowz%rHYPH}N3CO!ETYz0mx|ds>s|p4;Lt$D2;+FFoWo*5ae&nA*zP zTXABWKa^bhw$+=9!%Z_);=;B{^UQqD&7`qbuh>crMfopQCiDX0saVNSMC_t-A8VDD zXm=G|)#uVO?HN84-A;vxlqK(k$v8@vhqrFr?KhWG!eh zXt0om3lKh^PAz5^HbJ27$>!qoP~X;STX;M~?fS3j~Am zPc?_hx?8${Qcq;dnL z3=B2LzR&XHsa9W)OU;k}U4oea*0;D!{q;GoGt3X(vIqX&?5amBaQl;|Y?V zIZEyw{=w$&HfcHZx2mh%Ddk!P?Yg+$l>3?Vv+pwL;(V!h9aE0p_Ba#oB?c|Q&k{TS zypvN=+qcUKBSB|8=4Au!dFQ%5j)l3q&UBa635?aSMdziV{8I806=&w5vQsQODSStF z8c$t^y?GPnp?lJF%9dS@*#pjqy_b#M>dd#*bt&6pdvNi^G}nhjbN$))OMEXnhyhJB zef!M^DQ5el$9*dDQ`R*?ju*AdcCf<&VjfFh-)@%8VkYR7IIjc}N~_m2UusBi;)^bP z8=2&!ol&DAe1;su@$;I?7Xqr98F>$(O0w@|jqTwepNT5{>f}X!$?< z$T?Yg#vd^!tJS0D6!Xk7`uSmbCSQ1&gdNvGT!A^~_zKMo{THjR1=tmwfe|965x!i* zwh1}@DETHSKHjHV6qQA>6E3rq*aHq_63e6OF3hXOGegT1nsOR?gq-+LoGm}H-AS=9 zJLyKW?MI!xVY3F?m15g*61MxM&_nVCd7U7Z2}az5%`L6_E-hi~UrvugPjNnv#tTMZ zV{#NNJBrIz4?kM=E2j~)P%Lxsqvm9@`GdZHbpH`N?Cp>~%m`*KC-#>|_Nkp7J*Nq^ z_&NruU=$-*?0<@lWwCoX>Bl$EWJM?M3dma`JnFLJ?m=Htx*v@{_)AI;lGB5|#`7Q} zc>0n0ZU`Kb`%P@YJ{lG5PfjEIl+)vi#2NGWE>`%5~Yv)irFuok`>O{Hak$G3>5U-&`R&m2KuZ_X@$+ z+(lK3O@*GEgMv2WOwrPvvU9gDXlr|!^ zfEq}9Pb1YlEVECiT6`KU8*}AZ{GWwv!@M-R9vgQ1wXz%8x12^FA*WfGg_y<4c2o^T z*y}r^pgEaGr!o65jV{1Y1h@4Jkze(V*%c8z{~y$I5Zd`4+E7rwuELc?Lc{bVG5@;UwW6m&mWAjn~?F z$+W+s5NyKBnFxn2p`Kz+?K;7Bea9QOeTHLvQCqyZ9O1$XpH7IJGl$tqR!)=P74fQZ z5_CS2q55$gl&yhJ<)WPC?wQkcl#@w7;}|b9nv=XJHw~Fg_I*YG4QDv}1f-^{EHwfC zJdNGIag5)he>36HBXZyHWJm#3M=6X?hxYczQZB zjRRbk&E&|}%T}3?S5#MtLJmi>(=`M7o5ClyP)f_QQs@0Xu~<=K7kZ6xA5#DufvQW-!Y7h zc^E8WSz*@6J7cpj13IU()F@VAQy80Ly7u8Yjq{aPAjMp$`|yUn{{fqg?W)=?uc`ov;zqPRl0`D7f?YV~hTHGXN#x=iFPB&yjuKzt&tLXk2oayXI^c9+3tuBRl2)>r1*OF9pxG7_1KfBB`hGKd+e3VQk3 z7gS7JH#TDBZol1pi{CQeQXz2Qo?0<+^`CcH70~qE+tyWtBITK4la7)$buY8@8yeT$ z=@yeOa$_Lwp9C`16)5_I%kEZ{inda?#wHbujbDWi1xa_B=AMf!3Vj|jnJH?vGOQ&x z6@ms$tG+ce2YcEH&E;)>+0Na5)2>b2$TY*lSqS4QWrgH)1KAY_>l^gk;m~aESbBi5 z4YWZlKZn3R$8`c3SGGF?W_=FKOeR116&5mrO+$HPO%5dIupv3CLgXaa?Yu6`gt1J4 z12h%%i)?~(sEpR+*;acS{M3LD%zbx85eYV z<2IYqsW|te!TjYq#$C~C1ICtaBu2YSQ!zuim(@ENB4WT)G+EoBjdqUfRC zKpA)Og=V|YvRJD`SF23LeZ$#ZVs~u@!sJ@CNPPI$Q_^|hj{Ox;7OznY6d+0#oV}#9 z>aI~gT*4M$^XMxp%Mms&ml34pNN7LPE?4*2>{zsmzaMd8d(Uj`hgS+rwC5OOm_P?H z&gE<4UdVKR`TNg)>1)6ArNv)-><91s>OcGJ@3;d4E_ZMsm&4!Dz?%~{6$5@Wgt90E_e&H;Dg_OEtH)Gu^N zgfH~smzQqta@)29y&9LV+bmtCf=lb6KoL~f?GW5Okdj@>lfbSUa zo&n!A;Cl*u`Je$u40uex_0~7^>j3f{C*8^1fkV`1hfd~tx^jl1Cb+Xleb()qLR|wL z9O5)2N3@VX=?--vdIviFXvfK1w>xn3#GN}w`_CRC=;+zAon0N&RNY;jCn|XYI;rhW zR2V;yqu&EvId09P6p}yM)x|OT`G04B=MmRQtv;XU|M`Pm9r;fBME;<2C$=eVf9KId zM0XUotE=;DM?Rk?Z|>~zj!ws(gD#h&PamKVN_w_~{Jp)$x(@Z9xc%ik{qH}UKQY)% z*$~`!=chrMck+(ux$n-;cDs%ag6JQ0?b);J?YsRZ{o@ax zI@p`BkpC{}u9-+2pu#?~(9)(BG z9;NS4eEtAa8IwjYs${GM)Xh~C<^rIH3W0G!+=+|%^Lex}h4glHC{O!EP4G*W63F9S zou2C<#t(EII&u3~@~8T4|AGHx%+&xeGvo*-U2iHPwNxCfr|V!(4^@W#Q8VRxsDDq~ z`Q4*ux(NB(-Fa$=9?6|6@$QM+-xgN<6Vy~RlBj#At*MQfB(1Y=zk9UnKnFgGB=6=8 zrbIM+k9QrU0UB3m;2_57S)x7$`nZ0-oA2rAwn$7E{piPTcDla5>wq!s?C)XMapKM& z$iE{*lOJ%$Kj8RpPfso|dK$mrD1EoTmS@_z{WW-gPdvZJo_8M0=iNatUtr&Pj5!03 z@y<@>Gh7SiGQ9-c{!>)Fv!nBn07PT`C*47!lWj_Hw39L3&a52QMix6Jq`DH$zk;Sy1M)O?lcIZxP5nsaPJJ97AAz^o@O4vw{5?i|Soul1czB}Ke^fc)mWePb! z1LfGw%Jpl=^y@?ghb-jlNc63v=Kq$&{1!Fb(UA4G&;UmOe;w{G!2LD2@0}!4 zsPuCx`cJ>VM*pZ)`#ZZZxiaITDiEo5(O~Q+_SW$MM`QdbW`v`}=BWtp^)ov^Xyteh zMg5+6zsCf1sD}r3-<|)r@6NwIM)Sw*pWqVGfBGk10#8JHadMf{{}uzN)!ie9ySk_p z)ZqE<9u0f_7PWUzPY)6dbUG#_8eTlp(5T~ihyPN~bsRlHr3bAuM#L5QWy}wD$)`E& z#GO;Xp6a{PM}6skXna{xj(9{Q9SJ=Wr|8mOmY!(pm4rP^!oQ8lu$#cUA11J;#~t9J zVov1wC(o1JWBCK_fO9lY5OXE`WBCr(;b=0!v`CFeKQxDN!oIuUxrC-pxI0Oa>F3+@ z5AE?Y?7mKfb)f%H{t!@KL5#2T-Tf)h#LvKOz`X_c=cs3SG*ApGet)Ou0(U=`{q=+W z?&m_R_p-ks)_Y6^9T=YdJoxXfV$9!N<*|B~x!Y;3%-PdjJYV1KJIh16Ohdo_#Optm zr~mYiEAh@K&7_pynX@S895R{1d~utZ<>}LC;IHy1WigH^ZM&C*J|(`syZv2E8{D>C z2mJ(3Gtf^S>pGIxKgT$n2|NHKYop|Sy{eACzntS)1=ZS6zb++&B5d5Fy zmZY8->+9;FHZSLC_)n31l|NA?$q&AK2MW1G!cBkYY2wo)pyl}&=o(EQcczH}lse8F z&vjr(e8Bl13i^QS0GlcKnECHN-k~vb>6jlNCV?1z$8))KUI%(|EJ#tbyr#eVLerN% zkUQ8z;k}f)--kU;T;tAJV@0KY&i^dU3Lb-j@f}p>)^RH&OU@j#wquhkF8i zJQYO$dwXKv5r~Ldq;Be|JEaqMWWe5;q-lr;X=hIlT!dLoxo8D2a#O5y+=Z?li`G z*wgnIb@gE$11DZ5LG1OPr)V8SeFr#zhz@9c@-~kYMDOZ6qQJqkL^*RT{q<7czAh_` zgNK;=kbF!cYY)$ShjjJDgZ#~}!2K!u{@D{49asa>KcZ_EO>!)lQ|oa5gf6=KZ7;ro zxvBUjz^_aA!Mu;$!L=Znv%@1EC*IoM>AfNijPA3sKgYSt?OXXnhmLe% z9dYOgi^V=5RiY!{_uthz_r3E@FQ&$$1RXlm+s!ie0kD|<13g_`XFI^`n9Fq>?Yp~( zg%lCMAuP1=SSS4i%bPT*oX$f?`^g@7C=&6DMf%rqDBp3&&$`RJ3}kBT=qK5u>oC`L zi83Qx|52$`m!g=%Fkw*Vo+RM=xE-W8^oOQemO@FkqPgb4Azm8vA9##}gV$G?0ZRA0 zevAI)4W>pR${;eKR5Yg_B(V)+iH0DLioUnM(u0M{SNgiTS(xj)^U1?1s2%2E_pHt z;gOQZ8o7%DXl2>gmG{(jh^gxc#K70TN<;3eycknP>7#oUjIV&*H1F9e*vW+ z$+e@0Rz+Q1{YTKEG-dOu`4B{)jw3wkX)>a3c}nAjC2@cHIZeMH)QeWNU+`n>^rP5@(|bSY{zk4pZ92QNKA!KV!?m5BMv*pTp~goVbU`{PiKF#rz@{y$Q_vH@hL;- zT^nZacJMIkIF*@HcIpW34cLSGsm;M=- zdDjN*yMd*=+YvtYUiLS9?7hc`27Qt|=f%B%666C@!PksoynDKlTfKHc}&X#!bvIZDD=-y1(n za|pH=-uU6;)(&r!C@O;I^Bi2@$_jL z0@&0z@y0JeTKpstKP}VlVAWFYKT2c&PMH`Fxh${u^ZM)TQIUP+!N(eP;h(Oznp)3ytB7W*IEIJ~v!7)^3K36Ug{vcyiS<`*@edHzp8 z$FV~kdgNIC7$%KlNBWP6K%4J4mgk_n56b%>!E=U+N5>vJ(sAqvBjgMG4awUg9`X32 zR1WfWs_fixtW(1^Bi;@;dZG+bzd~caSN|OD>Nc>KIHnRNpgeecht0}IYRz4h43cp;lugE9fvw- zgz$z~-`!Vx4%6b~?yK^TP$ba4%2W1Rx8)yK;;q}1x`Ret-&@~1eY*e1iMPIrMdVxG zqfysGixXP39HF_5oB8bzpLqKXZmzeV?>KanbNcdG`NuhZ8GAv9aN_MjxU>-K=q5l6CJYp`tlEek&|@u)~7)RZ-1p5oSA91 zi>deY2e8w2XZH{`*WScT|4ffeHJ#LEhx$YSjsBeO`o7jg&JDmTh6B75$e;KEmH=-{ zCBM#_K(x>n+@CW4<7MLU{AqHi56)sM?VW+Vt$mnT=DQy2#U2Llt@BVG=;*brj9#Ag zsl=zTYJTUp9;b@YLZN9WAoLq>zlkyMjV{^NKa15bI_OR8PQUpbxPJ`yduU$f!QI{6 zfFFZ90QV!P&0F8h=fCl#lmF(o&;7y6`LBNB+K=}Ae$R6UbI!Sg9qjOC0Fpp$zs$jd z>^#QKDR#b(oyXZZ&CVHizMq{Z*g4BiKRX{_=Sg-3*m;VbzrfB1+4%u>KE%$y#m>|0 ze3+eQ*!e+ro@M7F?3`ogJUbs{XONvCc81v*VP}+`F?Pn;nP6v1?7Ym*Wp-BBS!L%6JFl>F zm7Pzs^BH!2h@H=}^Eq}t&(2?B=Nda-V5h*&8aqXHO6-)`S!ZX1olSNs?0k`(>+Ec? zv(3&9J5_dS?7YfOot=c820Od#++gP>JGa=`W9LWM`M25mQFd;#bBCR~?7Ys-8|=Kv z&Rguf&CWaQe3_kphn>I7&cDmfkFoRbvGeb<^W*IN1Ur9)oxjS?SJ?SUcK!o){u({S8tU8X@{-fR&H;7~veU^9g+9f(@OL}dIlxXQyr1M;K1smvgJRPv<_9`_bI( z+>hseF89^k*K*&?y_@^v+@IwBH1}t@f0g@Q?*GgEn_N%saPE`2>D)|iHaC~s%YBL3 zf^vV2`|wNb{4hJe#m?Vm=YL@5@38X?c7B_k|B;>FVdtCd{4P6xmz}@I&hN4F`|SLE zcK!i7-(u%~V&@;S^N-m1Hama7&Oc`7BV3Gg?3`!kqwEZ_GsMm?J0t9jvNOicI6D*U zOtLe@&U5U1jGgD%d4Zjev-1gdKFQ8BJ3r3OPq6b>*!ipMe3zYn!Op*A=TF%AGj_hm z4)gtkpJwMX?EDZrpJnHB?0j{+_iG1#nVtWPo&TJjUt#B0+4(Qn`7hb|b$0$McK&O2 zeuJIgWaqzO=f7p=YwY}Y?0lV_|DK)SV&`wO^LN1VdsBk=R55DZ|wZckUg@PM`t0&o29Tr2F3Uf4=jb?|kRyo^vl?32+lMFT>OTh%kWyPysCf6X3{0 z9esdB)29KS0sK7RDBu?WzX%mS)_8lVoC1Iz;!03QcD2ly$#CjdVU z_$1&6;M0K50Dc~D6z~gxiGG4C;3>e3{U|a0L%go0;+%-pbnS=%mWqx9|!y!z;l3~0(=7S(||*OPXay# z_!+=q!0;f!qkzW%BY;uB2LX=*o&Y=v_z)oS0fL7B?*(iHybthxz{7w(Kn&3T0jm8t zObLK%C&4=a?*zOHunBM<;C?_APy^HfbAZmr2)Y2>fV%)afVF^ifb{?;;BLS@fVTlo zCJFvSlF0aVnEoS7W0Pb`0#bl9AOp|<;vovd<5_lfEmC?0Y3@&7@z_;0GI{z9fiCA`T=o3;wa_OdyGsE0Nw+55U?5GI1Y&b zbOUbudxBR1uK`{MECFr;mK%+R=_X(a&;U$f;Gtl=q5@iY&iO%>Hb{eK@qxBwL%d6B;z<0YEtVyBT=s5Eb}3e`q~7Mkx0wOgn?LR~A=bwXV) zRHsny7OG3A?-1%ch59a`ZW8K!LcL$8?-pt=4P1ok6{=6DexU}08Wd_ss9~W-gc=p< zLqdJ8P`3*8eKe90YD}p8LLCIa4TA)$^5H7V4TP}4%q2vrm6UZG}%N+tfV zP>Vt>3AHTLX`wzN)MtgdPpJEaS`q32q0S2RpirwqtqHX*)On#U2=$Xf{ghCDMyQ8{ z`g1}(BGgX{^_Wn9NvOXp)PE<`<3eo^6KFW2s9lQMt*Gx()cX|Gqo`g*^(m@fQ3Hw^ zRMb929ahvw74?IPI;N;eMNKJcT2V8KI;E%|R@9=RmT2gy;@6_84ppUTvPV_>R5hlm z!>anIs*b7Z6jcw6OHC>b;wonKfLRp|RdFCfi$gUzRMDl19#yPW#X414r>g5z%R1G% zPPMI5+t;a%b*gZwyY{NXd(}txs)fDk)L!+&d)4KJN}}0#50=Xbo1YTJP-?*mi-EyqoV3*oAo-+Y{IT_X8FnwLd}g7}M{O z=$gI=_-oIs7D^6xhrEDQzYC5jC#mePkHZ@(= zHoNj#xl~T(Gs$9Rv+HrK2=Dj#ws`Qj*%hD8m8Xl^`|{d!xtPptb`4Lba@q6`Yx_qF zPiy)2rPJY**FQd<&iFE!OwhYl8C4x4PiLnnrR;b%oh(ywin`vV-rK3(>rn5_w5+dG z)b+zH>t_Xt|9X#lZ>ze#PhD?UHmK_l$}s3IJ&bjss31 z@M*wRz!DXsd)5x0Mc7}4={(>?ST6uBf&>Rl=Kvu4z!|_bkotmZHX-~Cz;!r354Z%l zg47S3WjujY>{hd}7mBPkWLYEfyJ}+uvm2~tV?U9_tnVZuj#%J_lFoW4eDx?20v~3# z0>Gu&ZGd6G1c0h-Be*&XHq3${vqwPB-GGg4=C>bsM_2ti$U1n$sFT^4qMsYknSXV0v|Plj*}C z@j0Zu6@Z7yvlT$38Ds+1O#l}v2a+-i4%9Xvy;DZv4}y3J5Wm?S;6<>R3RgCSq2^!# zy95!36d%0YOyP2~c$b=PSDU3|u3G?L*g+Pj4-t<#=u%NFXc#pRTI)3us%GGkYg!LA zO=#Iwh(>h^PzFFOsuciOHILR&Ma!y!&gwA$nst>uP6E(&=25hHZn|uRu+N`{GN?kD zt7j1qt)qI59U(JSRCg6ks|p2DJq@@9K%=Q%2SDa(ko0*ZGmkcd{ZrI5B7g({QeFe6 zYY_Ds7*j*ZYAAOt2SD*^C{Jw$fa29qfEtQY1I0BIZw|FygCx{YfZ7@Og7g}icnx}F z9`w#b5zRv-)S%lOpu7&!=9dT-pa&M9OBQZq4`2H~6l$X&e*0FiYx;X0_QR{nD00gWK7R`Y%bEw=oux$Uv=_07`EGkr%-81=Pp_5?nyJDizWjP@{9GxH(kZ9Gcx6s%D<^IN*SB697rggJZK0 zLwr=g>=F{G8i~wa zMB83~2rq!;3(%em;PC>YEP%5M5S9h>a|;lM1=RNf>VE-(u>f&cfT%B^mKPuc3y|#v zu2EF~0%~;OIQ1p+i4H^?0#ZZ!uOY`8dbt`pxEkuM29;GuxH|M|9r9R*j;SMB9f9jN z@N~GV2S-3Un4*(%%A`r^8CUJ@;nvq!FAZE_s792Y_mOK;aDf+S+Enlo44|U{yfmeM@LR_ zh+`IV!p+8yu8$&3!AC1_0s-e5Uf`n*Eu8Fej&qzsz)#lY3vJjaU3tmU?pisNCV9%{ zZr2-5cSv$hTGr?%-PSe_dtiV6Nv2IzI#n6&lPa>uU1h>gb+YrtwfZp)s%fj0psfv* zkhq;{mxok%$V#HAI7yv2olZXVvuKg5JK4s}cRGz)n(wg~Mhe8fmQFMZt~gmeRMB=> zE13eapYIxcVLx)W_(AAEnSE+SpEe?xKMs{>M zEV?skjTL7noY@H51}VHXodk=1H%RKR%KJ))PMtRBGU_)wW+1DYRiL$Yi@x*!^H6r5$;ChtTnB>6zE!(!y* zTtl1&jg&j*tlKvjb_=K8eZZxkp>#=7UA(;>DS=5A-n83;(qZEzQ{n6cfexM94yW!} zk>sizhU?0L>LdQrvLQqbGwGQ*FOIMC;4C$E4VDeARAHQ!?4-2FdPPzHk(fRCa%2$Q%;MF5+Frkve2B+f-^%D z{8)#Od)MW*W7^HmwmG9~J2!qw_9dW}!S#?LII=|42yBCV+KJu3{LN zHx6NHhDJ&otbFX^B2mJps}j7K>o7Hb>|d5{0Vx>0@_fQ!x>;D@R@wsFSuNB!MlZ|< zPRX;hr`YMVOyo3Mu1d>Q3-;)pz=1hdurHB?_t+gcfy%_OCH<~PxXiJaq-BYN&e~;= zSvx0odUax_WnwbVmu0M%nY2Yo+9Jm}yE@KU8RsnfTv+XMLHg*ot6Z~}S$|RLm+c;T z7Jv^|b$Il{3T)$~uC7i>7JO;7(-J51ygb|T63+5+!O!aV6NoWuUln84-VTjQLEudS zg+0}kPg?Yzkk<~V5nAM?XHYxqBL6NntUl&s#%QdwvmGNL{RCAP?;c+rh~xK?Bep!U z0gL1mku2coY(O4c39!W@EgrT=tvbt1VKySe6Y{};*$LS#U@woQQy;Wo19O+&S&_VT z&wHrj>0Ptp;)LDk!e$fA-fT9rVjPu4zC^OkjcxX2-mVL`!)SIwO8q4aI(SDe{dW=* z*}y}%6))^)HoWY1>?k$MKJF#fM%WxE%<=@5+*pfznwb+_Xcjnw-42qa7M^?rR zv%6QBrKs1>Lz@s%(0YdV(v9-wf4SYVQjsH%gD0%|VJK>|yc-j3mKbX0W6gGpJO^*K zaPPO#xsk?s)k`RWlTQ)=EgS8~rFx0$N&4DX5%j!Ch>e|iJ|Y#sMIIdCtOIgHnp~bM zEiPflc_%L30eOt+zyo|hka>Pa3YvxchfbR@@SQ#1CQPc+7*~AGPPN7TO85M3Cy(^z zC!CZ!M$j8AJQc9xtX#`R);eTDBgnwa^?VVdpBCwYT9C~?qjTpX>*YwNjfWBuY)$WQ zwc2!}4QFLVx5nK;eayl`)%uvq+@soHvplGFkq0~VlRQW1p1qE{UB6rOJJxn&_5(Qg z*U6FrDlX~wi+tn{wRaKQ)}1(zuh0$WAD#MWEG^Bo366Z zv&ZH6huPiCHM7May>lJT?N>hOpwt{TNAti5O(?85o2=ltfq;t~oYM&R1*%z_jgvii zLf(eC`dcxwgN@tU!O`x6&w()qM^_~1;25ghZkJUs{~Sl3e~vZUVd~phlV)IWac9XP zY&g2hynB@OMMV~=q9=05ko);VHaS)&lWg9bWFMs%ng-(&n}HXmzpU( zXLT9OWD!4j0yLv~5AMSWY=>QTmWRQ2-E{B-7aPYQP)O&hYB+d8T?4T>c!DZX{#$vV zN74CMlx(wS2U3ELB)!_En}uw;VR6 zH_&DiJg4oRKSF`ahWfAOFrSgr9Y}JI1BVh2i_`6%KT4tJc`_|id9Ks&r2giZF+u8@ z-AXfPVbP~t-PPw&ij#5{-CaG=HQQ%3%oxaFnne++r<#It7}CkTSoL``4*NQIO6-)K zL-j0otkttv!lY_v6-PbS>#m~GYs8AyRigB|Th zZX=eVc~7zEnqMRqD=Lk|YbLDU@Y(~GjW)8dIyxL3m@wIGcC-Yuf&&2Thh}5r`KF2^ z*u*S~>ey(qK&!URf~Ym z2?j@ZtxUZDdDM2(SV`WkY{29ctgh{2zSnrgrIuj^)-rZb>d>dBq<}0)2_3ZqeWwKr zHY(4FEG$r6wRyvE%E~o|oZ4Z6p{q7!c<*K&IP|zJ(kP|U#wXEjM#xdS3p%p4ud6m} zvvoiaYB`i@jAc^FhQ(>?s%_H=tT2Ji1dhpMow~hJ!%7R6Nh+M$3@N7OesI=4bZ^&n z0?bg27N)s{?^F(+t&vgA+NAcx-NLb@M(?g2B^}(VG>PZ=y-qwjF+KkZb^Bel9av0k zmZGc1+jCU1Qr--L}NG>(W-|5zzdSZtDTVtjr#~!J=!yqD_}FGz~^*XlS#cJ<54kJ;%tiw)!wdQYj31 zcMuDuiFET(nS_&uYwg_qv^(16kh8+^=6T3@j?GoZ85u*a57bY|8&?K7f}P#el39@UIYOURn zC9LwIOXGNS>*MGPdj2~&;UkRtsQMVfQN}XBlROl)cgTeim9&OT5GO%o_~)4!ry0+1 zLeES8F)sG=R&KI$huDkXc~GBXJjTe%wSI}CFUp7+j(A>Y$b?N_kR&H6Rd@YG%7?*wX-C+-|}jEh(wV~ZTl)<@-ScnxU@$0|APc9|`!#8Orp&cs0Wc&_1)%8SCHRj_(6 zmc=ZNcJ`C!hYYH~Lq}Is^60z0Vx!j14xFW9|@n zRP>Y=jgn+KxH2GMWSeN(uE0+=IWoxJuD-}?r0m_PJ6+JVdHsTHf%OZ-MrdJ+U0(-M z^!%B7IGlTwMyox(DFXR`tEi|x9{jCa{}k2zdzq>=QMcxWZVffupiz)LQUW(o%! zcDcyC8A}k(ZX>vEr3kzLJ-^kl!N~)>`7!zjH54czXEprt4G1Bx@Up(2AC`f4Bc`j3 z`T}k;cs4V?18vP}?V8`FuL1M&trhR~XmiO~afizcGIWx8a=;@vJUC>LIgp`lvw1YD z19Pa%D%+}Oj2xV%z{s=H%JVNwmUPvPwTV|Z=&qGlh%z~5?{u{?0c1pgZb^?ZJcpAF z-3W%&luFb0@NK@7`YT)}OS4QCS*CU#qY{-I7_@Z2xP}AC0jOSd3pv;&IWjo8Ihj^{ zFxn{-h7sO&SDQYZ!wEQ-(t)`P4=ZWh)~xp$uTx>9Asuiq4G!nzce^5od0zF96O z%z5Ob0w$vsq4zSel*n44CefX>OQ-JaO2rx#N%I4zg>U3YUa(^@s>>RTvi@51i4eJx zpAn2*Wbx@ zm2@q7x~ph)${Cu&hzSdPJ7r09`ztn`2%5%q>ST~nCd0X~je>EJNt&IVvbZqHQgCh- zr_mhP)zmBQ!ePU^6oRgvmR@0@tFyHiFYY6gN|&w0A}sK>+j>_XLtBi;(C{f!1UvvX z{4*4-gDxw(pI|)3c)Y!L~Mw1vU5%k*euNjOD@6Z5Y`R=H@h{YRX+)Pr@5CG#Ncvpl=G-C zx)>u(zRzA_2gWK=*{E{f+bCCOGgS2uJ5F(^vyA5%&#^l*Vtx@WH7;T;!{)<`N7z?} zxyX2#@hanW#wFl_iIEGt(8GnvF>*TfVIrxWP4fs*KgZ@O;|$76QvkLcGWF7MpN-Ek zUPE{qZ1wV39LRasPcxojm**LoRdp_B{TL&cw$4>S#&7$cYOz%+}++)0+i3My-iCB(rTVo@NC4`hzk&T`xcV;|#I#spJy-l7P(Kloln zC}LDy_e3!{wX={P*q7F(uqAhNqF8vgq)<4O!#NbuzB4wR$reVnQn@5VND+5$**P#e zV(bkzwgx}r+d`wJ(axU1VscV@worUJku6Q-lKXd(75Uvglq^2&+NLGT6R!JR@j_m1 zH7*n>Rl6eE9@BDKvV;$9D5Cp|zv@~Q+~@Imgt%W3?~t@?b|v$!BuuVcHdRa(_q)am zMHlE2qJzrl-Qwkq%0jd&!YpmlEE5pohZON1Y2GrF-KP~LKDc$SR^F4KqGt2FMY;6; z%$_~okPr_jV$(kqo{chOM2Iblc;Jm8cVzRL3_VhqE~YgO?)M3?O%ZV;xR%K#2Mg20 zSmb@XJvNnnaO*&RdQvMU%i3r$nJ-bPCpjfb=tmXtc)wOIYem_VM|nVu0o!wWSt_qK1i-l z6tiVYGG8id$&3&i72#|;k0d9ja+F%rcT^F(;QJWac53^|G60K*5y;hBp2(J5&qx_^ zWeOBOUnsju(^FH0BHgJpTER6{EKreh`yUV@s)#_E2u^9P>3mVkWs|9#wwa4p7+ zo2BM8RmkQcHqFvn6#WbV8CqhoxDZxFm|}_15g~dMu_jT-rS`jGaldP1II(?DhD$s) zq#F>-sffF_4-5>r#!1?!HSKkCE;7W>uwN!QG(7N#l&&X+Vy>v`@d6R=N*6L(T812s zQ=*-Uu)<%@Y^@?3WaZ|+qfjc5(3NC{Ph|5MQeQ6Spi6J*_bI~lCLXTgVqsk4QxD0U z%%fQ>A>OWtdqA8!z-@wfpvU5BkRIUX2W+4=8}6$QeUn(#z{Bq zEfn`lKE-p%5;e(;mM>?=vszJVbQVE_<}O9prHC0Ws2SGUVuK>q4;Qs@tyrYipobcS zYAMU~hlhq;+X|&J>vL-3GX2=p)QSVjmY_xmY1B(l01F1QIn6ba{Rn0AHbtzHd_;rI zpgE?pWoS9+_c#@x;2JRe`VBuYYH0h=023}5u_H;u3{f~LZN@d4MJd)O!Zwi8CW#5I z?FkufrBpkT`MuMmB4k#>)MKTR>8D*O*1OcRlsOHw7)c`ZRkFx>XN5}eVkr3(Rj3p( zNl>>UI;4GMI#p(;dla!&rjyDQD4S$1yEhNYgm{-C?v-9iQa?nID+O%?ZSE>*=|W!D zxH1ei=@fa8(o0Vy^LZ^-TJ2lXmGSDhtFq3PbuSJk#eE>pMcPK4`m@QR=341sB%?`{ z7hTj7C8b!zNPCo;DnFx5Y55En1Kb^?E-&LMQRNz8BzF_pBB`a3iNdqG6uBOm&SqrS zzEUGOZErHoT{=RP%Ejq44jV~+ZZDB&O->c5=|ZbRo?-^OR@Vla>{N2U?CY5I?^eV+ zR~j;!KO}I6_KcQuZO>=)LrF3hDRBu6s;IcyiG>hOXg0dj_&60xO8(GvuAHUv?lWQ~ zw8`6@Wd66LEuC&jTX)jaMloe>L^q8dN`<0S47;c|(~Y{mgOP*ESQNfYNf29E5@miP zv7zm*bdraBCEY1q%uX@4wdAC%#gTHBDmgm|-Wu*GVks*Wq@klHj>UT#%AR!d(GC1Q8pG#6y9gKj_ivObiC2k*MG29`t&Mx&eRG-QOScx#NCMgq*yI zSWKsr$}r#=j78i7F~8Rx@Oq-|NWwSZ4#Z;vfoL=w4+euWt>L_9%vGMI_D$5VlD zI1q@WQ+}PFVNX&Eg(%H*gbEYT0^`IWZ_u5}q*DP;C`G)}%bpsKQYBGs22+$=Knqbw z4^>$z3GRiw0dGK0)0g(AGto%W?Msaloyj28QQ8-F2YrEPDj5o-k{-Q8!KgMq9!W*r zQ9qRD$DEIN8&z%e>Q|@Fm5(CrO+$!Hi#vYJSa=(nF>)zKE6?cLzP06r~v@I(?}O z@hcdJL^5726Y$B9#1btU2}j(%GzAKH!c<2oB0)=rBI7}SG!%~LWzU4Xp>aQzI1}>u z++J^5b0?Ejo76Tu$#G9A8ciB4E=BDi8A`f6nGg}{AE);0Ay#Nw$QSWsG|ijT>pku9 zr<2ifjbuJbip1v$P)H&s;`94Sl)T|^M(1ZB6bVMsex#WO11Pyvn8Y9x(6n(c$%Nmh z*Cy$jM1LX_a1VsN)XF1Ck2@Af3{d3;Jb9k|qCOKZQ(sQ|^e@7k3W~MnnE!B0MbsC5u$J@LUX)kDPRi^h!B z5sr8QL}DToOHds~sl~;p>{J=ypf5HU7>q=9Iz2w0H#A88@et+SAMAHW6V%@6A`1Nj z9#2T;{Gcxyh{XrvZYmb>GZ68+W8wZmcPx>J$HH-6$TOgqeK64PC7m2~hkaa|-l#hk ziN}b&o>;u!>m7*16Na`)g-JC;C?u)lz<8QOb392U3a6uJnbCB!Z4!t3DX!ZS3{$;( zD7jcXk#PHCF^|_54krc%bS{zlp*|uWcZUM~ez!jy_fpwNJ%j_)aZm#fhGTk2s>5j5 zJ4h-%5hQ+k`l;-GGLZ;-{L%iw{(%9#?BOsem}t!7_L7{CgiyUk`bqEj;-O$59*sr& zLxVc!1Kvc!=jo?3snG|bL`STjx-V}y&>tnW+~4ofbC3ExUTRvDNWe#ReK8LtVSvgWg;w-N zNJ1zJzi%)c?N4|}rgS$)yB;7gF24!CLXKy(fgQ)4m8J(%$N2P1=tet%4t`4DyWkw7Hw4i5B_ECo?V1F@i+ zlz)syGcoVrV85Z0Lz#%CQQJ*Ze-#K&a*+&mO6g20>CI5@IUd#1jD+I@)M=qakdVLt zCFi5sq`YVVG#H8a6MDTzd|qngRE|V{jN4I|MmZ#U1F^^;4JQWU@vz==^~b3|q=4K5 zK_B%;p>W(C8Sp1)pcM>9eNk^H>NDy+9F5U{g*upM#7mksKH!c8sS}5$jSYJGsq6CG z5;FMxL#8}F>P0EdNR);cUT=na&~egB9vYsI<`0sx4e_AS#Dm6yBA(*ap7H5CFLbz` z#b7n1xr*9k;Tc}LaV5zYGY8jBeO^^^#YVR8dXse~t&BAaxinPBP4l`J+cLbK!dX5~ z*Ps6JH@|>UD_)hC)8DP|m?qbbN=*}1ytLwG*JLSODCV-Ml@}-k-s%e!QsHnim=1=# z)F*2sukByTwWbF%UH$AjZEQubzoo}@oHsi*izu8^YH z{zv56uAa*F{CMF9%5S~i&F2^9zM4MtbKhA0`On;c<@L|Uf8)e&KKkH8r#Jrci0N&Q ze!lbY#?P$3^3j_ATf}m_vF?H{Horp`-r zBB_7naEL!;oh6s7{y|v$HryHkpB8*pJi;F!%!psOJ%Hh1eCGbMw+Gn4pDo-=StbcJ z5huFdd24_Ie;hZ*DI`UTzr6U4H9|Pw80=~OWaPWZvuCyEPX4T_Chj8-*J_Uu{-M4?AW`;0r&m?ox+MYea!ir^Bh;~(py*YW0{=l0JlX=&hG*M*N`fN5+ zo-j{n*}W53Q)UV+`qke51{(S0xvuZm5TS$YlY6oy=)qn2-2V1-VR9-dJuO(xgrO}z zJ&C(LgQqa0$=ElY%xPFJv`y~88X1;2tZ6;zgn4pLJ~^p%P41a4X;??w^^8_5W;2>- z!H?gq`43RHLcqp14KS)xb>Ex%?&L*6xzvVG?|#!z3B4dI;qHIaaE}zRvYbuk<9cB& z7Dcgw^;W2ED|%*p?o3$CI^XfGT63GM0`(uRf|Wud37uP3s&T(>M|^vtO=o1s7){ zg~|AeOFPk@&}HC_RZg*G!IJsC+Y@-HD&?nG6pIGQ*z(yA7I*DZ{Z-fM3wsdQa$ zxDM+@7*66zZNBNgQ!j(=zE-Auo9jBA$lDSzoNo)=b1MTRAzc~VMy6Axa<)7T5wfjF z_M1v;wzNIZ4?ObawbUbIGbC)o$zn;1m89^kzs=RCzP7eD<<_5}7L4C5Z+YhsR_I_W zUjED`GhY6zJZQ%2pB1+mFMw9ISkX`07K&xLoZZqRu&@DTYJI#14y2X$NGv1GG zbsJWW!?DeHQ@V1W8ShGO`C8?a^&XupRlkg%vdXOLc77W&zr*^i>eL5URGU3Hnb1nq zvRJoFt+I5WQ)vq2`n_6Sqt0? z#b&_OZlqnPX1NfK$vu)=1G>ZdrbB)&bx#w9dsl%U-44 zD7|l?WpSxUcUWY$ zU$(N%imxYF@%02NzMf!(60mNTnOX4x1;zAVXq@_%OM2_L97EiXttt(_PX8@3*eul% z9*uTkKm(m!CW(3+iLWU?Tj2hJB|f?D9wXL+ZwR_}mDh^QIh(Gxr6i@`!M8>u??-?n zSWGWbQU58iZe^4)A25CjV2w@J<#+>=Sku1R)`h-+dmwz)Lh+a}DOS8@eA+_snelN8 z#c#&vEtG&6AGlD0W_;p837PSc3ngsEXD*b886Ub(qFoR(mQQ^1qGe<{Z^m~oT1c6g z@$HM2(P_<$?_ab$p=HePXP1d-Groh-GFZ%-`#4sz+yyyBpJ>L1F^Bc`V9N9nX~>zkahU17=IxxaHf6@QG+K70%jO^EUbOIx86VbY zp}_+;tgc?2JyuA5*8_T2Xhpj)<8vD}GzRz3kUNvo5%pY1E+=RmCzaiTT&MKKIvm z*5~f5&)r#{`#-Qg=YK2fbHTU1KKIa_^|?Fib9dI~?yS$vMP3=kBb}-C3Wzvp#oceQwqIoc(d$MR)rW9smBduG9T%r5nHAN4kGSC_}>tg0CE3 z_{BDHq0*ehaP?t$1`+UowoUjCw29R}hq(3k*hpfe?c3jqyqtexSMAE0XM9HwA4MAR zhjwGhVmB$2iRsjCx$n}r6;e;_)=zowUiEn?-xiM^V#`z}B}TTze8G^=Q~&8N>8Yax zzx&=J8`u8Z-~D#^kKg&t+0U*}cob%rc+=k}KD)Xkd*X#+B9|LVX7hq;N7J@sayi|% zaUZ4PU}mVI0hdM5C$7=`yy9uhE6#?_Erq}KrvFU0{aU}z&-^d^wf$fIRTTMQVZL;8 z9|=}Z|&{Y>>2tG`_RmFllmf4%zo>TgzmyZVLd?^S=l`lae0R{yB_ zC)F3Ke^z~|`d_R6t@;<$FIT@({mbhAG=0_dHPc_2E}On?`fJnQn68-q*7SF#|7E&r z`g_wiOy4wJJ9{nht+U@seEaOT6W=-eoy7IC*AuUteI@bTv)@g8@9g&yH;&)9d}GtA znOBd$dim8&uVr34{@Uf&HocyC{rKybU*EKpSvtJ*{L;%y*Oz*325yetEZ;nQ^ZA=E z-@JaaXF0Gux?EmlT4=a(-oUtL~Wwl_93HaE65b~JW3a*dhBeB)5#NaI-J zMB`NBbYrn`uJK~yLgP~7O5#j5d>;`LUS~&3tg?(V3x{ z?K1;2v6=VJY@K;%CNdM63C#FrJTqHnHqX3grg!H4nN2hAoN+DPyR>m>!_wQ9?peBf z$+@(CY2DJ=rJkj`mb#a^mK;lKwyrtTxwZ35$JUNB_O13a?OWT=*tXivShrfwShiZu zwC!%&(00*$)V$lg!F;jxXzT9Q4XqbVM@_p;8%!5lj<)1lcC>76vA0}R&#NcZ=hU3K zL*1;})vL;R<)reQQdTm`sFF|u$|j{pF)7!@W%05&OM36PI4r7SpO_L8VoW?KhQ&5& z7ZKqRz0_cw)MPMUOPnNGzykG0h4^e;xy8;pWqY=B_`Mhy63Jw9EJt_z(R`atxG=r?1ZF-|ZP z%~`7RuhE5k@mceo)E4fccJS*&-`Cn#rlQ6jKOSQUd^BA4xh<>w|1m%O-uXD`qaVXp z26YEwx|^;arR(E#{T5w+N7n|c5WDC)NY`)C^-a3oO?(@p>oauyIbGdE-!NT==z58+ zyX-9qFwMbV7&F**8b&{@Sx*nq$`iV7?1dM<{4o2@7%41lMA^zLw z!VnE}cTD5g)3uH+%=Iz*M_+?=0er|EeG8JqA_B%v`06_bd%V;ji}?oL2%SG9Dh<0{ zCtJw;pU80&CH9r2M&l`BT!!3&dN>SpE>WfTy=9EKp7wVZlmEK1u;Rgf9f@of0FIqn-qVH_)o*Cz7OCdk3!6oAe|#&y+OixnrOX2 zLU@RTuR=n1ikRyp#-1XEP7yPQiIKy^#HlV>7dMD;W5kFHsApo@HDcHiV%Tu2{J{MM z5~Neak9jKh@Ukqg(B&Fq%{*N{OV=0Z`dh&#hxz$Uk*;5%>&tX?QyM=^*T?DlW4gMD z*FQqnNxB+z;fwRXPuF`X&(G7fgYy46U1x}vpP@>;Np$UP7tLSg?<)VRa;5UOm2XtO zS-D#I`^wiUe^t3u`D*2_D}PhDT={z6D~qr6U0=N3_r1mM^?i5oyM5nU{8rz!#cO@v zS^Q4lw->)Heog$k_+{}c;m>}+LYdqOF_S&V_T(6D2cI@>_ue)9!d;QprOE+9M z#%>&Y_0p@ZSI1r*zBzT%anp12#hce|9=dtz=J3)Ksd3NJi%Zv*4lSKps;sT_RMuD4 zRk|vU%3YQ2%Erou%G)dVR_?AiD{rgZvuNwHEw=ZyFIxI6i`G8tVrO6H;+noSi}pVI zVn<(xcw9Uteq8*B7!>_tr}%()Mij+QijRnKk)jHHij>*|r0CpK$?qVAb{{FpC^gvk zkuvm>f($;XY*Y3r6N-~2=Mkk>xuBd=ZYWojBg(vTS~;OSNs_UTG`^EsV1%^d1#wQ? z5Ld(zlA_b%gcxgewO(pH);eZ#nJ$@*na0{&ZI{}PwT+ow=1b;d=2Pk+^_u#k>QNo) zlsc@QYB|($t>wiQPm7~vs%5wZqo~#6r+?}=>0dgIxkBv#*SX`=Hh-tlxNwfzH_i61 ze3{zsrAEW^b!xAF+i0Bld(s2nBERd6#@P3$EmIplMEWH{1L-3)nd_y_<`8uxPUn828m^puc_-$hp+ zU1N$IYaOF&QST5C7kyboPh(h5XX+nFt4~kEh}-+mi2qjdJ*3Aybz6M=pv$4}oo|r_ zBdvdF-2XRzia~$nc6YGH^Cs^2K|epa*d`utS@C(i1*4kB#faELI6#VEL~IwkNDb_v z`%Y2`yExqMn!dS=bZmNB#{FSE9rUHEr;Yd}IOoUt>Gz<>@Nckk;VwQ<4HVr1-vn(PjMJe^DjVZ3-!61Mp}x9Q2<5#!#R!n~QUI@fHW^=HiV7DWTnbQVcG*_iGjq+jRMMZW)*D9m1tfznJ- z*^A9>5JLPamGaHY@1xv(Ou_p(|6O{#te(G7hWz)XV+-?YnBrqY$~5t*d<*~I$fGxg zznxR7`Gns?%-0x&C{f5s-ev-6_{ZWIaev^yLv1{sJ@xSS4SDDH|Kaa{15ir?1QY-O z00;m?h(A!LmfxaJ$pHXmxeovx0001NX<{#KWps0NVQyq$a%3_tFfUF)b!2I8E_iKh z?7e$)<2bS>`uDvN_d8%~;_SF)U8?HpnV#-Bed>%X%eHnbTP?{|^N3j=ii9LiQKXs= z+v<(|?iZN=_!21r6iKOiYa*u0rU~$ui3E_DNM!!_pD!ziJW)TeJ@-FeebagO>OVjH zfB)}~mS?hm2>aiUMi9`|%-M+F@tJF^=!d&*WZB-2Z}AuL^4r|oKd#tstoL+d{)j-c z|9Cb16Yr+e^DJrxo$jsid`V6Ai~lOs2pa~`YGwGF++*X7V>}a!x5@r#W(3qCo=f0w zWbS*bKV@H7hT-~8Z{IGBU#RnJ__X6hi-kiwrnh<uks$zIjh(n~(;?r$0xwPpxwjc;sJE z5RxdM#2}96eU8>OP%+#?#nijCU26CfW3_hZ*<=%hbk(_F;9e_I)bm^>pF-k2SbhG!Oc&&OGR*K>H1it3cG@^iDl^mL1oD8-DYh>cH~u*tn7aR6wi0z;@ZZ zlcUJ_hyx2mRTxL!!>bRX!%=S-56;ekEE@S5M)UfQ@89E(ij0}84fk>~B5!~-)VCRr zyg7j z=dCxsy;z3itoNF{fA{VW`Hr*ik32tQW5a}__ZvVlH2lxxh8p3LHU8$CU7xz7!P;gk z#%e^k&?+!)b1WL$I`Sn1-~+L;(^>KkEtb^G?c>gu*Me2dA~%4Tzw zjYDQ_3mS#Zx8JjpKTkqN(Rq5k{>MMhQ`>U#n-;nJqp+CIqWPSmWTFn=tg?Co!dD*< zEx}((mhE&SFAAAZUEsH0eYnTpB$PA8f0)NGBdu7gV#1zm48d!KZ`dyD6o|SsLgUp3 z)fTr*gu~^l4|fp`A7c#H%@`W|JMxKGtWOXWz7p@*sFJP(eDW+7X4_?bcxm!0ZDHlo z#dmEb>Dm&fw5(}KSE4GMwsc9=0kA1clK@&3E0yrH%^oh;27jMl}nh?|(G0MT3n#_X5_93)ivG(WW z*=D*DDkZR;25X1O+uU~8h8z&f4#3v5I?eN8WSF0+rO1Lbom>mS<&x=MYwV_ZxLi=K zd~fyryLazyeo+Me{pXus2--+&V2WwtvkCnZ>~%R+-v&$`-4+PDU<%5J3j17$8YKx2ne1~u{rmsm;heQ31$);w;Mmyhr|H?5IfwIfdr$&hCrc0k0 zHB66ScB)i53D+I*ppc&FY*ji}KmBsP8jw zInUf0nP$`pk6tR|xJ*vx)&WqMC(mvE*MZcO;{WSH-FJIod{x%(Tp6tsJ zZ|r1$72(l-!Dm`O+ehZ<9qwmfe_8XPP>%9}1o*JgNCM8m3W8HLl%P=34wD|A;!oYR z-N7Gv#+r3UdyY-rat$H-7#kANlJKVWj`B{Foog!G0vUV#&*$aMu^n%NyV{>q2T0%j zKKGldz%UpfEo;wqLw*E;4sk_?MP{H!MSUE4=GHh9TVzyvHo4L2iv31|sW+yEl|G`H z<8%0e&;Fv|)R-mYy!yatBXjs|&&)i|fZfrT5LK*jV*jGL=_B{?CJUnzVdQ%EL*mW;Ma?<} zZr8@3vm<=6UCVn8NZbuc^-%-P(LS7=q5X2@`71*e@fhNn=o1xFBV_Bv3S5e;2lfR2 z!&G4;g}Mu-Vt{VU1LnAMn$3PV(^>nT3Ca!+01K8(H?rQW&{vCn=1--1h6@MD;CscR zWY!@ZrQ0D>pxFFucrtQc4dTz8?Rj+q^uUSnzHMQG#Ns-d*-W#)h)zBkPZa;dM@+tR z9od%ZGLVqK2T-Uait>ifGYXod^VJ6=8BfU-wvQkoo3-RZbhTsq*xq_BAvlbw%JJ?a zA1L&&roQc2wrPi(S06^nFA7bcWA4BD03$*8FA6PjPE5Fd4N>Do@pBpF&c+G zP}f3rro%b`!#SD3WN!OGSo5K72@|-)-7;vdsd^Tj<%8sa!~2Mjrp?Ir*%#!(2!}3a zX5}*64GHZPW7Qn>pkxtU8UcF`V|gS`>J9}dVMmXH9vPO!*5gY2aPztV`)SSllMyj; z=;P3>BMQJJog0x8UeYJqq_f1XoFcLKGhaL*uq}!$w0O&fGEVq1#1kV|=QjAYc|5VO z?%3oCB+A1~1-Jx-zhY2qM?rbEXaEN;QuBrm#3O;OtP|;2n)(ry1QyU!y9cVF(Jgu0 ze_>i^V9y+?>|0EYzs9(OA|f_~l~Ta=E-}!u7;_SEDMnw}{4yOcfXHtnG?%gyag_k1 zN&K1V_3ZB_EmM=w@Kskid^bp`mVBRVWo4U$UU|Gp9;Ub6Mp=jLqX3hJ{U`Rr4Kvj; z2VkSnSDj0&4@8e05#AH(PQua&Hm=F^7gg0QEw*qgG5loM0v})c;CK0%kgJ+HBOGNq{TMzJb-0u!?i*JR)3D8qiU(@h`MYs2twxOdBqsQ#m1M&AiGNrrMy}bn@ zNc$o_g1m}>uHBHP;O>6ZA5R98DZbI(YNEHPUeY-_aZyhy(xVHuR>YU3 zik-MOdjz;+xW1sQg6FkSgZ$Pvo`0M11kE<$cN9o?T3%V#^Ne~#*r)P)<@kaQ0~r8@`wZS4d+#t1vT?4(e=GLvo9 z9^5OqaikHe6u(~s#GNk21mZOfN5VfUo#+qQO9Bttw*-jnu{}sy4eI z+7uF6vRw%NE$CV*fi;lRS0?A)$g~Q164Ld+L`Nc z?W6=_%j4pnn1*Ah9<>ypC%l7piHMZbD#EMH?$Cv+8O)yt)kqG(PMmWOHQ$6+MtkW! zt1b>{ywI#w#5{FY(c1%vADj^_4qVn`@}}ldYg47aFCS|| zEq@^~Fj9&5x2nL&Z+1lDX&p_IV4I_$9fWjM=_dQYwdf1`@Efw=fq}v= zDk~+lDKzOd=aM>fp`InXSb%tkhKXSSvd0RWw1r9X`8NuzVgfN@hb5rg&6sMoS}{+K zX~E^_KpRxU@H{qDoh2cDzs(7x?=dNskz@H$QuyKK<0V^)X6l=WxGPCyv!fw5UUZR* z`_IQlK5$K+LU|oc{BgTFDcB+PLkM%Mx*%fX_Ex|=*3O6;pFiUHvT8a*)`0L9Ekpeh z+?rdUxi2c_vYrPk;dQ$bTuEQvlH`^&<}&bFIx}_xN9`>t&!xaCtIv3@3NrJgCNuav zTk3}C->*JMCg898vVO(it2+%}g{#Y45_!W`lJKQ5mZXn6c1E}{#0$Uyc0pDzU;gbB zQoCh%S)LV5BOBirkw9&$GmZRvwXys3bFYb9NUc) z;8KGq5lwztvkv{DR~K?3ZG1lU)d^r-LsY;3U9Hd7o&paW?v z5DU?cU!3OE&vL3~{EnigCatr&?X>(>lq32qmAbY{8rv&IIvn@e3vq!o#~LiI8m-sP zCca_HkU;KktjB9x*jnYN0H3GzS^1@brBsAke79khcT5*Hcmw(EEi~7(Oag2d@RTyj zX>a651I)%sePX>r<23PawO; z5*f}y_-_Sd$@2~ zas{7+;1W--;mS9BctC>4q${L9P6K7}FLHHWX0VW(9HdI-3%E*#(i}v17AtDlInog|rYAefp~q z9VA5D0h0ugr3DG=PDw!$nPcjgE8)~}FhG%w?JDAlz0>ZJn#Al$xTfUdl=*ZnpO3n9 z*#X=ku##@m6nquWgTzxDhZf4`13#0>UiZbj$f zRDH_R58&rac%&j@OfESSgI6E{hVL7g>j(*gOb4dN1|?W~Jd-0Dw8wT!cZBU~5iFkE;|)Y^KiT1?5v?HL2Rc%!;-!1n_WflJCx6b9n7Y&~ z%bZ>^s!6*sH3HAAXMj^5g z`Ou}HW%h;aZ;&5;;qoPLg|BBh8K8@p=|GHqp>0M6G9uf@)=_bCn-R++^W+&uJUFU1 zD(mB2N4hidqNk;K14ULIGkI%bDPK1^B;iAjf_SnE8dQ@#m}cY$q8?0Uip2BNut1FQ zIG(*#s^ETpW@E-8!S}_wRj@5o0=MR?Sj8RgJ0^ ztzz_S(Uwshym(g2Qml)f7ou|5;NZcWT$>vqLwzhN1(3B1v1$Za!&%^X+C0tV#}iR_ zCfLev+-{=6EcnhntP85!5w0P}!+OPD03*}2?p;;?K29X3tx#B3GE} z>PxBNyurGnW~TW$X!J|MbfS;8x0G)PWVt`S9K4%() zDp+hnC~wm)+H3Z{9$09>8GAg$Ix{wz?qXpD)olUyBwE?TwA66EEti$llv?(W0i|&z z%sn?$UcLR$v__GF*y$~)`MH;Jh-a_UWKL{V-6;4RrxzMJFy~LUb~HE90&cuHj%1%|AW+H$ls!WcXBc25htFUr zzw5k1L+Bg!FIvml)0FKh6O|l7yR3+;B&Ls$wCsp96O*GH$u~}ltzAB*PVvZ`5>~na zSRgMsTRy(8Cn-OChJj=99aD$`tiXY@*A-_AlDm70CFaj0+=&rwrAU5zm3h(Eb|6xbn=%ijW=OODV%f`1Kh~-gUkq=JM z3pj*bnRRRa~t%euN`EH=F<;^SbfkdxZyUhnN%v*}^bEmzqh85?7YRt62wc zF>p~OMus9NQNfGjiZ(|9ErQ?F47y0E%6S7Qby8QdSGjrR8#cy!u=NR}M2^GXR6^z| zS(uLk`Xn=S@5ZXdVVS0-HWu&LA4*{J8x;jNzH*Ve*)U$IiC4KEcIb+U&&xxv6f}($ zUu#s}%*-0~utkj)3tUoa+tGSF`b4>^ZTx;?(ieY0{xtOpaS-^H;tdaZedggK~H{8Js~ev z<_%IYWf=)90LC( zP<@F@Zbg#$dYvMf+xOye+f?t_a5dKWxDA0uH9#vq=*vLsJh-1-@7dK=5T+SP!|-(< z1A^i`R>U?%yno!XnmfGA(llCb0=B$47;Eers^MunXj+RN)5PJb$Yk%uc5K#JB7Z!d zAJdFD4tm7`+u~W(L^2De4+eoOn4q~t=(hdF!$Ibkwhc_AD|q&OU5ZcoX3^zK8p zhn5&|$A-=GRkIa)92KZ3uOlJu0pdSfVPi>0y4PP!uK>*AJ+; zrtJ&jvc1}HY-2;v65olXqMsaC#}XbFGZNA-rv{u#)mHwmc*rH$9iAdn%Q4|&6Mpj+ zj}b`GTPecPL=X{bk}`R@tB@1tf`$A`LF$H5bCV$ENRKT$Y#M5@#N=&ahU{QL;mC`? zKI|k-?s<;2l4)&9NY~M;sg#HZ#;TVx2I3ge0;V>aQ~RYP`?W2Z@%+7P-eO;aixGZO zCy60%L9j`4!b39Rl`)xF?eBrZLw;_A`mfrx~c`+f=$9QXy)wq8AWm%z37b z7xFN-0lFX>^C}lRI&-u_;F=^io6|xgYAr>0qVCGOwK9$fV?Np%!U}$)ga)x8+LrVi zi3dJi^EHf7Gut#gdd2gqFU#drD~1x6R%)OsO7U7%2Dqbj(plRHrzXhuOZe&n z2;tqvBr|ni|HAQR$`emasW^xD%yz*^<{17$UU-!ud`Q1_&0l^NKVq>u_=ImxngUAW%I8@jx9$Q3!Dn4-S(B{E#sx&=Z_HOT{ zkEn}34(_Xd^RoiseS0bc;Ab%j^DwaIw6n>>t0_v2~*^6~0^JnT-7Ly1sS z+y~`w(1Zq|(GTt(A12M&n>*n%N%kV2{cYgljUSCP4+$O2w7Y*8_xck?%10(vm&`(` zL$LPF@Ii{8$~H>6lO&5s-g^*p6`Lp`IauP0Z4QKj+VjxS; zV)}7fiw@u~XDd-m(lpkFX@{HFQm2mHPka|@?y}AfR!pc5v#%(A?H+exS#X0$08vUVDSHyi!>e>b zu%u+!li}Ooj^cs++)EAL6x@IcSVA@!KYXZ0!1Dmag%*TpBpBllcSvm^ZUyq-Dd)Ft za3brVegDP4t(5~~Sgi%~H8Qg1RK&tkce3r@Z{+d@yws`@!c08S2KE zzCQn@FF9SE!tkYXq-Qf+R~(_jgyaX0P$u_zJWd7?>5=$38aJi4Vf@-gZL(w3D#e`# zkaZ5&nHfBJgH23?ddIL^K6GEx+P5(6Wpevk=6oihd|@*AgM}x_U|%x(gG@T6c?5w; zKS#`Pn}dfQ5sK|%&e&ZbcJPH?+dxms2D+YQ0*5%aOw=;Q-Fk->R+L@C`*r2eSUE~7 zVpUu`3bIVsrPrmCT4$8If^QBke{Ew`clEMl{!5)0P2`xDsZ@v!W*{#gr?0bERWfAt zu=L;3_YEu5kJFN_M$-M&E>qoXokI#_ElbL zOqae#UQ|7Nzb;qV`>(#TQ<2*0%RS8v%@ZTaAd|J7age}TK~{a1h4SASXk zYsXiI*_Sd{Up;1D=W&T>e07->3C&j*NL6|I>NEQ)FxuWD{%Bw^YC)ItYq3V`xV!qy z55|^{kYpvJL&UYp;t&3s2T25eHaA#BI$s=bTHByyKWNCplaAph-})7f;>hYVC9OjRv4lRHyWFQUYbf=NpJ;3x)lUDHk?nFsj$4`b^ zZMiG1w=tYt-a#QzE|7mB%P?I3>FwK9V7Z-@ZTcSM(dwAq>MeEOM8R9fp82fvx0dzo zAK(4)hxZ*LSa03g-~LohH_OsI-hMK04V{!M)9q~^Ogi32D>ri$XwphDQ%KQi(bIof z+rCzYxGX_X;FnmT;nwO@iQf^*t!i%h(ZBOAmFFW}M z{Mzf7uDmC$Jd@~f^P!n2iNM*J%VpL2bl6KTTnwcCWEq7P8x9SEWqgMe8-BkK=1CBG z>vcWzq+VM2jqDzJ(R7vqq1f;m-NFlJB}ag%WN-y0T{e5~=`lsTck3;@`CM1v9S@RG zG4+7kC!eO1#8+O-k7p(ze&o8ay4bZOa%+Sgm#KwMXHw`g0Dsk7Wn1P*|HX8ofbHc& zrvBcu#lmNLy9Q6rf~CQ>%{MF7{B;2{($s^ua%Fs`8|t4L1wmOgYYU2@ zU|$u5+7$)Z&7>6RdYNkxF78`;gWhsG+%%#gh)X|GvVN8Ke3BvEcHroYY~K4(&mgD9 zaR$Xis`%A&)@klY00vk1^LIF>%Mfk+0%(xiMVJQO-D=WS~oh$4N%{)WJ;XJOJ}Z z4i!NU6KHiaMpafbYr9mHXezu^2Am3=AJoCLC>>y=q>q;QGaXwb-5QGB@+It?givN3 ztKXiB;_6uI@!1Xvx^H;6_PN2T4pPSVBsPOX{aR^$ru%Q5X*)eXRXK*v6?DB+XIJ9K zN%Jc1xphVzW;RykWHSciS9`I7z1XmP?KQ9J6d^ss>Oi~dFvF^0wzp!3s0@j&Inul} z(lqCfV=gF-#V)Jibc}|Y)%l^}8VhAbe$OGQ=+jd~_t?^_H(%5D=Ihb>(>At|l*LIEDNU7g z91b~+-O->mwCQy~tMpr8+g6sbq7TCvSW*YPIF`4l-&7;@OelCI0NaqBsz$+bW%IA4tb>B3cFRgGf`p9!tU-oe^qihgT6qGc?h~Sz)j-9{bH3WwWRn64T&utr*p-hsfg9VBFs>T&oh$zfw zHacu+NMG5iFSYmAdsWRz!F8b&99V#(VL8amY87EP{?P2zS)})*@3K*0U-$f;x8jA% zRTVCoSTq3dM!vT;^e#{jjRoyurF2Mrpomh)~%j0Q3 z){br3A#se27uDhJ+&kJShIO7)dBzx-_17D;8FgglCM;)MZ6b@ZVe-JlB>Ztv&+^$NXw7EA%JVnpWMwawApxg1XFXf6psXL{ZGd~&e8T+aQD{5M+}&4R zxS(mkZ>k#v)2b7(bk{&du^Ul(xs{#bBKoN@wn{*v{0~a$z~w2s?fvE0wj8;t%pbUR zXyak4EQSIoej8wr2u_s%;!LWgZCb22AbwgHaExzKeqvbH*=Jn-5jdSHKQ&rmV*ReQ zVmleH755aMUE5GX?&k=~8{iSwC+?7TEfV{)@q0n1Qi}fK^(Y>)REUXcX-+(TD++WS z8lU4m+;gc&-N04@EZzx=0{#YvV~}bZuFb%48P@i+_!5xq(Cy4RBv^WpW5JltjG426 zvs5ypSbuPd6gZV9xE#@32r;*e!i!rQh4xYCXE zf|hZuwdQeGityhG=Wh$GSg38Pnln9V&^)*+C|qSZB2|(SJlTXNX_B!5GJ}0vqkk}P zP)_UGt@j`v#QBxfcH20mQ=1s$Vvu^F@3I{kV8lgj3eY~dmzppyTM$eUS+DM-F$lch zJTkqyX~}hy<`vng$3yW|OKo^y2($N_M)SPV}_!vDKp#ftZo&I zG@EC46V&5xd*b%Qt1`*cnwpR}){<>&3zaP36(czbqSIiLPUKw?tu$_5W4z&ZSfH*m zLW`~gMyydYz)Vk#6q~i;+F{1@u6FHFXGN8l9s9~g&#uvt zdZ5Cv_zdW)4**wbB${RajS;lZ{@#+BpTUm>c}Hw0_bw|l8#rT_g~$EEJX;F)7<*C3 zmKKV+PI)mkx>hWn*7m?nAl+0l=1tZeRE!x?<$c zshHJ$i`AxZQ1g2X$qfaVIfan%t7xaBvL>i{xySdT{&@Pgzx4l>yLtW$Vp-3{^WsRL6xa?wA5!*u z^6JXjJ zWLwHduo^ucjl^ycc&4p$c)z=oqY*M%ZUUwiIg>RtJ~Q2|IyL#8jz-e;gYp?#N$aCQ zXDS)gMt@{`&DBeF8ZzA|l*i7p|?Yjz`rbTCY7n3?9*(x%6%J&!ff- zbDb`aN9F%yw%a6{X++5G?xcM}7EJ3F+dS88E6}mk#}NhuG2HiuhY=BX(7LWxRYfD% z{%D$+0IwP0k^oP&Z67uN=aL4d-tn)+TKG14kmK0M=I*VO!WZhELsKaOmB`?sI%eEl z`e(rjCF8i{vm??Mn;q&-h4_S8x~x9a&2dT4jH=@1^P7Nebq<`DTaq9VWyREaHE=GQ+b3|0W{MmC@ZWUB~BfL|a!Wj*>zPNxISWt|j+vAv9q zi0LrG&Ix8c3B>LXwVd!EXB~%0$}oeK2ky=~C@K!j$WWveHxkp;Ycz5s3-FMjkyL2^ z;c+7|^(v7ga0x(uyGD<4e(ZSil|o;Cg$%H=zl3Xx$gYwB7W28@dfw*%S7Sql&X};0 zDIOipnT%PLSf?yiHL(q=MzXKZ4&zta%eIF{@vDrvF0+<^UvQ9Goo6cI#wJt^6A|_@ zw$cSO8%jK3@@nWLQ zT^G+{2Ewt3EM#3vhwaUrt;kifA!a8GyzuQ2=4^n9zHJ0?4aV6}=|!ADh}|Hqic zNmFtb8qR01h*6w8Oo|J3zvsSg&bp6_acSQANE%>P3*JjD!cx3IZQ-nL7LU177Z=at zv!A|H%8bl)%O)bKRQaIezqpI=1K>3j38U*Axe^Jhtt7-&PmSqd+u6F+^sudV)pW6L zb|-mKBo?1%qLr!Pa7dE#1ywZ;)zDNqcv=_nw(%YDMqbHO--4)@jDRPV0i6ZY?!&HP z{VNK>bV&w?B+NF0vJ33hZ#wT`& zbBqYaj+#~i(|92*%z8~#PbluZumu$<2hi|C^-IDRbYZ)$P>49xc5w1v)PasA8%4dP z1=Kfbam;m){v1(JdziIsY#x0w0%L6pqfmzQ&XT*;O5J87lZ= z!PZ+^5)#mAhRYFITEKXAy=O9mIzK+IDPlF}QOgpgbE8!z%nD-FEIz?y%RKC(pSqLo zXb`XWc+%M>A%!Zby#An@7p!hF@p$BrNkxQ>je_)#cWCwW}fNq-w>? z+gn>byIj8g!1-In9?dZrTwqyMM8z4;1_49!CL7m$^&u3;kpcS+Z+O7XMakH`lyoly=>JM!P))CWlt>Bir3y3A-|4ROG zH|Y%D28C&rYSAHG!mJjVlb5X6Fb3j@!*&$c+_0A5uVDjVK)tZu=z(E17L^W*ip`U( z*iDv(Pc;Hw@qL2ftZ(4-i*0gqjDca>AgDB`1dnS}yj6&(VAu47gD6&pYfB}h0{D~h zq!-7Uz4dg63?Lo6E>4Uoz?^hwTWXVGEHgSUpux360o?(7U! zT^68GBBiZC_15}Gy>)6jo%!5mgzXS)#&b5o>=2`x^5y~GL14fjuP_M3Aqj7M5}i@8C-Iw(xuI8rSPw0h{?A2_3%2^ z<1OGFjUe`#0@inc={bR|YJwuy>J+$bIGH=Mq7Z$B60W-y&detp5K`@YR7En_P=co| zi1F^yXWM`og2burE0DcJoX=xh{FbT(8y7L%>fo?_bO(Vhlqc~kQpg)0LSnjyrf9sR z2heEILut(Pa9E}{K_kq1RZ1?0_XOX^jTDS6G{M+o;8gZq3vzWYYRRLJhkP@p0n-sx zQRAfV`+g%>2JXl)Ob9-LjPW{3BQSH|uAwy%%?Y-z0p-)VXhALad0=f?e_YQ zclYCA_qNtsb~|AHo%&t{kbm!w?;9U(9+ROJz#&`&m=9l$x*ZVuLQN=E%_r0VMV4<< z;){)Qo5RzSib;fZ5;_pH#;i0O{Nn_Q7w}3x=rw10^_qX7)|jkaG~5^g-)pCaU7eI5 zv>m4j8n$I>9ffe{!hKN{){rRV`J8zN4Xz^FK$*a}%E~r-wJliSHpJAKdTYnS^zpJg z?LJ;STwV3YSC5mw-StNIgS%;4xThL*)`}rd2g81wXr;gOP|UaeyX)yq1M>?PQ;kdV z>Q%OXc>lu>@81`k%>tRj{^g+iIQ`qGU&mINw=iR(Iz!`Mp07b3zK_Y*+JU8EjVI8s z`$qBUB~D;(H_kDENP}MjRrAccvR|k*Vb=b{fFLN7E&f@Qsj{^JV~7!XFBUIl5EfphgvDlv0ff7DXpN&4J zc%Eik%+W(GMG4N_M`1>#(9n5#)3nmtfDq>KWqqew=kwV>>0$~J-c}f|mGQ!R;j7=! zc(GT}N}gB40(VG!Lm5Mkb!d@a(6)f#q|=fr?isF4mi8jl(wdV{1XYvucGfV+%*oeYHX^){BXF%5m2K2dlSCm7y@^dJAM6oZ7_ zJ;@rK>B_sR!ivxH+3sI`5X&PEr-q|G(i$D7Xs3Mr}aUtWclV>u-1rgY8md|D}V z7V3=pf@N{AZ0?;ofe5H`=`y^JVDk_qGiOw0ST+`hU5DuG+o^S3R0W$|Q$DIfs3+j0 zD#lgCOLhM+ZPiUxj9k-CRRp>rM^!mqZBJDh>e^gYYS;&^>4BlDUPZ42`{1s3KOEim zr*-f>zetSWnvCJ-dfNc&s5_nxy0_eA1|G8};K`K}IIO#X$&(tfkTtb~YYd*|sIZ;zw#eXl>6#1cA~^t$8A$4@u?yT`kGA*^*v06!4w^p>6<1*4^* zY_;$f1e?^&-EB~vJG%Jh`**6`oLv32cXK~}m^_Ydx|9CnUH|%#HE##!4+p{gp$(Ke zhsSx4HJu>ugE;bn>WplKi45TZB3X|(md|DBJJXxa=+lB`jq*=o>r5fr)k4`MNHOtK z_hbKYIv#ZIu5WACmWshnY-MXThjTKxYiO+5j~u1OrY(k=_s}%1&Ik<33h;QlhDJ6I zuk(q9m;PpGzYHr4a({X`{@ZZy*T-QkBdrP9P))aA47vN)Rw0KBvbbPz2<*%LRrlex zcEhd=`Xyb5%Sys=*&j`B+7t{9wTe&(sO<>^Lai(e9B#{ka7C$gVVIvQ$--5?e|gdE z{iRKDhyhoThy-wZLLmS%ARFjQy|EGukUGHzL3P%jNl5`}HTNDoo zxw?GBuv-=osY+Jg{y>{-edlwGY7%|fzwNdv%^YgAoe!b5x$`lo2kd+Rw`D;!V?Q@>(-FC?` zaxI@);WFTt8rR7OG3KTl6Zw1SkHxk9}Q zp15UG0VS#L`qFN+{DGDejyK^BI2zU;Lb!!dCx;i07>vUOc@K>vtQ62k;7V!@(8~O) z-U@P62I`l+fnRZ>=Ka6%rz-e>6PS(rf%7ms*M{wC+B^5d(YQaE+>alxyMw!iO`c-F zdR9*!aHED#A>ayzL=JTG=Fb-JZW!vj{u0>T>9l$0Um57C0wO`TDUtth(<@JR_Zh3V9$cL>h2>S>E zGJ@QN`p)|VIs3N_AAULTs*;ibZ&z3(@Pp(f2H(81yihY&L@i=|;c5jI4dTvIV;-`v znxbQcEL(%S+6aY%KTQkf zYvJh}`N(irrR96;fYA=QIpa;dRSM&;syZq025%vaGpH;PoWpU1MNOMg)u@xQc!yBV z3Yn5KXxAoCxjO004=y$FXn{cS`4Kz04V-gijb3DwH^UF9b-tAix)oAS)_GhA@uVHd z3F6asA}2TxaU{pRw1V^$9m?!0jD0$nav9%}MvXg^lTYb8lv6O9b|`Pbtl&_-989M7 zV`etowct=L0j#BaZvk#n?=A+cuXE=?H*TVB1Mgc4O*df*bpP_YVIN@$;Hsj*0k)h)OJ`X@P5GWxG%x6b0^dh|R4A%9%|a^#5ZU ztcI|(7t2&Ixuh-tzae!aqdm$_)iqcQ@swSIDa0r38cg9lz%`ik(hAa3bPe{+rELTlOun1WU{vp~OhbKh28fnvB?dTbtUld5YTF5OhhD3F8PxDAws zUF{M%B5vmjc_CPRiD>8gcoEo&^3dMZ@igdLIu9#E>LB9V{?)XFAe~~k`Vx_X+m=Yg za4X700=ZS87{isTs!}l?T;H@U7Ae5`a*+nymS7}+D@sNRbgQBi>l&-cgDe_$6KM`A#~<%d;IU{q{&i${ELyX_v=on$hEw$o7vMW( z_ppR}(jH<7@&G5X=%RUyr|2raHhhf|NsL>(LF0~M{uzBgv4GdKn>Ygxk~GkpU-T@V z>+bmawh#Gx`Zs@X*5WAyt7Y-zz&2^|6oJ(@9x zb#n(*E}{SP+aP55OIu)L7AxWv%K}!Q!*-1WJyj)S8{R4FAOh`4s~`g70U8MJp>c$# zsDBK;y}W%trcczLY3%Z;R*h>Ssc-44BWa*b>m=JiJ7dpV>8T};yqEsR{`lf?e1AV| zRy8TZtfie4U~W=FDZ#A2*>B@+Tu~{(exrFsdJFkY!&jrraUUirHx1u}F2!AgwA|Er z@mUZ5*mIow`TWX&J?}u#8Qdm80eevX!Bx1~JQ0bPS2R zq^7Zfgnj1Bh zU54PdgC$37d&iQO!pL=hic zT|G=77hLOFc#Qr46+A)Tw*D>AAF6!E6dcEz!>n@$8FF`%!L3$}SoV6IMAlQ4ND)Z7>%pHo^oTNF8??P)l43Xfo(|m(N}~ zdxwrifXD;PDW?Ct9aA?Gk&TT&kQv_z{!_l;T2=Q7Q;qrKbs};MH z8$!4_#i)V~sBdi1c+4@3y$y<#VLdm;UfE%M`2%l0Z3!t)PfhpH4zKJIhL%?+X*a6| zA3`Enib;u1Pm0`o`qXAj_o)wu;ur!1W>#{$#M`C|3 zYc}dQ6~*OM+g;%7tb;KnF{=fPnb2_L(}0F&+b!_*enL2Z@wFloSl7K{)6lnB53pVn+k$I-bDMGv zw-G+E4@SNll=4RYz1|sjszLfC7*9D;KMnb$!}ZfZ4~W@Mb<+;kQ;gon;p+da5fCp1 z*tbp6$8F}97P8I>nEK)SqG98q`&ob;UZzIRw>avKyTkrZkG!^9vtGqwxLOXyJlrN- ziG^_Wy@)x;jeDJQuq)Qelc-xNkyi@3l616G5U&h$bs1@~{9O*bem!7`x%pziMNlir zMe}8V3!qk)hMEfimuO&x%bcomlPipt*uJgd)vbL7??1!)!uPkbL(gs0i(4QQ%GZzW zI_f*^!F8(EOaZ=AwqzvSleS_c$O9}G(M9tZPtkILOaOuQz2lay9H+qP+bk{JHr~eA z8Myk&2d281h@<(zUGq9fIc~jxh$7rgDkP=2D}+N7U~gPaEx<41&^42*XW;XH8qcu4 z6Mc2TNuh69c4G7gicdnp@g%6i)zEDcn!g*m8~>p~)cozxo%m}Jqjv6x7SI8wVUYZC z99Fp^nkM9Ca1Eh}KaHm?+!9rwq`FvbQPQ$(NKY`jNG7 z3F!}q0sWyBoPVdj>L$Jo^Y8ufeH$Q0UT^?2+hHWbc!+4$BbGbnwPq0mIkhn{EwpQv zhZ0?9>f7vrdgAYVNulX@z<#^!w*+@mt@KX5Lsw7hHW18LEy7YC@S8uidvn3*zemUqz9Nlh`_PSrb{)w_%0xXBFrA`h zQSzy4)FVaX{$00S@Hb4&G?Z)4??ivYRL<_WZL#s!G^7?xfM+ci+%5?kkNVU8B}{@( zjk)Ja$D=+%jzR$L4n5EJZA;m$tgu7$?#JW7<$cTI)pZKHjHe?%G`&Jtq=SQpBs2KJynZa(D4yW{I4SkQbdYO_4~ShR0=;#ky11&&4gM2sM_OI@4Yv@vHq`~5o)05J{hOa*G4z`o)U;~*|=7ud*54Y1wX=ci)zoy~Pcqw4O zpH(@)dLXQe>RedK@4xzx^m8m`@SnP_wZ)QA=$~hP(_xU1XhL_!A;nc*ppZ>Uc%1&`li}Fbr4bq&b)~O?jYa3SODznnhQ{9PUmb<9s*X!Q48`b}jEY5ZiOy1;IYDuRgCJaMrYfbuI9RJK@9T!?f`EmF=+Ebig(= zhFBzG2jm-=d*9U&K(-(GLqPrB(r{hs48s?RdtyTf&p-aD3Y|>W)P&4!0j?G%?~tsF z(6?XexDAkzAbpht@}aKQA*K`bhz%?N8wA1j?uS{G#g6rMBOnIp-1Vo#D^OhTypRNu zPuY5Dgyh+F9I`alYwEHG>^}ptHUi*>jcI`mmqhN$aE%3>KEUa15M$#ji6M`a z2g)H>p3gSk>A`w|y^2Y zG;+R{uCmic*!q=umQ&P4uV-Eq!ZpA+x8~~;<7P7|eIWRVOTb&g=DpLZVlTeF7H6~qX);#VK;A|#!$6d#m#P@QjMk@2@C z-i_k~!kDQ)B?w|kJCKiJiZVvXRK++(3M}>Ja}3z#|1$lM4J#lsB&G^n-ByE->4e=L zW8Sq;K1;0SL-bHp=v#xaO7kk?;05(R*7z$7$@W?%n1C1SCn2L^)q|)CMY5AAXyeWN z0DGt-Y`+xgJk(!GNp?WjK}{-NGJIUxY97CYINm*CuP{npYAU??Fio}*K2|EreoUSirWBw9$4QQk z@nqNzXmkyYO)v6&>TVB_>ZtgcJvlY0aPxaM0sJb%H(J3}FTwR7TCY7njMpuk%ZDvnnPo?VsS=qeM%2#QQVSEkWa?JoT`eM+ z<6bhZX>j#2a>Bn6lx(!AR_y=S5MEN{@lO%;Hv#xaVc%iuU4Dz@D`k+7+OF7csf|FK zR2um*<`HvA&Ch#AF7zV`ONXGN?m;S5gi6LI_nftdr&o@#2(-%AB7Ck0DYTmd{jWYC8_1c-HY5=|gT=up)B-b5PTAfC*`LD#&sd9tc)&=V(AZ21$L4T0 z%6t4qSjbHHb0>M{5UCfH-{Ud*Ii~H^hZLY%S)JY+n&I~t@`?pvvPG0~ zI_7taWXe#e`OpAZ8LHVo|fcFaq=84yJZ&WfopCLbb@79vDY;>Rkx`i4xi*Yk;A*IWzDoz-9vIi8Wus}G3Gvp#x$C_i;*SbLDYS=Vbx2%#z4k9@wSmQOoHi+8~!_ zOvCvsL#%Tbxga{qSg#%1_;YM*CL`KGNlNZHg} z0dMnhhXH3+4_cskIoPv0kMUo)ArMi1lT8{KY;B`2)QrHv4dKkBU?SJLipzP?b39jd zkxNzx(_3#O`#{u~4A@K~6pK3B5!rjHGA4=Yu|65~Ez!+1SfKz{iiVdeCX-;_vm%oL zpKZ8O!1$p{`ZVbg=hHXu-o0@R*W-1oNaWfzhq$D;pdadv84dJf#$#PQ)wB_!PNyDF z3Y_!`R?#OkJb{%X)g`{pME&CA(00-45|?|SWwIT#ffcM+&--jFsbQ&Nh7=mIO&b`y zj=jLFOse;(<@*h)k1@FItIUNuk(P1PnCR}MX6i9Zi5U~B{u%Ll88rFipxLjRCt^5) z#EjkH;O?r9f}cpy}W0Pp_E80urW-XZkp}t379B4$qb289IorZtuHIW4iD> z)qHdS>Eiyr_JngeL=Zr&fvA61eCue*sn|qOKaXb7Cd8Rxai9_MU9Tk3X-n-s2xSRQPFZRsAd&kT|8eTDL zi0MbKx4r~7>h=?pTbg$F8a%9NLR*nx9Q-j7;Ca6O_9LW(nt%IGBO>?Q*X&nC5Y35U!?pR-rdj zL=r6=rs4YAOA4rb-E}QapcG^mDspyd`|O9mX5`@Yj>g*y*;TTT#ed87aPP*+!2UWq z7hZP*iceq!_;5(h>^X@8jYBxpdfg5uE9Ej9j=m+LJvqbkKsLp5fIr=j|3U_LWHi3N z9``2`CdHTc?t417~)JOz-C0KRZv?lS}bvpRf)jo*;9iF_7-1y!Qa$E z@8r7&IZ5-pf{bI{Gmy+5WLb8;<2Rj{ThxrBHIKn?n0AaA`zmvhb7G7M%{e~_{GxDb zV@9DjpI`ZK^9jBEy(oOco{;#FLMK1J`fy>m*0XIDB||%GFh2&l`KOY-M)g z7%th@^ybz9)HS?raJ{C=dT{_vO%GR0)J>Zs1(PG8s^_^uXt?3zv+ai<{|%BkV_!~D z$xpLQ0e}R6fGikAE=!UX%YIUGh6}7W}XGjA{CK?Jhxxy;sP z_Va}2wPKUh!`uZJM#bIl2Ai@k5J&&+?NxvzSQmgqC9JCzy%0A4)~7|e@V_mcGN(T+ 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%0A~TpK4l8(#jid@iBe|6bcNQ|#&I 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

m4Q$DW_!I{Nsv}* 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 literal 0 HcmV?d00001 diff --git a/packages/NAudio.1.10.0/lib/net35/NAudio.dll b/packages/NAudio.1.10.0/lib/net35/NAudio.dll new file mode 100644 index 0000000000000000000000000000000000000000..84643f17cb00c24bb19847a3188c7258473b581d GIT binary patch literal 513536 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

?`24U~?|j&u-j5UzX+Ahj9OVSw6(B5Bp== z@KLe`I}RKTuFJmls}PCdqh(`uxl(v*8n_MGsh=@&9>ux*W8`9v>-za$_!w!zam}fp zp5bGqB6IzWlR;=0kK*91cj4pY!(>ixoUDze{b!;%P8QJm{CvrHd70Oz_8u?)W>b5Q zm-pD`Og)}WkXAm`&kgWIa0vU-VR-AIIZ;+&{|%l9uF0nU@~W)IrvCD(Y>Ia3BU^T* zIF~7oZXs7&BWR-XI`uQUN2)s=X;&ssUJaBr; zT$zr}71>Yf@nou;L2=O$mWMm0@*9rFg5L?BDsQqULI0IOQ)LG@j_UFA@!hokcy{H_ z;jL+~{8@I%c#l{aK245-{Z@~M`get~0n_C~_DFDum@YqJ7Z>Z_W6Y36=p3~VJQn;V z$D92Rt``KpF1K<#8XVzyUG7FZ+dorYr{%GJMfgnFb}{AOxR);f8!{H1qr$->%r|5z z+FAci*$M3&|KF57Ij-A(Q}~-wkK4}vur2&88ARsx&yykONg}7cuFpLABsy17d*#U% zWN!aF8P4&|FkWYR^JF{rE^wePPo}fI)pdNf?96@;9O#=ZUm$aObL1d&3I3k;`|vq( z8CxG8kA%;aUz54K`EtvB>*vdzehv}&^0=Sx8uMlG`+EDKJ@3Nx`S1d{hfV#pKptgN ze=U%uY})<;d5ul&Q6R-qs!w`eqd- z|33H~`7{}ymwLc@M@HP2-#c<1$7%d}N50Fx3gg+I;qS-~*>wJ}P_ASr!1=^K;S1$D zGS~mRaxHMQ ~=WRy01nFR#(^+&=G1{WT+~Z%+Sx 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 z zMITVURQ7r1a*Q@vfG%kR8*drVICPh8_@A8v35cDCT`rM{@`A20OI;u%>eXU-842=>;P z2N@0^Mg!A#TSItAjo=}7J$DVFV>rpq^_7yCTun|N$vb`bU0i}2Mt3{1OgQ7Rj?&$b z9>O7Zvp$6tEdw@D72X)m*^a%~_^&$NL)qRJ$p$mD{*fBwc)Tb@xa@~ z`%sUd)RPg(6a(l~?NKg) z8E_O&zDM!C=8>wKRoQ4!^Q^Y9KE`=jH#^}tWrL&wHB$O4LaQKaK}zAhj1iVdu`q%7 zIYqZ_r*QHJ)?yMk1UjBW&0t%QEclibSEk+#Gt4JlE3*+7D6(b>|IJ{`nd5-}q7yQvj;qmhg5#{e$n z_JBBCTtnzQ-6p06GXZTgQ* z{j1|2wsj$isu_ZXi$vhOzK2+i9d5Eq?FbEMk7)qVC*;@ka}du zAw}@Uw<9cN2q-&f`Uy23`NowC!~VWWr@15S8xaB1kBiB^iH%5aDWG@1$Gy#No-$1Z z*F^1`5$8Jj`GUiM1Auc%133?r3*wdUQ z2GxiNYiUcjmF^pd{52^rE^Md47k7GATr)a%7gF}OAK)JSCR#Vx{#azz9$r_?qgPY#V!y#|FD$Lvd0JU?8G{sN`exx{I z#6a4ZiCs^a=t|+wNJP0BxrrFLrw-GDUyUbkp_HVB(AkW1zKHt^QU9V=X0pU5y0Wf? zRyB{Hb#DV#e7B;m>g>kpJzaBP-8UC>);AvGM((7rFG#Y3bj&m%^Jpy>vA$#K&3D>G zdb^w3;J)G9sm{(?x47SjhcC=6;_@NkSjAJ&cX3RiI8wwbwTyVrznsQBBx@Y7@!!cm zIhW}AFCV5zj9(L++%sz&HArL~u<~KZLcmtv3@i5(<{tj_4 zQb!cV?>ln_IZmn#?Z;ze>-%xC`pdUC$LUv_=ZawRu=oniZL1*CA7OuZjE{Fvx-+=s z30JH8jp#(FaeeNmH&+|*b}Kl)%+PZic?*DO?}8|Ys6wZ?M_-jrfn?Nykdu{@CuIDn zqjbj0xl4a?zu<`gKutx5IU6s8nG#zVHIO};LZXNy4ch^V>UUCE6R4~z*&%Lfm5B(d z4TC|aE3Flz*2WbQg-nIrmI(fyAlEFu!`GEN+s2azZi164blf;2fS~r}pOt2V74eRV>qS>mN03|#{KAcI3m5}!x%=3orS|V$G z(j6Pg)8psw>K~I1xDHjK{RMk9q=fW1yMv7CAh_q5#W@QDh<0}9 zX+35_hGn@RvsxpgT+5L`tAq=U8AqMuhGxa-o89(iLP!LKB~~Kj(1Z4zOtA-NN+j2ed*7eXiPFNn&c6t8n;RRL~7zwk(;eL_X<%%Hjg$EYtzZLR599K`$g zOH;lm0?lgVn}))^VFWpj0!)_9keB436>aQ~j(N7ar2*zp3_hB#dB6&S#vcyOAz(P; zzPa~jfvv-Q5TUVSKMqL^r;*6Y>_6H#re_V+A}vrae-1CMZg1}7us<$uWLi_jgPzA| zp=>A_r?2&8wJH&UfA}$qTc4`f2P;BF*;ZlltRQ_dDlAl#TDAOFI6L5J^T0!BO|&++ zvKNtOH*vi77#^}zrg+8|LdQeR5GT!|OAd~6=IddE3Y=pvA8Ly41RV2V>U6t!zxqCpD1I_BPLrFOv*0=AQ-&YUuP*-*ePp~rgKIJ?jv&CB6g4}rbBUWONJU1h?$FQHl z(;E+FJu|CrVBo@9)U={HhAR3eI>6wUBs_oe#N)6*vr= zly|QKQ$26*LBBP`!({AJ$Sh3uSvsJG5a)ENfoFRP2mf%84>0cHvWe&76jk25SRLF~ zVW}q=-cHEP)I#}(7L>Prf#-F4FGm+#d6q7x!5a$7@4s>~QdLBhu0b85(@IV=zUuiE zWX)v?RyV_?WGc~}-aH$=&~hsNRT=M@9TKWW^o^LucUzT*ZJc>u5CD>{lh3y{LQekIxFz3y{k-o;U zJ|0>qt0WJ_;y061x|9;180V@ZgM*kpV#a!P9kZJa;(ZP99nmD-10LnYe;BMDsLmrw zb?-RwM3m%2$+@!#seSv-8yD(O;_S|U! zeRdVtGo@|KZ@b{lMqI#&K4Lfj7rH`?F80mS%@hCs@n1jP z-90PBJ(Q@6^qM^vSea%p9l1o_kPpNxox1cD0}+fj8#s0)H@gJ}A_rp7c zNP*ODM~Iql=3!i8{7lge>d}az3J%v(I5u6Mv7WGtS8P_!gLpM2CLLCGxw`3+hUXvC zLaD8ZD^$m3B2w&5iX%4x+X9jKfbN0^6?LL|_ zO_`-@?XB}7GuD$F$I_#)Vo<{2X9R8*y#a!o04UrBOxZqKOiC8`k$a& z*M#t4ksvCNf-_%@lM8^U^-L2=13I9d;Uz41fjYuN!bM%-OF3j;EPl|&P+SWMES8!s zhKFyi;H;O|qu$M(PWU@pC*u^@^0YCdCxHm4E!c)uB5tSN^$GT#PY@b?*}Ax@!o077 zo0`cf5N>}8fP!`0x0xp22?yP#&vbN9F2)(47u|1(EJ#V4c>txKA!0)vN4(!@NNELd zOK`b%*tXAmd^081YX5q<-g97+e{8^Tbknt^G6|To9qThlx!rju;XbjES%!zY;K3}g z;I#~<4OP~1qcvn(V{h(OIQ4G$hwkxNctBQq%5cY7w+@^R&OPgzw1wtvcxIR^L1rHeB;9?5tC9;T48aHqH+Z^bA)zqYMDQ3(%SIxJy9A=33B~og2F^2rhx8U_d+Fsn4uS< zF}jAA`Aa$rqi)kny>VQFCgGetH~Q2l*M)hXdIY3ElyM0&SX+(>RFyB1+Q^hmK8X); z{sI9UwoYh+IU%$%wGiRq)WR*ahNKiK+ed%GD33Nqair(Ls+jKmsw2Nan!s<{`9x*f z$W3*M0X=4XzMl>*4(>JqYVept1-ES36Fuc;r(&fU$DlV& zcP!u77#Zqrlynbm78>_`PoTF)f;60%klAjO@U^!#c6=5>W(?x$zCrb6PdsUbtI*tO zj%J#PQ{m36Y87I9h%lCCz68Dki>Ffi7GPw)Pn!l+pgs62f+anKEw%6Qt3^9YXHj5^ z;4&F39FvDTv+4G0DH_wh3NFQbyLp-~R25q>&26!>;Wq1KYvl=y#%T6q^XXH8#pqBW z+t!DQu;TSyZ0MV)UUnbyY%8#2TOr%oR)oiNdB101 zA%(M5;|4_xPafLhdqtb2Fm{54D$4kepr!&mHltJcUhyc}Wi>ld(H>MBSRw|p%_o`~ zw`ecyWW!cqF_jJ55qxtC2mfio(>lR+YW_q@o0qSQQB9?Cw5;_784zWdt%G~aYWuJh znz-kW^ucCqS+%!}FHv4%7FR*fGVfKeGBbr1imVAfH4&yMOs^E+vy@N~4z*uEZKqTz z@?cg$n>&~{E;jmEZR{|C^TvcSwT4(D=ghXsf;)s@WvnjzB;5vv3EGz~OM4!jQgP;d zty@y|#MSp0Gq7d7YSQ$)XS7ub5^_xnrXle#^6kO_!o}hgK`AJk0g*68EKV5Ny=;Ss zSmFK~-!ZbYax*d3lRY6e!Lqo{6vptf({GIVXMJ|>nVpCBATj=dackj_`x131VY^vE zhufVuw4@h2vgdb~gHe#C_Yv5pfW`z%K%nv2Y<1v(?d z_H}S3lHlIo=7QQ0;Ds0DTHvxOyN6d$-QXC2Dy*d{z=sk{vXB`%gG}?q4B;Ne%y4aZ zRv@u(+TSrjYvg|Q^ZOqP`}OHlTYimswrnF7r%EE;RDoYslM2!%r~-36E1a&)K!u?* z*?Ad2FMb4h`S@5xx#6Ndq*CrDtB~n|t_tOR(2NsiLPV!sQSHX3Xh@IATrQFQv7ewP zK2#<5B*Xa}6C{e~ib8u=5bHn%mA)aa!~q_gu6P zcG*Q>wo^`3r;5Mku!>^U2?}3QfK^66c)GS|Xk)42+@hwB1H(P7c)80XEgxBpYfh3b z?LWRYRjUJhm4ma>=cL(X=)ZH}Dz5x6rDr_O;NioQJQ3aR=JW#t&O~Gk3|OCDfvYMk zY4-Ag7q_u{MeLrdU*`cz2|axZV5Mg$z6P)?!7awA!0K3B1d-HCZLzb``PP(+Dp0_k zUlGjntvQBVUJDc+(gm@VL9&4LmH<|XnF`|^n(I`a53yXELg=3PDYWT9a!GtTg)f_2 ze1{D%eM`BqB`E2>;sDW1*j>cdGYCzO>1wS&i-jLS^Jqdum?70faN{|7bU(z9PYnjB zC)Fb;S%Jk{`c%_Qmiv>XD#9QPUZ3F-Ji>$CyR`F7$qpAwf z|1QNRyT4)e+yi$KJ^T@|7?ViI?4~D6o+)R)&9#)g5u<)?9LdXE$?>i;=$wg@Rp@04(M_{-zb*+6zpxHU6AcC<Z_N(6GuOtEyoeLj$)FN@S~i8%@g|L)+@rj_C_j8&?!a zu5XL#c+?guU1<_AP}Jj@8i0AQMYuF>K~&8e$ioJ$(b1HFVy^9YDd0gPsP?7{l$P!s zG!DvOWy_OruMyakmY1r`MxO_a*?Um8%*}TeUMf<#d(L00w`=H{9-ioX9L%-%&=2?X z>E$yEXYX?x?bmwo(29zXl@(zx%mMZ7r+JPYLBAC+02?z&J#TqtWj*GaP}}3lK@m5c znnzb*ZX!Qhi0Vl#scQvA&^xc_E*f4$)5{I0A}oxx&BMV={$r_t^#>;>)7y(X40iC4 zVU`fJBxt*y5$TTSDMaxREasRGJz@%Tz{YT{n#0y2fB658ws!%q>$>hc_c^!#EBuwkRGqpVr(-vYBggaq?REA&=U#vhgNP`s zyU%{Cz4qE`t-bc+>|=*neHrgdl}GpbcX2M06F)mCZuv41`jA!DA4{^OpK6;{t$*Lg zulS^||JXf9p{ys*?mDb2T^8$UDT~qK27b3yu}|)hef!U^MkcX-NiqrdS;k~N^XOTB zJF9G8e}A$Fm8?*Ory=h42oI8(5R^5tb8H$$LdY{k*Us<-n}I_(Q*s&oqj##351fT0 zdQvag9`at7@AUMk??4(x95^MD#>ktMJD)!Hmat^}IN$5cAMAY+UqR*(|1R@5m}X=M z(A`~{VryKmb!Ap&Y0V5?s^8AZTpb{9HC!FQySKhy^-=M=!>s3lyORZ}pA(r3PIxCD zX3Q21liloE&usDd$z?hNE5Cc-x?4C~s*=`eX(V|G{fdaP6O7rBe3>3bvS){IS})HY z)%2d8J+3SE_I035W%_};XOCuvUcU;mY|m%2-v7YL{rmfD!Pwi6uHnAKbeYSVK5|`| z>|IC=H@teY>jyyXuJk5Py{FR$O@fo?aL4_y)^oWZr_XX@iP=KZwv2YB>^50hyX>iP zOX67j0eN0!DgG5)=1BT3naASi0J`^cK*yWYSPiWlzRX53;&MBjwoitWvf9q5h*67^ zG}xxOiB*D$E6OZUW(sy**AUZH?&vHoE1GfiG3ChvYVCPx5C!Ggd1odm0 zW)ETQ!=5<(XQBSnX}ZRZfiw2FQ|BuO{ZMjTACV;FPudZXTcN?yZwl%|6eEeF=0}iH z{6n1W@}6mV{6HuOcliQxSl#sd$UcG;e|E!5w(Y~D&$bwmdG>QXd!~DB$I+g-mmvFW z3yzj%=XLz@Pm-CLwgsVpW0m#<*7QjYD|^s-eENK#ROr;Ia1=d7naEj+wJbu2rG2`s z!XGwc&B8Jc9k0w*_6)7r<%+aAJH#?QExTlq=CK3)!8WPzHE%%NXkBzjuKgeOGkjhBRc9=j!&cvtccOhC>B+(D_J4iO-Y|= zQDWee9KMaoexvQoBneEo*n}*Le2C*4N#7+aAEoES{ZFYiJ@DCCjMG#k5o(J%Z8^IR z5A^YBr_B4wvli9oGeFrs^~j2~oyU9xJyaG!j>-(#XVNoelOVCI6<|X$sTEP=(mF^* zrt%o_m~l)Fgz2zB2IFOtq-lH*Y5NJyb@kUd#GH44V;*4%+`m}1$NQ;@N)Gua&)KD= zB+8q6mF^K{uT}n6T71&&Jv^-S_dP5$>b5w6Lw3TX;wJ zv~yFIK#$nQhFTu-CP%0``<^~Es5OR6N+PTwBMyw0XN%x$?1(3cy3IUksP!>WCgBN> zKkq7@Ux&$T5{M9%8ytg&PPv6goDIH*rsFRqqWw6$y`?8W=uX8EMu(lug`;@W?S2J5u3Bl3$6AdYZK}t#Lxa zo~I#u|2lcXD^@@Jhor&{%L&(@W=_R)Qk}7NiJ;H z2|<)Yz^~qUwyOL6Z*rlBce+D3bCQT`o3+rPTOs=q89ChMgAg{2OqlArcvCt&_(K!q z@yk;7wGJMIM#@U)=#Xyt^atSeUdTxA5J%xXMM;;8kZNK}N-D%Wu|dkO-fiHAvp@S! zC~(|}8}Sdv_K%Q2{GL-I9F^JLdzL4)LGQXG4}8+J_xQ*`t(HDAFko->$SE|TqdDI0 zI(>B20-81WxuZSVA)`#hF=kqpHmJ*Dw86j<93F2H>7z20ZZlmZW42Z`izsOao14CD zH~=0HCRtFDL{$7ZokU|yW{7?$oYvrO3~G4BxM_-_H*nkzoepL*Q9a~;66=7!U1m{z z1eN;$)%k!OO7cO~CEMA1%s)u2lF-p1A3=}$qhbCSaVbjVt6Um4@+@Z~eKLop{A>#G z_c2u8<5j>v9*0JhjC_Q3{cGQ0Ze6qEsUiBP{3pu*0zX{{5knliD~lOmYEnvmCWQJD z3|miqOh-3QiESrOg{c5rh{-^Iw?s(F^^86-`3xUbIey|9-TU#3rLU*`3sbiHpWG9cJZ$ULHp=ls$&>a-@FK%wS2CYVQcrsk=C%GL!uXzv zAcwe~iP@$d$0WD9(X1 z%jLI-h}3u^Cuo<>nA`S{kCUa&Yz-Nrp_7LRge@V$wjD%>eHVUhn}<+oi^o4?ws&~0 z*xDh=wmAq*+r#mZ>Hdv9de#h{;lc0QuuYSu_0sXaU%RySCJpG#;$$yDBAG^b1-G~d!;Djoi} zQQC6c|G=vK`sk_JHZ9hgn2j!7cw%Kol8-UdIexgX=s}IVMB!m2lVyuIl_W6JwU}f@ zQ6sLuS-~RNfCy)>Y=W5JJ8??do{bqy43MRZ-fZFl|9+Gu*~BnGY zC4!^DQ+08QTxUFog~2O@4=KsN7Arai`wlalZ$2T?^w)KCr0e7v%^LjA9(|2oC%F@` z+@SseWf*18OyBh;aVQ?lq|aA+fNtGCnPMnCboU+B_kNQUvQ^sFq{7Um zd#I{paebEb$zv%QU@M|$EK6(f&F=WXSZKjINi;&=c7Y@iQFDCx*JM{U-jg$ zg_8^1>_K9W1st)bqeJQr3-%5Vi|bu_IY^6*{oCa2oYwP}6Gsn(zVHX_?fT2m<7H7I zhNJi)hv&2S!xDcs&MZ}k5eue8WYUsds1V~F_VD1%VR+c--R|(DR?1X{C#@++6LktR zaUeqc;o~D3*}{`3@#r&AQi{qb+sZ$xkwW*;dV$obQ%xv&LJQI-cJnpmEu|(MDJNEo zU*?viiK!}V-?~$WgRhb)=*#7D_W46GDSF=*-v2R=Bu#oBp6Lw9yhP}b$xP|NKBci)U+0#vmSXY0 z!|bCJsa1;Or3c@=nP=arnP)ABWV5sX-aDL)*`o`Bh6iABHg+h3Vk8iJ?8LBcvE)r9 zFa3M8-3H$G=Sto~Aoe~?*RmY_$X<|Su zS(ed&sN;tE99`M*Is57`Lg#OwAes9?w+|i|CM?y_T9bu!&eq52wuiyKgGiDx_(e8* zH4U*ip(u5E67nmj>gxgRcZ4|a59%E&%WHeNJN#!w_*N$z@os9DoU{?UlHa zSEn4M{FyM7JvN|oNhCl^=|P&JP0`ZhGa-{FkN0Ae0*PWJj)ARG4TnfDhIO@4q$VML zW3UwQ(7?%1U{4w}LlzPwO5IN<)pBO@xGcUA!HSu!@s!?p%6&clERHFiC+1$bDposgwC-{U}yQ! z0f2kd~wlg#bO~U-|d1 zK&)TBeEGI#Jx$Xh$;k{XNl$`I2}YiEPn><$x$fuObFSU(a09O24Z2>p*NMY=YIhs; z_nceqo_EU>+M>9lPV2^{lod*8*WdHb-E8^VU7ymA>ffL{?hg6#H#^gX>Dm4=AQj zCHp-dt+*=hfIE|vJ*swPF(1$~7)P9Ys3$3@FD5F6n%dO{@Eub4a8i!CdtA5wXP7B} z+}GFd?sl#Xs-SqU;x%b^n?-|G4g?Q57rDi|gr6|A=wltkD=}>M zc?T-!5U!2;RO*QSPPo&8?Jg}zUuCIoS4}~ZOgdbqokr=E+Zkjkk(Z@uT~<0!NlTCz zx2Q6Q=g(cxOiK?Yt?C!u@Mtj-tXs}JEex^a1|J3ME=dP04A z*?f2I@tW5w4kHUAm(SU;O*wkisv$`mT&Fdc#d{a>h&-pcFPpdHap9#s$og@WI3=nt zoBO`UR68c?tU7gvfO}TI^io-_+mY2{!eW+)Rt+lmk;;5aXX14krdxJNufUF#4Siiv z+s$b&>`Z!~49C(=#hwubNA-t&#I}{?xUo}hLWb#&inI=T_8Ff#C>d(^dQRI+lHf&q zX&i8iM-(6WBx5x;mg{G`yF->8`(9}YM*R4JE^btgRmyRvbA|HKw>h__lB!;5EEZPZ z(uk)>GBVHFaZ0gne`l!#)(5I7)2^14m%?t9k2-_m2xX9gcIEEX^C2Hz z?m9GHt#s>LbXz5b4hi5KvTs%7FM`fs*6~`W*8FQ9~S>fGK$zv=gI)MIS ze;DVGS@;VF!bt8G2QC>u;fv?N(r)EJ7Z`QXaWuQE!#yNAu^&dooh~Z*hJoW? zyVvLNoWHrUFOd!;j`)-E5bGo9V zlWy_`EBhl`XBL}#I_S(^@gV3-+SYb)xYzSC^j)y8M}0h8OIw{Shy5zo#6+fhjbreJ zJoM9PwI94#doWsEmgAtt1M*mDq%-9$9;3cvDoRXRv921IR_#vsWg5;L;-K;%kA~$g z{gQX7AI-c3ZwNAvoI)A(PNyuSk|$};sjU@MgxOZgQKLWDe*D%j3)`!fW2eZmE0K>! z#RaIfakJf}{4zV|=Unrwb|3D$yhI=Kw82UEn^JEvX^-1X3mHy5{^fcKypFtI&g>G& z+9{pEKDx!oZ;0KavPQRg@!5EMxANTd(TM(J9sH~yY)YOJYUV<#R5sH+PcLHvz9h@ z2Vbegjm+E`VYm98wYeL#$O7zFC>WEl5jlRvQ^*-J-p!iyBX;N8vGL-HptCY!s-Z%FV~q(Yd04;R^JxRIffJ zoClH?CcS!NN=JDMl;5`(S!4V-B zk}QYuLX7+3Leh`SwaVgsKbrh>dK$~=%)~Wfy}^g~=jP+-m|Z3YE;BBgfAYBRIo3Ro zc(;UB)1r1)k+L{j>LKxAP#9QUNlRp6MFCvL^P)!M*5k^Lw+f$+D#R$|+5(?vOkI?6 zyvx_wM~fDvyw1dCdWUh6889vJ?aK7dw6sF7E2Z(b(MCcW(bHAT;HjETzgMHRALpyO zoU86~w>Vd&b+_s*KGdzJt$Nz(pB_@^As^~gsMCiwYlgMc`vl#kxxw_&f${ShwS*Zx zoJ&2UFn*<;Md~ZL{pkpAb+l`JlHRaceB~HqUQap-AvcU)S-&YeHoC{>3V+48_F%xf z-P0P@Su5$qk1)GytESjjKg({jp2MdLnA$bg;Cac5TM|+YyUjN6pfFtnz5Jr(^`wU z5shb-jEyAsPC=}){LiK4GxvGwpbxDn%du#;>b8}DOt~eDfwmsT*p*39{sH|%do!^M z=+!>YK{VUf?R^nuAM_s_?v*SsQrehgl3-={(<>wdHaNuIj7NawcKbtl=Or9mYu#AkTvYO*|G9=x?8p= z1?o>I556BftjM!8OFiBby`OTMk!m_OH!BzZ=S5Obx7AQHO(rBx!*;VtX^=&D~vKZ+FVYou7%8Do0KfECHvR6-Pvn*J; z^RZK5AFCbVr&?uuWw|G2{S8Zc&NK!UM{7@UQ$lyG#5Pit{nk#gw zPeR}Om<4-P8+qVdl4}W4Pmhz6)|FD~cKR0Mo6^ttbLe?lTjmFy!M{}73N{{@1bObw zM;6WAdWoLL+|79A3fSjhRsHy|fYBc7k;x?rDQWwg%n9^5lVU`dW}Qcr|A_D%)-QaP zjLxs{pXcvXinWoMq`P^$%CZ87tl_WdOA*3Ajsb7;()5){IwKbRq3**Kc~<#6)L{GU z^o7SG|2ovOI>`fliAS_FO+e(p*u@q}R>#nS%kCgOH zd2S4O()OF)X490(L7dX%qwy8 z(AeYdV=Czi%q*F2px0OiSNE{uk#slzVc)ir@8>oBkXkgTKj~iMR)zZY@2Gz=Oz793 z_{^w*?@LVKz$3lbNbtvltXUtXr5fy2Y$;kq3{gPbqs9 z)=H49LTd9%x!bTc_%H0^LsfPq!rfBtp9J5))@zMBPIic%q<67_%yNCM%^palE!YsaGwiK6ds6r#c&mxMl^O*eXN zzqN9X2|v;qaj=Nc&Fqss7b)QN0 z;EZpfhejN`0?B&Ew4ESi#Lfwn)9sc9>{jxCB#50hdIS9Gje$yz;Dgx819Pt{?b%){ zS60g^?GrDv=aZm-Jrz+6MCci}v62(?1|9)&z-U{!?vRxb*Rx#h;U6tnq2G?= zIfN{3eG+S_z0yU>ta9t!25I9um5jW#snk!7}=M2-TIl{EYt(h}S zbJcgtB`0&man1xF52zIx6u%}w8#=FL^>u18x2#ND;BJ81h#*^Ul{56JGX zRcM9&^~oda@G<>*GK$H&M)7NvdO-j1BvM;IZ!u%I{?@G&rnK+V(6viJuk6%8QMg{e zoCWJp8~cS5j;$6XtwSlR6>BoGMs4bs)xgfJ7CfM*{)*Nu7q;tfoweY^8@eL%RQ9=s@KJ6I?rgZkly{@3!e^nzF05dWug}= z^$UMjc`Cs~Pa8$%(@_&WZ8(u0T1Q>hALt!=vfkt0pt3w6PxL6*Y+UFNwaB~i1YLs? zWM`$vgfEJvVUzZo&uCVDt_hf?h_` z6~0aD6tYofwNkJ#hTVD=&LL;WBW;2He*H#0$OE;Zm&h#KrFX3F7|YOVT0yU&-;9q3 zeO}svZGmIh0(ud?ff?Ds!Wegv9qb{PkXDm6*$@ip$W~H8%*@`++f10%nc@_aBeW68MDQ-N;-meW9RUwI|Q-S@ZNOF#un0` z7>&lp;91~fV)ty6!hSFwq_zyJgD#q-Gn|Za!Mnn8*r;P;Cc2NMJE(Z5ur#v(*fg`W zj65dyl&0-iA3Pr$iThNNF@23Nu{MF<%xFYAu|+m&L6iB&*i1Yb>cOI50V%aczl;Nn zSlB08N82|B?uy|Niyu*VkM{SH~*j36i z&KU3Uhv2x4aab?BOYl$%{}7DO74_h2n2a!{z!Urf^U2^Pqcxb!Z=oLQwb6Bz%EEg_ zkf?{2;y+M3Ee&mgJ5UD>eL(#tALe0DCv@7%kd3C4 zhf?|y>Eaj3w7#?v)n;W@$|RE-jV7q09weQS3aLS&kw1Aifux(sRKUJ2E1tG2>z1~KLlHV#8}^%PfF{|V}^^^IXr!= z7&ZsK$+O>KyXd5|ℜ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 + + + NAudio + + + +

+ a-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts an a-law encoded byte to a 16 bit linear sample + + a-law encoded byte + Linear sample + + + + A-law encoder + + + + + Encodes a single 16 bit sample to a-law + + 16 bit PCM sample + a-law encoded byte + + + + SpanDSP - a series of DSP components for telephony + + g722_decode.c - The ITU G.722 codec, decode part. + + Written by Steve Underwood <steveu@coppice.org> + + Copyright (C) 2005 Steve Underwood + Ported to C# by Mark Heath 2011 + + Despite my general liking of the GPL, I place my own contributions + to this code in the public domain for the benefit of all mankind - + even the slimy ones who might try to proprietize my work and use it + to my detriment. + + Based in part on a single channel G.722 codec which is: + Copyright (c) CMU 1993 + Computer Science, Speech Group + Chengxiang Lu and Alex Hauptmann + + + + + hard limits to 16 bit samples + + + + + Decodes a buffer of G722 + + Codec state + Output buffer (to contain decompressed PCM samples) + + Number of bytes in input G722 data to decode + Number of samples written into output buffer + + + + Encodes a buffer of G722 + + Codec state + Output buffer (to contain encoded G722) + PCM 16 bit samples to encode + Number of samples in the input buffer to encode + Number of encoded bytes written into output buffer + + + + Stores state to be used between calls to Encode or Decode + + + + + ITU Test Mode + TRUE if the operating in the special ITU test mode, with the band split filters disabled. + + + + + TRUE if the G.722 data is packed + + + + + 8kHz Sampling + TRUE if encode from 8k samples/second + + + + + Bits Per Sample + 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. + + + + + Signal history for the QMF (x) + + + + + Band + + + + + In bit buffer + + + + + Number of bits in InBuffer + + + + + Out bit buffer + + + + + Number of bits in OutBuffer + + + + + Creates a new instance of G722 Codec State for a + new encode or decode session + + Bitrate (typically 64000) + Special options + + + + Band data for G722 Codec + + + + s + + + sp + + + sz + + + r + + + a + + + ap + + + p + + + d + + + b + + + bp + + + sg + + + nb + + + det + + + + G722 Flags + + + + + None + + + + + Using a G722 sample rate of 8000 + + + + + Packed + + + + + mu-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts a mu-law encoded byte to a 16 bit linear sample + + mu-law encoded byte + Linear sample + + + + mu-law encoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + Encodes a single 16 bit sample to mu-law + + 16 bit PCM sample + mu-law encoded byte + + + + Audio Capture Client + + + + + Gets a pointer to the buffer + + Pointer to the buffer + + + + Gets a pointer to the buffer + + Number of frames to read + Buffer flags + Pointer to the buffer + + + + Gets the size of the next packet + + + + + Release buffer + + Number of frames written + + + + Release the COM object + + + + + Windows CoreAudio AudioClient + + + + + Retrieves the stream format that the audio engine uses for its internal processing of shared-mode streams. + Can be called before initialize + + + + + Initializes the Audio Client + + Share Mode + Stream Flags + Buffer Duration + Periodicity + Wave Format + Audio Session GUID (can be null) + + + + Retrieves the size (maximum capacity) of the audio buffer associated with the endpoint. (must initialize first) + + + + + Retrieves the maximum latency for the current stream and can be called any time after the stream has been initialized. + + + + + Retrieves the number of frames of padding in the endpoint buffer (must initialize first) + + + + + Retrieves the length of the periodic interval separating successive processing passes by the audio engine on the data in the endpoint buffer. + (can be called before initialize) + + + + + Gets the minimum device period + (can be called before initialize) + + + + + Returns the AudioStreamVolume service for this AudioClient. + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Gets the AudioClockClient service + + + + + Gets the AudioRenderClient service + + + + + Gets the AudioCaptureClient service + + + + + Determines whether if the specified output format is supported + + The share mode. + The desired format. + True if the format is supported + + + + Determines if the specified output format is supported in shared mode + + Share Mode + Desired Format + Output The closest match format. + True if the format is supported + + + + Starts the audio stream + + + + + Stops the audio stream. + + + + + Set the Event Handle for buffer synchro. + + The Wait Handle to setup + + + + Resets the audio stream + Reset is a control method that the client calls to reset a stopped audio stream. + Resetting the stream flushes all pending data and resets the audio clock stream + position to 0. This method fails if it is called on a stream that is not stopped + + + + + Dispose + + + + + Audio Client Buffer Flags + + + + + None + + + + + AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY + + + + + AUDCLNT_BUFFERFLAGS_SILENT + + + + + AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR + + + + + The AudioClientProperties structure is used to set the parameters that describe the properties of the client's audio stream. + + http://msdn.microsoft.com/en-us/library/windows/desktop/hh968105(v=vs.85).aspx + + + + The size of the buffer for the audio stream. + + + + + Boolean value to indicate whether or not the audio stream is hardware-offloaded + + + + + An enumeration that is used to specify the category of the audio stream. + + + + + A bit-field describing the characteristics of the stream. Supported in Windows 8.1 and later. + + + + + AUDCLNT_SHAREMODE + + + + + AUDCLNT_SHAREMODE_SHARED, + + + + + AUDCLNT_SHAREMODE_EXCLUSIVE + + + + + AUDCLNT_STREAMFLAGS + + + + + None + + + + + AUDCLNT_STREAMFLAGS_CROSSPROCESS + + + + + AUDCLNT_STREAMFLAGS_LOOPBACK + + + + + AUDCLNT_STREAMFLAGS_EVENTCALLBACK + + + + + AUDCLNT_STREAMFLAGS_NOPERSIST + + + + + Defines values that describe the characteristics of an audio stream. + + + + + No stream options. + + + + + The audio stream is a 'raw' stream that bypasses all signal processing except for endpoint specific, always-on processing in the APO, driver, and hardware. + + + + + Audio Clock Client + + + + + Characteristics + + + + + Frequency + + + + + Get Position + + + + + Adjusted Position + + + + + Can Adjust Position + + + + + Dispose + + + + + Audio Endpoint Volume + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + On Volume Notification + + + + + Volume Range + + + + + Hardware Support + + + + + Step Information + + + + + Channels + + + + + Master Volume Level + + + + + Master Volume Level Scalar + + + + + Mute + + + + + Volume Step Up + + + + + Volume Step Down + + + + + Creates a new Audio endpoint volume + + IAudioEndpointVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Audio Endpoint Volume Channel + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + Volume Level + + + + + Volume Level Scalar + + + + + Audio Endpoint Volume Channels + + + + + Channel Count + + + + + Indexer - get a specific channel + + + + + Audio Endpoint Volume Notifiaction Delegate + + Audio Volume Notification Data + + + + Audio Endpoint Volume Step Information + + + + + Step + + + + + StepCount + + + + + Audio Endpoint Volume Volume Range + + + + + Minimum Decibels + + + + + Maximum Decibels + + + + + Increment Decibels + + + + + Audio Meter Information + + + + + Peak Values + + + + + Hardware Support + + + + + Master Peak Value + + + + + Audio Meter Information Channels + + + + + Metering Channel Count + + + + + Get Peak value + + Channel index + Peak value + + + + Audio Render Client + + + + + Gets a pointer to the buffer + + Number of frames requested + Pointer to the buffer + + + + Release buffer + + Number of frames written + Buffer flags + + + + Release the COM object + + + + + AudioSessionControl object for information + regarding an audio session + + + + + Constructor. + + + + + + Dispose + + + + + Finalizer + + + + + Audio meter information of the audio session. + + + + + Simple audio volume of the audio session (for volume and mute status). + + + + + The current state of the audio session. + + + + + The name of the audio session. + + + + + the path to the icon shown in the mixer. + + + + + The session identifier of the audio session. + + + + + The session instance identifier of the audio session. + + + + + The process identifier of the audio session. + + + + + Is the session a system sounds session. + + + + + the grouping param for an audio session grouping + + + + + + For chanigng the grouping param and supplying the context of said change + + + + + + + Registers an even client for callbacks + + + + + + Unregisters an event client from receiving callbacks + + + + + + AudioSessionEvents callback implementation + + + + + Constructor. + + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + AudioSessionManager + + Designed to manage audio sessions and in particuar the + SimpleAudioVolume interface to adjust a session volume + + + + + Session created delegate + + + + + Occurs when audio session has been added (for example run another program that use audio playback). + + + + + SimpleAudioVolume object + for adjusting the volume for the user session + + + + + AudioSessionControl object + for registring for callbacks and other session information + + + + + Refresh session of current device. + + + + + Returns list of sessions of current device. + + + + + Dispose. + + + + + Finalizer. + + + + + Specifies the category of an audio stream. + + + + + Other audio stream. + + + + + Media that will only stream when the app is in the foreground. + + + + + Media that can be streamed when the app is in the background. + + + + + Real-time communications, such as VOIP or chat. + + + + + Alert sounds. + + + + + Sound effects. + + + + + Game sound effects. + + + + + Background audio for games. + + + + + Manages the AudioStreamVolume for the . + + + + + Verify that the channel index is valid. + + + + + + + Return the current stream volumes for all channels + + An array of volume levels between 0.0 and 1.0 for each channel in the audio stream. + + + + Returns the current number of channels in this audio stream. + + + + + Return the current volume for the requested channel. + + The 0 based index into the channels. + The volume level for the channel between 0.0 and 1.0. + + + + Set the volume level for each channel of the audio stream. + + An array of volume levels (between 0.0 and 1.0) one for each channel. + + A volume level MUST be supplied for reach channel in the audio stream. + + + Thrown when does not contain elements. + + + + + Sets the volume level for one channel in the audio stream. + + The 0-based index into the channels to adjust the volume of. + The volume level between 0.0 and 1.0 for this channel of the audio stream. + + + + Dispose + + + + + Release/cleanup objects during Dispose/finalization. + + True if disposing and false if being finalized. + + + + Audio Volume Notification Data + + + + + Event Context + + + + + Muted + + + + + Guid that raised the event + + + + + Master Volume + + + + + Channels + + + + + Channel Volume + + + + + Audio Volume Notification Data + + + + + + + + + + Connector + + + + + Connects this connector to a connector in another device-topology object + + + + + Retreives the type of this connector + + + + + Retreives the data flow of this connector + + + + + Disconnects this connector from it's connected connector (if connected) + + + + + Indicates whether this connector is connected to another connector + + + + + Retreives the connector this connector is connected to (if connected) + + + + + Retreives the global ID of the connector this connector is connected to (if connected) + + + + + Retreives the device ID of the audio device this connector is connected to (if connected) + + + + + Connector Type + + + + + The connector is part of a connection of unknown type. + + + + + The connector is part of a physical connection to an auxiliary device that is installed inside the system chassis + + + + + The connector is part of a physical connection to an external device. + + + + + The connector is part of a software-configured I/O connection (typically a DMA channel) between system memory and an audio hardware device on an audio adapter. + + + + + The connector is part of a permanent connection that is fixed and cannot be configured under software control. + + + + + The connector is part of a connection to a network. + + + + + The EDataFlow enumeration defines constants that indicate the direction + in which audio data flows between an audio endpoint device and an application + + + + + Audio rendering stream. + Audio data flows from the application to the audio endpoint device, which renders the stream. + + + + + Audio capture stream. Audio data flows from the audio endpoint device that captures the stream, + to the application + + + + + Audio rendering or capture stream. Audio data can flow either from the application to the audio + endpoint device, or from the audio endpoint device to the application. + + + + + Device State + + + + + DEVICE_STATE_ACTIVE + + + + + DEVICE_STATE_DISABLED + + + + + DEVICE_STATE_NOTPRESENT + + + + + DEVICE_STATE_UNPLUGGED + + + + + DEVICE_STATEMASK_ALL + + + + + Windows CoreAudio DeviceTopology + + + + + Retrieves the number of connections associated with this device-topology object + + + + + Retrieves the connector at the supplied index + + + + + Retrieves the device id of the device represented by this device-topology object + + + + + Endpoint Hardware Support + + + + + Volume + + + + + Mute + + + + + Meter + + + + + Representation of binary large object container. + + + + + Length of binary object. + + + + + Pointer to buffer storing data. + + + + + is defined in WTypes.h + + + + + Audio Client WASAPI Error Codes (HResult) + + + + + AUDCLNT_E_NOT_INITIALIZED + + + + + AUDCLNT_E_UNSUPPORTED_FORMAT + + + + + AUDCLNT_E_DEVICE_IN_USE + + + + + AUDCLNT_E_RESOURCES_INVALIDATED + + + + + Windows CoreAudio IAudioClient interface + Defined in AudioClient.h + + + + + The GetBufferSize method retrieves the size (maximum capacity) of the endpoint buffer. + + + + + The GetService method accesses additional services from the audio client object. + + The interface ID for the requested service. + Pointer to a pointer variable into which the method writes the address of an instance of the requested interface. + + + + Defined in AudioClient.h + + + + + Defined in AudioClient.h + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier for the audio session. + + Receives the session identifier. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier of the audio session instance. + + Receives the identifier of a particular instance. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the process identifier of the audio session. + + Receives the process identifier of the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Indicates whether the session is a system sounds session. + + An HRESULT code indicating whether the operation succeeded of failed. + + + + Enables or disables the default stream attenuation experience (auto-ducking) provided by the system. + + A variable that enables or disables system auto-ducking. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Defines constants that indicate the current state of an audio session. + + + MSDN Reference: http://msdn.microsoft.com/en-us/library/dd370792.aspx + + + + + The audio session is inactive. + + + + + The audio session is active. + + + + + The audio session has expired. + + + + + Defines constants that indicate a reason for an audio session being disconnected. + + + MSDN Reference: Unknown + + + + + The user removed the audio endpoint device. + + + + + The Windows audio service has stopped. + + + + + The stream format changed for the device that the audio session is connected to. + + + + + The user logged off the WTS session that the audio session was running in. + + + + + The WTS session that the audio session was running in was disconnected. + + + + + The (shared-mode) audio session was disconnected to make the audio endpoint device available for an exclusive-mode connection. + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + interface to receive session related events + + + + + notification of volume changes including muting of audio session + + the current volume + the current mute state, true muted, false otherwise + + + + notification of display name changed + + the current display name + + + + notification of icon path changed + + the current icon path + + + + notification of the client that the volume level of an audio channel in the session submix has changed + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + + + + notification of the client that the grouping parameter for the session has changed + + >The new grouping parameter for the session. + + + + notification of the client that the stream-activity state of the session has changed + + The new session state. + + + + notification of the client that the session has been disconnected + + The reason that the audio session was disconnected. + + + + Windows CoreAudio IAudioSessionManager interface + Defined in AudioPolicy.h + + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionNotification interface + Defined in AudioPolicy.h + + + + + + + session being added + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IConnector interface + Defined in devicetopology.h + + + + + Windows CoreAudio IDeviceTopology interface + Defined in devicetopology.h + + + + + defined in MMDeviceAPI.h + + + + + IMMNotificationClient + + + + + Device State Changed + + + + + Device Added + + + + + Device Removed + + + + + Default Device Changed + + + + + Property Value Changed + + + + + + + Windows CoreAudio IPart interface + Defined in devicetopology.h + + + + + Windows CoreAudio IPartsList interface + Defined in devicetopology.h + + + + + is defined in propsys.h + + + + + Windows CoreAudio ISimpleAudioVolume interface + Defined in AudioClient.h + + + + + Sets the master volume level for the audio session. + + The new volume level expressed as a normalized value between 0.0 and 1.0. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the client volume level for the audio session. + + Receives the volume level expressed as a normalized value between 0.0 and 1.0. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Sets the muting state for the audio session. + + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the current muting state for the audio session. + + Receives the muting state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + implements IMMDeviceEnumerator + + + + + MMDevice STGM enumeration + + + + + Read-only access mode. + + + + + Write-only access mode. + + + + + Read-write access mode. + + + + + from Propidl.h. + http://msdn.microsoft.com/en-us/library/aa380072(VS.85).aspx + contains a union so we have to do an explicit layout + + + + + Value type tag. + + + + + Reserved1. + + + + + Reserved2. + + + + + Reserved3. + + + + + cVal. + + + + + bVal. + + + + + iVal. + + + + + uiVal. + + + + + lVal. + + + + + ulVal. + + + + + intVal. + + + + + uintVal. + + + + + hVal. + + + + + uhVal. + + + + + fltVal. + + + + + dblVal. + + + + + boolVal. + + + + + scode. + + + + + Date time. + + + + + Binary large object. + + + + + Pointer value. + + + + + Creates a new PropVariant containing a long value + + + + + Helper method to gets blob data + + + + + Interprets a blob as an array of structs + + + + + Gets the type of data in this PropVariant + + + + + Property value + + + + + allows freeing up memory, might turn this into a Dispose method? + + + + + Clears with a known pointer + + + + + MM Device + + + + + Initializes the device's property store. + + The storage-access mode to open store for. + Administrative client is required for Write and ReadWrite modes. + + + + Audio Client + Makes a new one each call to allow caller to manage when to dispose + n.b. should probably not be a property anymore + + + + + Audio Meter Information + + + + + Audio Endpoint Volume + + + + + AudioSessionManager instance + + + + + DeviceTopology instance + + + + + Properties + + + + + Friendly name for the endpoint + + + + + Friendly name of device + + + + + Icon path of device + + + + + Device Instance Id of Device + + + + + Device ID + + + + + Data Flow + + + + + Device State + + + + + To string + + + + + Dispose + + + + + Finalizer + + + + + Multimedia Device Collection + + + + + Device count + + + + + Get device by index + + Device index + Device at the specified index + + + + Get Enumerator + + Device enumerator + + + + MM Device Enumerator + + + + + Creates a new MM Device Enumerator + + + + + Enumerate Audio Endpoints + + Desired DataFlow + State Mask + Device Collection + + + + Get Default Endpoint + + Data Flow + Role + Device + + + + Check to see if a default audio end point exists without needing an exception. + + Data Flow + Role + True if one exists, and false if one does not exist. + + + + Get device by ID + + Device ID + Device + + + + Registers a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + Unregisters a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + + + + Called to dispose/finalize contained objects. + + True if disposing, false if called from a finalizer. + + + + PROPERTYKEY is defined in wtypes.h + + + + + Format ID + + + + + Property ID + + + + + + + + + + + Property Keys + + + + + PKEY_DeviceInterface_FriendlyName + + + + + PKEY_AudioEndpoint_FormFactor + + + + + PKEY_AudioEndpoint_ControlPanelPageProvider + + + + + PKEY_AudioEndpoint_Association + + + + + PKEY_AudioEndpoint_PhysicalSpeakers + + + + + PKEY_AudioEndpoint_GUID + + + + + PKEY_AudioEndpoint_Disable_SysFx + + + + + PKEY_AudioEndpoint_FullRangeSpeakers + + + + + PKEY_AudioEndpoint_Supports_EventDriven_Mode + + + + + PKEY_AudioEndpoint_JackSubType + + + + + PKEY_AudioEngine_DeviceFormat + + + + + PKEY_AudioEngine_OEMFormat + + + + + PKEY _Devie_FriendlyName + + + + + PKEY _Device_IconPath + + + + + Device description property. + + + + + Id of controller device for endpoint device property. + + + + + Device interface key property. + + + + + System-supplied device instance identification string, assigned by PnP manager, persistent across system restarts. + + + + + Property Store class, only supports reading properties at the moment. + + + + + Property Count + + + + + Gets property by index + + Property index + The property + + + + Contains property guid + + Looks for a specific key + True if found + + + + Indexer by guid + + Property Key + Property or null if not found + + + + Gets property key at sepecified index + + Index + Property key + + + + Gets property value at specified index + + Index + Property value + + + + Sets property value at specified key. + + Key of property to set. + Value to write. + + + + Saves a property change. + + + + + Creates a new property store + + IPropertyStore COM interface + + + + Property Store Property + + + + + Property Key + + + + + Property Value + + + + + The ERole enumeration defines constants that indicate the role + that the system has assigned to an audio endpoint device + + + + + Games, system notification sounds, and voice commands. + + + + + Music, movies, narration, and live music recording + + + + + Voice communications (talking to another person). + + + + + Collection of sessions. + + + + + Returns session at index. + + + + + + + Number of current sessions. + + + + + Windows CoreAudio SimpleAudioVolume + + + + + Creates a new Audio endpoint volume + + ISimpleAudioVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Allows the user to adjust the volume from + 0.0 to 1.0 + + + + + Mute + + + + + Represents state of a capture device + + + + + Not recording + + + + + Beginning to record + + + + + Recording in progress + + + + + Requesting stop + + + + + Audio Capture using Wasapi + See http://msdn.microsoft.com/en-us/library/dd370800%28VS.85%29.aspx + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Initializes a new instance of the class. + + The capture device. + true if sync is done with event. false use sleep. + + + + Initializes a new instance of the class. + + The capture device. + true if sync is done with event. false use sleep. + Length of the audio buffer in milliseconds. A lower value means lower latency but increased CPU usage. + + + + Share Mode - set before calling StartRecording + + + + + Current Capturing State + + + + + Capturing wave format + + + + + Gets the default audio capture device + + The default audio capture device + + + + To allow overrides to specify different flags (e.g. loopback) + + + + + Start Capturing + + + + + Stop Capturing (requests a stop, wait for RecordingStopped event to know it has finished) + + + + + Dispose + + + + + Contains the name and CLSID of a DirectX Media Object + + + + + Name + + + + + CLSID + + + + + Initializes a new instance of DmoDescriptor + + + + + DirectX Media Object Enumerator + + + + + Get audio effect names + + Audio effect names + + + + Get audio encoder names + + Audio encoder names + + + + Get audio decoder names + + Audio decoder names + + + + DMO Guids for use with DMOEnum + dmoreg.h + + + + + MediaErr.h + + + + + DMO Inplace Process Flags + + + + + DMO_INPLACE_NORMAL + + + + + DMO_INPLACE_ZERO + + + + + Return value when Process is executed with IMediaObjectInPlace + + + + + Success. There is no remaining data to process. + + + + + Success. There is still data to process. + + + + + DMO Input Data Buffer Flags + + + + + None + + + + + DMO_INPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_INPUT_DATA_BUFFERF_TIME + + + + + DMO_INPUT_DATA_BUFFERF_TIMELENGTH + + + + + http://msdn.microsoft.com/en-us/library/aa929922.aspx + DMO_MEDIA_TYPE + + + + + Major type + + + + + Major type name + + + + + Subtype + + + + + Subtype name + + + + + Fixed size samples + + + + + Sample size + + + + + Format type + + + + + Format type name + + + + + Gets the structure as a Wave format (if it is one) + + + + + Sets this object up to point to a wave format + + Wave format structure + + + + DMO Output Data Buffer + + + + + Creates a new DMO Output Data Buffer structure + + Maximum buffer size + + + + Dispose + + + + + Media Buffer + + + + + Length of data in buffer + + + + + Status Flags + + + + + Timestamp + + + + + Duration + + + + + Retrives the data in this buffer + + Buffer to receive data + Offset into buffer + + + + Is more data available + If true, ProcessOuput should be called again + + + + + DMO Output Data Buffer Flags + + + + + None + + + + + DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_OUTPUT_DATA_BUFFERF_TIME + + + + + DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH + + + + + DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE + + + + + DMO_PARTIAL_MEDIATYPE + + + + + DMO Process Output Flags + + + + + None + + + + + DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER + + + + + Chorus Phase + + + + + DSFXCHORUS_PHASE_NEG_180 + + + + + DSFXCHORUS_PHASE_NEG_90 + + + + + DSFXCHORUS_PHASE_ZERO + + + + + DSFXCHORUS_PHASE_90 + + + + + DSFXCHORUS_PHASE_180 + + + + + Chorus Wave Form + + + + + DSFXCHORUS_WAVE_TRIANGLE + + + + + DSFXCHORUS_WAVE_SIN + + + + + DMO Chorus Effect + + + + + DMO Chorus Params + + + + + DSFXCHORUS_WETDRYMIX_MIN + + + + + DSFXCHORUS_WETDRYMIX_MAX + + + + + DSFXCHORUS_WETDRYMIX_DEFAULT + + + + + DSFXCHORUS_DEPTH_MIN + + + + + DSFXCHORUS_DEPTH_MAX + + + + + DSFXCHORUS_DEPTH_DEFAULT + + + + + DSFXCHORUS_FEEDBACK_MIN + + + + + DSFXCHORUS_FEEDBACK_MAX + + + + + DSFXCHORUS_FEEDBACK_DEFAULT + + + + + DSFXCHORUS_FREQUENCY_MIN + + + + + DSFXCHORUS_FREQUENCY_MAX + + + + + DSFXCHORUS_FREQUENCY_DEFAULT + + + + + DSFXCHORUS_WAVE_DEFAULT + + + + + DSFXCHORUS_DELAY_MIN + + + + + DSFXCHORUS_DELAY_MAX + + + + + DSFXCHORUS_DELAY_DEFAULT + + + + + DSFXCHORUS_PHASE_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage by which the delay time is modulated by the low-frequency oscillator, + in hundredths of a percentage point. + + + + + Percentage of output signal to feed back into the effect's input. + + + + + Frequency of the LFO. + + + + + Waveform shape of the LFO. + + + + + Number of milliseconds the input is delayed before it is played back. + + + + + Phase differential between left and right LFOs. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Chorus + + + + + Dispose code + + + + + DMO Compressor Effect + + + + + DMO Compressor Params + + + + + DSFXCOMPRESSOR_GAIN_MIN + + + + + DSFXCOMPRESSOR_GAIN_MAX + + + + + DSFXCOMPRESSOR_GAIN_DEFAULT + + + + + DSFXCOMPRESSOR_ATTACK_MIN + + + + + DSFXCOMPRESSOR_ATTACK_MAX + + + + + DSFXCOMPRESSOR_ATTACK_DEFAULT + + + + + DSFXCOMPRESSOR_RELEASE_MIN + + + + + DSFXCOMPRESSOR_RELEASE_MAX + + + + + DSFXCOMPRESSOR_RELEASE_DEFAULT + + + + + DSFXCOMPRESSOR_THRESHOLD_MIN + + + + + DSFXCOMPRESSOR_THRESHOLD_MAX + + + + + DSFXCOMPRESSOR_THRESHOLD_DEFAULT + + + + + DSFXCOMPRESSOR_RATIO_MIN + + + + + DSFXCOMPRESSOR_RATIO_MAX + + + + + DSFXCOMPRESSOR_RATIO_DEFAULT + + + + + DSFXCOMPRESSOR_PREDELAY_MIN + + + + + DSFXCOMPRESSOR_PREDELAY_MAX + + + + + DSFXCOMPRESSOR_PREDELAY_DEFAULT + + + + + Output gain of signal after compression. + + + + + Time before compression reaches its full value. + + + + + Speed at which compression is stopped after input drops below Threshold. + + + + + Point at which compression begins, in decibels. + + + + + Compression ratio + + + + + Time after Threshold is reached before attack phase is started, in milliseconds. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Compressor + + + + + Dispose code + + + + + DMO Distortion Effect + + + + + DMO Distortion Params + + + + + DSFXDISTORTION_GAIN_MIN + + + + + DSFXDISTORTION_GAIN_MAX + + + + + DSFXDISTORTION_GAIN_DEFAULT + + + + + DSFXDISTORTION_EDGE_MIN + + + + + DSFXDISTORTION_EDGE_MAX + + + + + DSFXDISTORTION_EDGE_DEFAULT + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_DEFAULT + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_MIN + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_MAX + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_DEFAULT + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_MIN + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_MAX + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_DEFAULT + + + + + Amount of signal change after distortion. + + + + + Percentage of distortion intensity. + + + + + Center frequency of harmonic content addition. + + + + + Width of frequency band that determines range of harmonic content addition. + + + + + Filter cutoff for high-frequency harmonics attenuation. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Distortion + + + + + Dispose code + + + + + Dmo Echo Effect + + + + + DMO Echo Params + + + + + DSFXECHO_WETDRYMIX_MIN + + + + + DSFXECHO_WETDRYMIX_MAX + + + + + DSFXECHO_WETDRYMIX_DEFAULT + + + + + DSFXECHO_FEEDBACK_MIN + + + + + DSFXECHO_FEEDBACK_MAX + + + + + DSFXECHO_FEEDBACK_DEFAULT + + + + + DSFXECHO_LEFTDELAY_MIN + + + + + DSFXECHO_LEFTDELAY_MAX + + + + + DSFXECHO_LEFTDELAY_DEFAULT + + + + + DSFXECHO_RIGHTDELAY_MIN + + + + + DSFXECHO_RIGHTDELAY_MAX + + + + + DSFXECHO_RIGHTDELAY_DEFAULT + + + + + DSFXECHO_PANDELAY_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage of output fed back into input. + + + + + Delay for left channel, in milliseconds. + + + + + Delay for right channel, in milliseconds. + + + + + Value that specifies whether to swap left and right delays with each successive echo. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Echo + + + + + Dispose code + + + + + DMO Flanger Effect + + + + + DMO Flanger Params + + + + + DSFXFLANGER_WETDRYMIX_MIN + + + + + DSFXFLANGER_WETDRYMIX_MAX + + + + + DSFXFLANGER_WETDRYMIX_DEFAULT + + + + + DSFXFLANGER_DEPTH_MIN + + + + + DSFXFLANGER_DEPTH_MAX + + + + + DSFXFLANGER_DEPTH_DEFAULT + + + + + DSFXFLANGER_FEEDBACK_MIN + + + + + DSFXFLANGER_FEEDBACK_MAX + + + + + DSFXFLANGER_FEEDBACK_DEFAULT + + + + + DSFXFLANGER_FREQUENCY_MIN + + + + + DSFXFLANGER_FREQUENCY_MAX + + + + + DSFXFLANGER_FREQUENCY_DEFAULT + + + + + DSFXFLANGER_WAVE_DEFAULT + + + + + DSFXFLANGER_DELAY_MIN + + + + + DSFXFLANGER_DELAY_MAX + + + + + DSFXFLANGER_DELAY_DEFAULT + + + + + DSFXFLANGER_PHASE_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage by which the delay time is modulated by the low-frequency oscillator, + in hundredths of a percentage point. + + + + + Percentage of output signal to feed back into the effect's input. + + + + + Frequency of the LFO. + + + + + Waveform shape of the LFO. + + + + + Number of milliseconds the input is delayed before it is played back. + + + + + Phase differential between left and right LFOs. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Flanger + + + + + Dispose code + + + + + DMO Gargle Effect + + + + + DMO Gargle Params + + + + + DSFXGARGLE_RATEHZ_MIN + + + + + DSFXGARGLE_RATEHZ_MAX + + + + + DSFXGARGLE_RATEHZ_DEFAULT + + + + + DSFXGARGLE_WAVE_DEFAULT + + + + + Rate of modulation in hz + + + + + Gargle Wave Shape + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Gargle + + + + + Dispose code + + + + + DMO I3DL2Reverb Effect + + + + + DMO I3DL2Reverb Params + + + + + DSFX_I3DL2REVERB_ROOM_MIN + + + + + DSFX_I3DL2REVERB_ROOM_MAX + + + + + DSFX_I3DL2REVERB_ROOM_DEFAULT + + + + + DSFX_I3DL2REVERB_ROOMHF_MIN + + + + + DSFX_I3DL2REVERB_ROOMHF_MAX + + + + + DSFX_I3DL2REVERB_ROOMHF_DEFAULT + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT + + + + + DSFX_I3DL2REVERB_DECAYTIME_MIN + + + + + DSFX_I3DL2REVERB_DECAYTIME_MAX + + + + + DSFX_I3DL2REVERB_DECAYTIME_DEFAULT + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_MIN + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_MAX + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT + + + + + DSFX_I3DL2REVERB_REFLECTIONS_MIN + + + + + DSFX_I3DL2REVERB_REFLECTIONS_MAX + + + + + DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT + + + + + DSFX_I3DL2REVERB_REVERB_MIN + + + + + DSFX_I3DL2REVERB_REVERB_MAX + + + + + DSFX_I3DL2REVERB_REVERB_DEFAULT + + + + + DSFX_I3DL2REVERB_REVERBDELAY_MIN + + + + + DSFX_I3DL2REVERB_REVERBDELAY_MAX + + + + + DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT + + + + + DSFX_I3DL2REVERB_DIFFUSION_MIN + + + + + DSFX_I3DL2REVERB_DIFFUSION_MAX + + + + + DSFX_I3DL2REVERB_DIFFUSION_DEFAULT + + + + + DSFX_I3DL2REVERB_DENSITY_MIN + + + + + DSFX_I3DL2REVERB_DENSITY_MAX + + + + + DSFX_I3DL2REVERB_DENSITY_DEFAULT + + + + + DSFX_I3DL2REVERB_HFREFERENCE_MIN + + + + + DSFX_I3DL2REVERB_HFREFERENCE_MAX + + + + + DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT + + + + + DSFX_I3DL2REVERB_QUALITY_MIN + + + + + DSFX_I3DL2REVERB_QUALITY_MAX + + + + + DSFX_I3DL2REVERB_QUALITY_DEFAULT + + + + + Attenuation of the room effect, in millibels (mB) + + + + + Attenuation of the room high-frequency effect, in mB. + + + + + Rolloff factor for the reflected signals. + + + + + Decay time, in seconds. + + + + + Ratio of the decay time at high frequencies to the decay time at low frequencies. + + + + + Attenuation of early reflections relative to lRoom, in mB. + + + + + Delay time of the first reflection relative to the direct path, in seconds. + + + + + Attenuation of late reverberation relative to lRoom, in mB. + + + + + Time limit between the early reflections and the late reverberation relative to the time of the first reflection. + + + + + Echo density in the late reverberation decay, in percent. + + + + + Modal density in the late reverberation decay, in percent. + + + + + Reference high frequency, in hertz. + + + + + the quality of the environmental reverberation effect. Higher values produce better quality at the expense of processing time. + + + + + Sets standard reverberation parameters of a buffer. + + I3DL2EnvironmentPreset + + + + retrieves an identifier for standard reverberation parameters of a buffer. + + I3DL2EnvironmentPreset + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO I3DL2Reverb + + + + + Dispose code + + + + + DMO Parametric Equalizer Effect + + + + + DMO ParamEq Params + + + + + DSFXPARAMEQ_CENTER_MIN + + + + + DSFXPARAMEQ_CENTER_MAX + + + + + DSFXPARAMEQ_CENTER_DEFAULT + + + + + DSFXPARAMEQ_BANDWIDTH_MIN + + + + + DSFXPARAMEQ_BANDWIDTH_MAX + + + + + DSFXPARAMEQ_BANDWIDTH_DEFAULT + + + + + DSFXPARAMEQ_GAIN_MIN + + + + + DSFXPARAMEQ_GAIN_MAX + + + + + DSFXPARAMEQ_GAIN_DEFAULT + + + + + Center frequency, in hertz + + + + + Bandwidth, in semitones. + + + + + Gain + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO ParamEq + + + + + Dispose code + + + + + DMO Reverb Effect + + + + + DMO Reverb Params + + + + + DSFX_WAVESREVERB_INGAIN_MIN + + + + + DSFX_WAVESREVERB_INGAIN_MAX + + + + + DSFX_WAVESREVERB_INGAIN_DEFAULT + + + + + DSFX_WAVESREVERB_REVERBMIX_MIN + + + + + DSFX_WAVESREVERB_REVERBMIX_MAX + + + + + DSFX_WAVESREVERB_REVERBMIX_DEFAULT + + + + + DSFX_WAVESREVERB_REVERBTIME_MIN + + + + + DSFX_WAVESREVERB_REVERBTIME_MAX + + + + + DSFX_WAVESREVERB_REVERBTIME_DEFAULT + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT + + + + + Input gain of signal, in decibels (dB). + + + + + Reverb mix, in dB. + + + + + Reverb time, in milliseconds. + + + + + High-frequency reverb time ratio. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO WavesReverb + + + + + Dispose code + + + + + DSFXECHO_PANDELAY + + + + + DSFXECHO_PANDELAY_MIN + + + + + DSFXECHO_PANDELAY_MAX + + + + + Flanger Phase + + + + + DSFXFLANGER_PHASE_NEG_180 + + + + + DSFXFLANGER_PHASE_NEG_90 + + + + + DSFXFLANGER_PHASE_ZERO + + + + + DSFXFLANGER_PHASE_90 + + + + + DSFXFLANGER_PHASE_180 + + + + + Flanger Wave Form + + + + + DSFXFLANGER_WAVE_TRIANGLE + + + + + DSFXFLANGER_WAVE_SIN + + + + + Gargle Wave Shape + + + + + DSFXGARGLE_WAVE_TRIANGLE + + + + + DSFXGARGLE_WAVE_SQUARE + + + + + I3DL2 Reverberation Presets + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CITY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE + + + + + Interface of DMO Effectors + + Parameters of the effect to be used + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + IMediaBuffer Interface + + + + + Set Length + + Length + HRESULT + + + + Get Max Length + + Max Length + HRESULT + + + + Get Buffer and Length + + Pointer to variable into which to write the Buffer Pointer + Pointer to variable into which to write the Valid Data Length + HRESULT + + + + defined in mediaobj.h + + + + + defined in mediaobj.h + + + + + defined in Medparam.h + + + + + Windows Media Resampler Props + wmcodecdsp.h + + + + + Range is 1 to 60 + + + + + Specifies the channel matrix. + + + + + Attempting to implement the COM IMediaBuffer interface as a .NET object + Not sure what will happen when I pass this to an unmanaged object + + + + + Creates a new Media Buffer + + Maximum length in bytes + + + + Dispose and free memory for buffer + + + + + Finalizer + + + + + Set length of valid data in the buffer + + length + HRESULT + + + + Gets the maximum length of the buffer + + Max length (output parameter) + HRESULT + + + + Gets buffer and / or length + + Pointer to variable into which buffer pointer should be written + Pointer to variable into which valid data length should be written + HRESULT + + + + Length of data in the media buffer + + + + + Loads data into this buffer + + Data to load + Number of bytes to load + + + + Retrieves the data in the output buffer + + buffer to retrieve into + offset within that buffer + + + + Media Object + + + + + Creates a new Media Object + + Media Object COM interface + + + + Number of input streams + + + + + Number of output streams + + + + + Gets the input media type for the specified input stream + + Input stream index + Input type index + DMO Media Type or null if there are no more input types + + + + Gets the DMO Media Output type + + The output stream + Output type index + DMO Media Type or null if no more available + + + + retrieves the media type that was set for an output stream, if any + + Output stream index + DMO Media Type or null if no more available + + + + Enumerates the supported input types + + Input stream index + Enumeration of input types + + + + Enumerates the output types + + Output stream index + Enumeration of supported output types + + + + Querys whether a specified input type is supported + + Input stream index + Media type to check + true if supports + + + + Sets the input type helper method + + Input stream index + Media type + Flags (can be used to test rather than set) + + + + Sets the input type + + Input stream index + Media Type + + + + Sets the input type to the specified Wave format + + Input stream index + Wave format + + + + Requests whether the specified Wave format is supported as an input + + Input stream index + Wave format + true if supported + + + + Helper function to make a DMO Media Type to represent a particular WaveFormat + + + + + Checks if a specified output type is supported + n.b. you may need to set the input type first + + Output stream index + Media type + True if supported + + + + Tests if the specified Wave Format is supported for output + n.b. may need to set the input type first + + Output stream index + Wave format + True if supported + + + + Helper method to call SetOutputType + + + + + Sets the output type + n.b. may need to set the input type first + + Output stream index + Media type to set + + + + Set output type to the specified wave format + n.b. may need to set input type first + + Output stream index + Wave format + + + + Get Input Size Info + + Input Stream Index + Input Size Info + + + + Get Output Size Info + + Output Stream Index + Output Size Info + + + + Process Input + + Input Stream index + Media Buffer + Flags + Timestamp + Duration + + + + Process Output + + Flags + Output buffer count + Output buffers + + + + Gives the DMO a chance to allocate any resources needed for streaming + + + + + Tells the DMO to free any resources needed for streaming + + + + + Gets maximum input latency + + input stream index + Maximum input latency as a ref-time + + + + Flushes all buffered data + + + + + Report a discontinuity on the specified input stream + + Input Stream index + + + + Is this input stream accepting data? + + Input Stream index + true if accepting data + + + + Experimental code, not currently being called + Not sure if it is necessary anyway + + + + + Media Object InPlace + + + + + Creates a new Media Object InPlace + + Media Object InPlace COM Interface + + + + Processes a block of data. + The application supplies a pointer to a block of input data. The DMO processes the data in place. + + Size of the data, in bytes. + offset into buffer + In/Out Data Buffer + Start time of the data. + DmoInplaceProcessFlags + Return value when Process is executed with IMediaObjectInPlace + + + + Creates a copy of the DMO in its current state. + + Copyed MediaObjectInPlace + + + + Retrieves the latency introduced by this DMO. + + The latency, in 100-nanosecond units + + + + Get Media Object + + Media Object + + + + Dispose code + + + + + Media Object Size Info + + + + + Minimum Buffer Size, in bytes + + + + + Max Lookahead + + + + + Alignment + + + + + Media Object Size Info + + + + + ToString + + + + + MP_PARAMINFO + + + + + MP_TYPE + + + + + MPT_INT + + + + + MPT_FLOAT + + + + + MPT_BOOL + + + + + MPT_ENUM + + + + + MPT_MAX + + + + + MP_CURVE_TYPE + + + + + uuids.h, ksuuids.h + + + + + From wmcodecsdp.h + Implements: + - IMediaObject + - IMFTransform (Media foundation - we will leave this for now as there is loads of MF stuff) + - IPropertyStore + - IWMResamplerProps + Can resample PCM or IEEE + + + + + DMO Resampler + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + implements IMediaObject (DirectX Media Object) + implements IMFTransform (Media Foundation Transform) + On Windows XP, it is always an MM (if present at all) + + + + + Windows Media MP3 Decoder (as a DMO) + WORK IN PROGRESS - DO NOT USE! + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + BiQuad filter + + + + + Passes a single sample through the filter + + Input sample + Output sample + + + + Set this up as a low pass filter + + Sample Rate + Cut-off Frequency + Bandwidth + + + + Set this up as a peaking EQ + + Sample Rate + Centre Frequency + Bandwidth (Q) + Gain in decibels + + + + Set this as a high pass filter + + + + + Create a low pass filter + + + + + Create a High pass filter + + + + + Create a bandpass filter with constant skirt gain + + + + + Create a bandpass filter with constant peak gain + + + + + Creates a notch filter + + + + + Creaes an all pass filter + + + + + Create a Peaking EQ + + + + + H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) + + + + a "shelf slope" parameter (for shelving EQ only). + When S = 1, the shelf slope is as steep as it can be and remain monotonically + increasing or decreasing gain with frequency. The shelf slope, in dB/octave, + remains proportional to S for all other values for a fixed f0/Fs and dBgain. + Gain in decibels + + + + H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) + + + + + + + + + + Type to represent complex number + + + + + Real Part + + + + + Imaginary Part + + + + + Envelope generator (ADSR) + + + + + Envelope State + + + + + Idle + + + + + Attack + + + + + Decay + + + + + Sustain + + + + + Release + + + + + Creates and Initializes an Envelope Generator + + + + + Attack Rate (seconds * SamplesPerSecond) + + + + + Decay Rate (seconds * SamplesPerSecond) + + + + + Release Rate (seconds * SamplesPerSecond) + + + + + Sustain Level (1 = 100%) + + + + + Sets the attack curve + + + + + Sets the decay release curve + + + + + Read the next volume multiplier from the envelope generator + + A volume multiplier + + + + Trigger the gate + + If true, enter attack phase, if false enter release phase (unless already idle) + + + + Current envelope state + + + + + Reset to idle state + + + + + Get the current output level + + + + + Summary description for FastFourierTransform. + + + + + This computes an in-place complex-to-complex FFT + x and y are the real and imaginary arrays of 2^m points. + + + + + Applies a Hamming Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hamming window + + + + Applies a Hann Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hann window + + + + Applies a Blackman-Harris Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Blackmann-Harris window + + + + Summary description for ImpulseResponseConvolution. + + + + + A very simple mono convolution algorithm + + + This will be very slow + + + + + This is actually a downwards normalize for data that will clip + + + + + SMB Pitch Shifter + + + + + Pitch Shift + + + + + Pitch Shift + + + + + Short Time Fourier Transform + + + + + Fully managed resampler, based on Cockos WDL Resampler + + + + + Creates a new Resampler + + + + + sets the mode + if sinc set, it overrides interp or filtercnt + + + + + Sets the filter parameters + used for filtercnt>0 but not sinc + + + + + Set feed mode + + if true, that means the first parameter to ResamplePrepare will specify however much input you have, not how much you want + + + + Reset + + + + + Prepare + note that it is safe to call ResamplePrepare without calling ResampleOut (the next call of ResamplePrepare will function as normal) + nb inbuffer was WDL_ResampleSample **, returning a place to put the in buffer, so we return a buffer and offset + + req_samples is output samples desired if !wantInputDriven, or if wantInputDriven is input samples that we have + + + + returns number of samples desired (put these into *inbuffer) + + + + Channel Mode + + + + + Stereo + + + + + Joint Stereo + + + + + Dual Channel + + + + + Mono + + + + + An ID3v2 Tag + + + + + Reads an ID3v2 tag from a stream + + + + + Creates a new ID3v2 tag from a collection of key-value pairs. + + A collection of key-value pairs containing the tags to include in the ID3v2 tag. + A new ID3v2 tag + + + + Convert the frame size to a byte array. + + The frame body size. + + + + + Creates an ID3v2 frame for the given key-value pair. + + + + + + + + Gets the Id3v2 Header size. The size is encoded so that only 7 bits per byte are actually used. + + + + + + + Creates the Id3v2 tag header and returns is as a byte array. + + The Id3v2 frames that will be included in the file. This is used to calculate the ID3v2 tag size. + + + + + Creates the Id3v2 tag for the given key-value pairs and returns it in the a stream. + + + + + + + Raw data from this tag + + + + + Interface for MP3 frame by frame decoder + + + + + Decompress a single MP3 frame + + Frame to decompress + Output buffer + Offset within output buffer + Bytes written to output buffer + + + + Tell the decoder that we have repositioned + + + + + PCM format that we are converting into + + + + + Represents an MP3 Frame + + + + + Reads an MP3 frame from a stream + + input stream + A valid MP3 frame, or null if none found + + + Reads an MP3Frame from a stream + http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm has some good info + also see http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx + + A valid MP3 frame, or null if none found + + + + Constructs an MP3 frame + + + + + checks if the four bytes represent a valid header, + if they are, will parse the values into Mp3Frame + + + + + Sample rate of this frame + + + + + Frame length in bytes + + + + + Bit Rate + + + + + Raw frame data (includes header bytes) + + + + + MPEG Version + + + + + MPEG Layer + + + + + Channel Mode + + + + + The number of samples in this frame + + + + + The channel extension bits + + + + + The bitrate index (directly from the header) + + + + + Whether the Copyright bit is set + + + + + Whether a CRC is present + + + + + Not part of the MP3 frame itself - indicates where in the stream we found this header + + + + + MP3 Frame Decompressor using ACM + + + + + Creates a new ACM frame decompressor + + The MP3 source format + + + + Output format (PCM) + + + + + Decompresses a frame + + The MP3 frame + destination buffer + Offset within destination buffer + Bytes written into destination buffer + + + + Resets the MP3 Frame Decompressor after a reposition operation + + + + + Disposes of this MP3 frame decompressor + + + + + Finalizer ensuring that resources get released properly + + + + + MPEG Layer flags + + + + + Reserved + + + + + Layer 3 + + + + + Layer 2 + + + + + Layer 1 + + + + + MPEG Version Flags + + + + + Version 2.5 + + + + + Reserved + + + + + Version 2 + + + + + Version 1 + + + + + Represents a Xing VBR header + + + + + Load Xing Header + + Frame + Xing Header + + + + Sees if a frame contains a Xing header + + + + + Number of frames + + + + + Number of bytes + + + + + VBR Scale property + + + + + The MP3 frame + + + + + ASIO 64 bit value + Unfortunately the ASIO API was implemented it before compiler supported consistently 64 bit + integer types. By using the structure the data layout on a little-endian system like the + Intel x86 architecture will result in a "non native" storage of the 64 bit data. The most + significant 32 bit are stored first in memory, the least significant bits are stored in the + higher memory space. However each 32 bit is stored in the native little-endian fashion + + + + + most significant bits (Bits 32..63) + + + + + least significant bits (Bits 0..31) + + + + + ASIO Callbacks + + + + + ASIO Buffer Switch Callback + + + + + ASIO Sample Rate Did Change Callback + + + + + ASIO Message Callback + + + + + ASIO Buffer Switch Time Info Callback + + + + + Buffer switch callback + void (*bufferSwitch) (long doubleBufferIndex, AsioBool directProcess); + + + + + Sample Rate Changed callback + void (*sampleRateDidChange) (AsioSampleRate sRate); + + + + + ASIO Message callback + long (*asioMessage) (long selector, long value, void* message, double* opt); + + + + + ASIO Buffer Switch Time Info Callback + AsioTime* (*bufferSwitchTimeInfo) (AsioTime* params, long doubleBufferIndex, AsioBool directProcess); + + + + + ASIO Channel Info + + + + + on input, channel index + + + + + Is Input + + + + + Is Active + + + + + Channel Info + + + + + ASIO Sample Type + + + + + Name + + + + + Main AsioDriver Class. To use this class, you need to query first the GetAsioDriverNames() and + then use the GetAsioDriverByName to instantiate the correct AsioDriver. + This is the first AsioDriver binding fully implemented in C#! + + Contributor: Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Gets the ASIO driver names installed. + + a list of driver names. Use this name to GetAsioDriverByName + + + + Instantiate a AsioDriver given its name. + + The name of the driver + an AsioDriver instance + + + + Instantiate the ASIO driver by GUID. + + The GUID. + an AsioDriver instance + + + + Inits the AsioDriver.. + + The sys handle. + + + + + Gets the name of the driver. + + + + + + Gets the driver version. + + + + + + Gets the error message. + + + + + + Starts this instance. + + + + + Stops this instance. + + + + + Gets the number of channels. + + The num input channels. + The num output channels. + + + + Gets the latencies (n.b. does not throw an exception) + + The input latency. + The output latency. + + + + Gets the size of the buffer. + + Size of the min. + Size of the max. + Size of the preferred. + The granularity. + + + + Determines whether this instance can use the specified sample rate. + + The sample rate. + + true if this instance [can sample rate] the specified sample rate; otherwise, false. + + + + + Gets the sample rate. + + + + + + Sets the sample rate. + + The sample rate. + + + + Gets the clock sources. + + The clocks. + The num sources. + + + + Sets the clock source. + + The reference. + + + + Gets the sample position. + + The sample pos. + The time stamp. + + + + Gets the channel info. + + The channel number. + if set to true [true for input info]. + Channel Info + + + + Creates the buffers. + + The buffer infos. + The num channels. + Size of the buffer. + The callbacks. + + + + Disposes the buffers. + + + + + Controls the panel. + + + + + Futures the specified selector. + + The selector. + The opt. + + + + Notifies OutputReady to the AsioDriver. + + + + + + Releases this instance. + + + + + Handles the exception. Throws an exception based on the error. + + The error to check. + Method name + + + + Inits the vTable method from GUID. This is a tricky part of this class. + + The ASIO GUID. + + + + Internal VTable structure to store all the delegates to the C++ COM method. + + + + + ASIODriverCapability holds all the information from the AsioDriver. + Use ASIODriverExt to get the Capabilities + + + + + Drive Name + + + + + Number of Input Channels + + + + + Number of Output Channels + + + + + Input Latency + + + + + Output Latency + + + + + Buffer Minimum Size + + + + + Buffer Maximum Size + + + + + Buffer Preferred Size + + + + + Buffer Granularity + + + + + Sample Rate + + + + + Input Channel Info + + + + + Output Channel Info + + + + + Callback used by the AsioDriverExt to get wave data + + + + + AsioDriverExt is a simplified version of the AsioDriver. It provides an easier + way to access the capabilities of the Driver and implement the callbacks necessary + for feeding the driver. + Implementation inspired from Rob Philpot's with a managed C++ ASIO wrapper BlueWave.Interop.Asio + http://www.codeproject.com/KB/mcpp/Asio.Net.aspx + + Contributor: Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Initializes a new instance of the class based on an already + instantiated AsioDriver instance. + + A AsioDriver already instantiated. + + + + Allows adjustment of which is the first output channel we write to + + Output Channel offset + Input Channel offset + + + + Gets the driver used. + + The ASIOdriver. + + + + Starts playing the buffers. + + + + + Stops playing the buffers. + + + + + Shows the control panel. + + + + + Releases this instance. + + + + + Determines whether the specified sample rate is supported. + + The sample rate. + + true if [is sample rate supported]; otherwise, false. + + + + + Sets the sample rate. + + The sample rate. + + + + Gets or sets the fill buffer callback. + + The fill buffer callback. + + + + Gets the capabilities of the AsioDriver. + + The capabilities. + + + + Creates the buffers for playing. + + The number of outputs channels. + The number of input channel. + if set to true [use max buffer size] else use Prefered size + + + + Builds the capabilities internally. + + + + + Callback called by the AsioDriver on fill buffer demand. Redirect call to external callback. + + Index of the double buffer. + if set to true [direct process]. + + + + Callback called by the AsioDriver on event "Samples rate changed". + + The sample rate. + + + + Asio message call back. + + The selector. + The value. + The message. + The opt. + + + + + Buffers switch time info call back. + + The asio time param. + Index of the double buffer. + if set to true [direct process]. + + + + + ASIO Error Codes + + + + + This value will be returned whenever the call succeeded + + + + + unique success return value for ASIOFuture calls + + + + + hardware input or output is not present or available + + + + + hardware is malfunctioning (can be returned by any ASIO function) + + + + + input parameter invalid + + + + + hardware is in a bad mode or used in a bad mode + + + + + hardware is not running when sample position is inquired + + + + + sample clock or rate cannot be determined or is not present + + + + + not enough memory for completing the request + + + + + ASIO Message Selector + + + + + selector in <value>, returns 1L if supported, + + + + + returns engine (host) asio implementation version, + + + + + request driver reset. if accepted, this + + + + + not yet supported, will currently always return 0L. + + + + + the driver went out of sync, such that + + + + + the drivers latencies have changed. The engine + + + + + if host returns true here, it will expect the + + + + + supports timecode + + + + + unused - value: number of commands, message points to mmc commands + + + + + kAsioSupportsXXX return 1 if host supports this + + + + + unused and undefined + + + + + unused and undefined + + + + + unused and undefined + + + + + unused and undefined + + + + + driver detected an overload + + + + + This class stores convertors for different interleaved WaveFormat to ASIOSampleType separate channel + format. + + + + + Selects the sample convertor based on the input WaveFormat and the output ASIOSampleTtype. + + The wave format. + The type. + + + + + Optimized convertor for 2 channels SHORT + + + + + Generic convertor for SHORT + + + + + Optimized convertor for 2 channels FLOAT + + + + + Generic convertor Float to INT + + + + + Optimized convertor for 2 channels INT to INT + + + + + Generic convertor INT to INT + + + + + Optimized convertor for 2 channels INT to SHORT + + + + + Generic convertor INT to SHORT + + + + + Generic convertor INT to FLOAT + + + + + Optimized convertor for 2 channels SHORT + + + + + Generic convertor for SHORT + + + + + Optimized convertor for 2 channels FLOAT + + + + + Generic convertor SHORT + + + + + Generic converter 24 LSB + + + + + Generic convertor for float + + + + + ASIO Sample Type + + + + + Int 16 MSB + + + + + Int 24 MSB (used for 20 bits as well) + + + + + Int 32 MSB + + + + + IEEE 754 32 bit float + + + + + IEEE 754 64 bit double float + + + + + 32 bit data with 16 bit alignment + + + + + 32 bit data with 18 bit alignment + + + + + 32 bit data with 20 bit alignment + + + + + 32 bit data with 24 bit alignment + + + + + Int 16 LSB + + + + + Int 24 LSB + used for 20 bits as well + + + + + Int 32 LSB + + + + + IEEE 754 32 bit float, as found on Intel x86 architecture + + + + + IEEE 754 64 bit double float, as found on Intel x86 architecture + + + + + 32 bit data with 16 bit alignment + + + + + 32 bit data with 18 bit alignment + + + + + 32 bit data with 20 bit alignment + + + + + 32 bit data with 24 bit alignment + + + + + DSD 1 bit data, 8 samples per byte. First sample in Least significant bit. + + + + + DSD 1 bit data, 8 samples per byte. First sample in Most significant bit. + + + + + DSD 8 bit data, 1 sample per byte. No Endianness required. + + + + + ASIO common Exception. + + + + + Gets the name of the error. + + The error. + the name of the error + + + + Represents an installed ACM Driver + + + + + Helper function to determine whether a particular codec is installed + + The short name of the function + Whether the codec is installed + + + + Attempts to add a new ACM driver from a file + + Full path of the .acm or dll file containing the driver + Handle to the driver + + + + Removes a driver previously added using AddLocalDriver + + Local driver to remove + + + + Show Format Choose Dialog + + Owner window handle, can be null + Window title + Enumeration flags. None to get everything + Enumeration format. Only needed with certain enumeration flags + The selected format + Textual description of the selected format + Textual description of the selected format tag + True if a format was selected + + + + Gets the maximum size needed to store a WaveFormat for ACM interop functions + + + + + Finds a Driver by its short name + + Short Name + The driver, or null if not found + + + + Gets a list of the ACM Drivers installed + + + + + The callback for acmDriverEnum + + + + + Creates a new ACM Driver object + + Driver handle + + + + The short name of this driver + + + + + The full name of this driver + + + + + The driver ID + + + + + ToString + + + + + The list of FormatTags for this ACM Driver + + + + + Gets all the supported formats for a given format tag + + Format tag + Supported formats + + + + Opens this driver + + + + + Closes this driver + + + + + Dispose + + + + + Flags for use with acmDriverAdd + + + + + ACM_DRIVERADDF_LOCAL + + + + + ACM_DRIVERADDF_GLOBAL + + + + + ACM_DRIVERADDF_FUNCTION + + + + + ACM_DRIVERADDF_NOTIFYHWND + + + + + Interop structure for ACM driver details (ACMDRIVERDETAILS) + http://msdn.microsoft.com/en-us/library/dd742889%28VS.85%29.aspx + + + + + DWORD cbStruct + + + + + FOURCC fccType + + + + + FOURCC fccComp + + + + + WORD wMid; + + + + + WORD wPid + + + + + DWORD vdwACM + + + + + DWORD vdwDriver + + + + + DWORD fdwSupport; + + + + + DWORD cFormatTags + + + + + DWORD cFilterTags + + + + + HICON hicon + + + + + TCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]; + + + + + TCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]; + + + + + TCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]; + + + + + TCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]; + + + + + TCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]; + + + + + ACMDRIVERDETAILS_SHORTNAME_CHARS + + + + + ACMDRIVERDETAILS_LONGNAME_CHARS + + + + + ACMDRIVERDETAILS_COPYRIGHT_CHARS + + + + + ACMDRIVERDETAILS_LICENSING_CHARS + + + + + ACMDRIVERDETAILS_FEATURES_CHARS + + + + + Flags indicating what support a particular ACM driver has + + + + ACMDRIVERDETAILS_SUPPORTF_CODEC - Codec + + + ACMDRIVERDETAILS_SUPPORTF_CONVERTER - Converter + + + ACMDRIVERDETAILS_SUPPORTF_FILTER - Filter + + + ACMDRIVERDETAILS_SUPPORTF_HARDWARE - Hardware + + + ACMDRIVERDETAILS_SUPPORTF_ASYNC - Async + + + ACMDRIVERDETAILS_SUPPORTF_LOCAL - Local + + + ACMDRIVERDETAILS_SUPPORTF_DISABLED - Disabled + + + + ACM_DRIVERENUMF_NOLOCAL, Only global drivers should be included in the enumeration + + + + + ACM_DRIVERENUMF_DISABLED, Disabled ACM drivers should be included in the enumeration + + + + + ACM Format + + + + + Format Index + + + + + Format Tag + + + + + Support Flags + + + + + WaveFormat + + + + + WaveFormat Size + + + + + Format Description + + + + + ACMFORMATCHOOSE + http://msdn.microsoft.com/en-us/library/dd742911%28VS.85%29.aspx + + + + + DWORD cbStruct; + + + + + DWORD fdwStyle; + + + + + HWND hwndOwner; + + + + + LPWAVEFORMATEX pwfx; + + + + + DWORD cbwfx; + + + + + LPCTSTR pszTitle; + + + + + TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; + + + + + TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; + + + + + LPTSTR pszName; + n.b. can be written into + + + + + DWORD cchName + Should be at least 128 unless name is zero + + + + + DWORD fdwEnum; + + + + + LPWAVEFORMATEX pwfxEnum; + + + + + HINSTANCE hInstance; + + + + + LPCTSTR pszTemplateName; + + + + + LPARAM lCustData; + + + + + ACMFORMATCHOOSEHOOKPROC pfnHook; + + + + + None + + + + + ACMFORMATCHOOSE_STYLEF_SHOWHELP + + + + + ACMFORMATCHOOSE_STYLEF_ENABLEHOOK + + + + + ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE + + + + + ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE + + + + + ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT + + + + + ACMFORMATCHOOSE_STYLEF_CONTEXTHELP + + + + + ACMFORMATDETAILS + http://msdn.microsoft.com/en-us/library/dd742913%28VS.85%29.aspx + + + + + DWORD cbStruct; + + + + + DWORD dwFormatIndex; + + + + + DWORD dwFormatTag; + + + + + DWORD fdwSupport; + + + + + LPWAVEFORMATEX pwfx; + + + + + DWORD cbwfx; + + + + + TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; + + + + + ACMFORMATDETAILS_FORMAT_CHARS + + + + + Format Enumeration Flags + + + + + None + + + + + ACM_FORMATENUMF_CONVERT + The WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will only enumerate destination formats that can be converted from the given pwfx format. + + + + + ACM_FORMATENUMF_HARDWARE + The enumerator should only enumerate formats that are supported as native input or output formats on one or more of the installed waveform-audio devices. This flag provides a way for an application to choose only formats native to an installed waveform-audio device. This flag must be used with one or both of the ACM_FORMATENUMF_INPUT and ACM_FORMATENUMF_OUTPUT flags. Specifying both ACM_FORMATENUMF_INPUT and ACM_FORMATENUMF_OUTPUT will enumerate only formats that can be opened for input or output. This is true regardless of whether this flag is specified. + + + + + ACM_FORMATENUMF_INPUT + Enumerator should enumerate only formats that are supported for input (recording). + + + + + ACM_FORMATENUMF_NCHANNELS + The nChannels member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_NSAMPLESPERSEC + The nSamplesPerSec member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_OUTPUT + Enumerator should enumerate only formats that are supported for output (playback). + + + + + ACM_FORMATENUMF_SUGGEST + The WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate all suggested destination formats for the given pwfx format. This mechanism can be used instead of the acmFormatSuggest function to allow an application to choose the best suggested format for conversion. The dwFormatIndex member will always be set to zero on return. + + + + + ACM_FORMATENUMF_WBITSPERSAMPLE + The wBitsPerSample member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_WFORMATTAG + The wFormatTag member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. The dwFormatTag member of the ACMFORMATDETAILS structure must be equal to the wFormatTag member. + + + + + ACM_FORMATSUGGESTF_WFORMATTAG + + + + + ACM_FORMATSUGGESTF_NCHANNELS + + + + + ACM_FORMATSUGGESTF_NSAMPLESPERSEC + + + + + ACM_FORMATSUGGESTF_WBITSPERSAMPLE + + + + + ACM_FORMATSUGGESTF_TYPEMASK + + + + + ACM Format Tag + + + + + Format Tag Index + + + + + Format Tag + + + + + Format Size + + + + + Support Flags + + + + + Standard Formats Count + + + + + Format Description + + + + + DWORD cbStruct; + + + + + DWORD dwFormatTagIndex; + + + + + DWORD dwFormatTag; + + + + + DWORD cbFormatSize; + + + + + DWORD fdwSupport; + + + + + DWORD cStandardFormats; + + + + + TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; + + + + + ACMFORMATTAGDETAILS_FORMATTAG_CHARS + + + + + Interop definitions for Windows ACM (Audio Compression Manager) API + + + + + http://msdn.microsoft.com/en-us/library/dd742910%28VS.85%29.aspx + UINT ACMFORMATCHOOSEHOOKPROC acmFormatChooseHookProc( + HWND hwnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + + + + + http://msdn.microsoft.com/en-us/library/dd742916%28VS.85%29.aspx + MMRESULT acmFormatSuggest( + HACMDRIVER had, + LPWAVEFORMATEX pwfxSrc, + LPWAVEFORMATEX pwfxDst, + DWORD cbwfxDst, + DWORD fdwSuggest); + + + + + http://msdn.microsoft.com/en-us/library/dd742928%28VS.85%29.aspx + MMRESULT acmStreamOpen( + LPHACMSTREAM phas, + HACMDRIVER had, + LPWAVEFORMATEX pwfxSrc, + LPWAVEFORMATEX pwfxDst, + LPWAVEFILTER pwfltr, + DWORD_PTR dwCallback, + DWORD_PTR dwInstance, + DWORD fdwOpen + + + + + A version with pointers for troubleshooting + + + + + AcmStream encapsulates an Audio Compression Manager Stream + used to convert audio from one format to another + + + + + Creates a new ACM stream to convert one format to another. Note that + not all conversions can be done in one step + + The source audio format + The destination audio format + + + + Creates a new ACM stream to convert one format to another, using a + specified driver identifier and wave filter + + the driver identifier + the source format + the wave filter + + + + Returns the number of output bytes for a given number of input bytes + + Number of input bytes + Number of output bytes + + + + Returns the number of source bytes for a given number of destination bytes + + Number of destination bytes + Number of source bytes + + + + Suggests an appropriate PCM format that the compressed format can be converted + to in one step + + The compressed format + The PCM format + + + + Returns the Source Buffer. Fill this with data prior to calling convert + + + + + Returns the Destination buffer. This will contain the converted data + after a successful call to Convert + + + + + Report that we have repositioned in the source stream + + + + + Converts the contents of the SourceBuffer into the DestinationBuffer + + The number of bytes in the SourceBuffer + that need to be converted + The number of source bytes actually converted + The number of converted bytes in the DestinationBuffer + + + + Converts the contents of the SourceBuffer into the DestinationBuffer + + The number of bytes in the SourceBuffer + that need to be converted + The number of converted bytes in the DestinationBuffer + + + + Frees resources associated with this ACM Stream + + + + + Frees resources associated with this ACM Stream + + + + + Frees resources associated with this ACM Stream + + + + + ACMSTREAMHEADER_STATUSF_DONE + + + + + ACMSTREAMHEADER_STATUSF_PREPARED + + + + + ACMSTREAMHEADER_STATUSF_INQUEUE + + + + + Interop structure for ACM stream headers. + ACMSTREAMHEADER + http://msdn.microsoft.com/en-us/library/dd742926%28VS.85%29.aspx + + + + + ACM_STREAMOPENF_QUERY, ACM will be queried to determine whether it supports the given conversion. A conversion stream will not be opened, and no handle will be returned in the phas parameter. + + + + + ACM_STREAMOPENF_ASYNC, Stream conversion should be performed asynchronously. If this flag is specified, the application can use a callback function to be notified when the conversion stream is opened and closed and after each buffer is converted. In addition to using a callback function, an application can examine the fdwStatus member of the ACMSTREAMHEADER structure for the ACMSTREAMHEADER_STATUSF_DONE flag. + + + + + ACM_STREAMOPENF_NONREALTIME, ACM will not consider time constraints when converting the data. By default, the driver will attempt to convert the data in real time. For some formats, specifying this flag might improve the audio quality or other characteristics. + + + + + CALLBACK_TYPEMASK, callback type mask + + + + + CALLBACK_NULL, no callback + + + + + CALLBACK_WINDOW, dwCallback is a HWND + + + + + CALLBACK_TASK, dwCallback is a HTASK + + + + + CALLBACK_FUNCTION, dwCallback is a FARPROC + + + + + CALLBACK_THREAD, thread ID replaces 16 bit task + + + + + CALLBACK_EVENT, dwCallback is an EVENT Handle + + + + + ACM_STREAMSIZEF_SOURCE + + + + + ACM_STREAMSIZEF_DESTINATION + + + + + Summary description for WaveFilter. + + + + + cbStruct + + + + + dwFilterTag + + + + + fdwFilter + + + + + reserved + + + + ACM_METRIC_COUNT_DRIVERS + + + ACM_METRIC_COUNT_CODECS + + + ACM_METRIC_COUNT_CONVERTERS + + + ACM_METRIC_COUNT_FILTERS + + + ACM_METRIC_COUNT_DISABLED + + + ACM_METRIC_COUNT_HARDWARE + + + ACM_METRIC_COUNT_LOCAL_DRIVERS + + + ACM_METRIC_COUNT_LOCAL_CODECS + + + ACM_METRIC_COUNT_LOCAL_CONVERTERS + + + ACM_METRIC_COUNT_LOCAL_FILTERS + + + ACM_METRIC_COUNT_LOCAL_DISABLED + + + ACM_METRIC_HARDWARE_WAVE_INPUT + + + ACM_METRIC_HARDWARE_WAVE_OUTPUT + + + ACM_METRIC_MAX_SIZE_FORMAT + + + ACM_METRIC_MAX_SIZE_FILTER + + + ACM_METRIC_DRIVER_SUPPORT + + + ACM_METRIC_DRIVER_PRIORITY + + + + ACM_STREAMCONVERTF_BLOCKALIGN + + + + + ACM_STREAMCONVERTF_START + + + + + ACM_STREAMCONVERTF_END + + + + + Wave Callback Info + + + + + Callback Strategy + + + + + Window Handle (if applicable) + + + + + Sets up a new WaveCallbackInfo for function callbacks + + + + + Sets up a new WaveCallbackInfo to use a New Window + IMPORTANT: only use this on the GUI thread + + + + + Sets up a new WaveCallbackInfo to use an existing window + IMPORTANT: only use this on the GUI thread + + + + + Wave Callback Strategy + + + + + Use a function + + + + + Create a new window (should only be done if on GUI thread) + + + + + Use an existing window handle + + + + + Use an event handle + + + + + WaveHeader interop structure (WAVEHDR) + http://msdn.microsoft.com/en-us/library/dd743837%28VS.85%29.aspx + + + + pointer to locked data buffer (lpData) + + + length of data buffer (dwBufferLength) + + + used for input only (dwBytesRecorded) + + + for client's use (dwUser) + + + assorted flags (dwFlags) + + + loop control counter (dwLoops) + + + PWaveHdr, reserved for driver (lpNext) + + + reserved for driver + + + + Wave Header Flags enumeration + + + + + WHDR_BEGINLOOP + This buffer is the first buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_DONE + Set by the device driver to indicate that it is finished with the buffer and is returning it to the application. + + + + + WHDR_ENDLOOP + This buffer is the last buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_INQUEUE + Set by Windows to indicate that the buffer is queued for playback. + + + + + WHDR_PREPARED + Set by Windows to indicate that the buffer has been prepared with the waveInPrepareHeader or waveOutPrepareHeader function. + + + + + WaveInCapabilities structure (based on WAVEINCAPS2 from mmsystem.h) + http://msdn.microsoft.com/en-us/library/ms713726(VS.85).aspx + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Number of channels supported + + + + + The product name + + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + The device name from the registry if supported + + + + + Event Args for WaveInStream event + + + + + Creates new WaveInEventArgs + + + + + Buffer containing recorded data. Note that it might not be completely + full. + + + + + The number of recorded bytes in Buffer. + + + + + MME Wave function interop + + + + + CALLBACK_NULL + No callback + + + + + CALLBACK_FUNCTION + dwCallback is a FARPROC + + + + + CALLBACK_EVENT + dwCallback is an EVENT handle + + + + + CALLBACK_WINDOW + dwCallback is a HWND + + + + + CALLBACK_THREAD + callback is a thread ID + + + + + WIM_OPEN + + + + + WIM_CLOSE + + + + + WIM_DATA + + + + + WOM_CLOSE + + + + + WOM_DONE + + + + + WOM_OPEN + + + + + WaveOutCapabilities structure (based on WAVEOUTCAPS2 from mmsystem.h) + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_waveoutcaps_str.asp + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Optional functionality supported by the device + + + + + Number of channels supported + + + + + Whether playback control is supported + + + + + The product name + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Supported wave formats for WaveOutCapabilities + + + + + 11.025 kHz, Mono, 8-bit + + + + + 11.025 kHz, Stereo, 8-bit + + + + + 11.025 kHz, Mono, 16-bit + + + + + 11.025 kHz, Stereo, 16-bit + + + + + 22.05 kHz, Mono, 8-bit + + + + + 22.05 kHz, Stereo, 8-bit + + + + + 22.05 kHz, Mono, 16-bit + + + + + 22.05 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 48 kHz, Mono, 8-bit + + + + + 48 kHz, Stereo, 8-bit + + + + + 48 kHz, Mono, 16-bit + + + + + 48 kHz, Stereo, 16-bit + + + + + 96 kHz, Mono, 8-bit + + + + + 96 kHz, Stereo, 8-bit + + + + + 96 kHz, Mono, 16-bit + + + + + 96 kHz, Stereo, 16-bit + + + + + Flags indicating what features this WaveOut device supports + + + + supports pitch control (WAVECAPS_PITCH) + + + supports playback rate control (WAVECAPS_PLAYBACKRATE) + + + supports volume control (WAVECAPS_VOLUME) + + + supports separate left-right volume control (WAVECAPS_LRVOLUME) + + + (WAVECAPS_SYNC) + + + (WAVECAPS_SAMPLEACCURATE) + + + + Sample provider interface to make WaveChannel32 extensible + Still a bit ugly, hence internal at the moment - and might even make these into + bit depth converting WaveProviders + + + + + ADSR sample provider allowing you to specify attack, decay, sustain and release values + + + + + Creates a new AdsrSampleProvider with default values + + + + + Attack time in seconds + + + + + Release time in seconds + + + + + Reads audio from this sample provider + + + + + Enters the Release phase + + + + + The output WaveFormat + + + + + Sample Provider to concatenate multiple sample providers together + + + + + Creates a new ConcatenatingSampleProvider + + The source providers to play one after the other. Must all share the same sample rate and channel count + + + + The WaveFormat of this Sample Provider + + + + + Read Samples from this sample provider + + + + + Sample Provider to allow fading in and out + + + + + Creates a new FadeInOutSampleProvider + + The source stream with the audio to be faded in or out + If true, we start faded out + + + + Requests that a fade-in begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Requests that a fade-out begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Reads samples from this sample provider + + Buffer to read into + Offset within buffer to write to + Number of samples desired + Number of samples read + + + + WaveFormat of this SampleProvider + + + + + Simple SampleProvider that passes through audio unchanged and raises + an event every n samples with the maximum sample value from the period + for metering purposes + + + + + Number of Samples per notification + + + + + Raised periodically to inform the user of the max volume + + + + + Initialises a new instance of MeteringSampleProvider that raises 10 stream volume + events per second + + Source sample provider + + + + Initialises a new instance of MeteringSampleProvider + + source sampler provider + Number of samples between notifications + + + + The WaveFormat of this sample provider + + + + + Reads samples from this Sample Provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Event args for aggregated stream volume + + + + + Max sample values array (one for each channel) + + + + + A sample provider mixer, allowing inputs to be added and removed + + + + + Creates a new MixingSampleProvider, with no inputs, but a specified WaveFormat + + The WaveFormat of this mixer. All inputs must be in this format + + + + Creates a new MixingSampleProvider, based on the given inputs + + Mixer inputs - must all have the same waveformat, and must + all be of the same WaveFormat. There must be at least one input + + + + Returns the mixer inputs (read-only - use AddMixerInput to add an input + + + + + When set to true, the Read method always returns the number + of samples requested, even if there are no inputs, or if the + current inputs reach their end. Setting this to true effectively + makes this a never-ending sample provider, so take care if you plan + to write it out to a file. + + + + + Adds a WaveProvider as a Mixer input. + Must be PCM or IEEE float already + + IWaveProvider mixer input + + + + Adds a new mixer input + + Mixer input + + + + Raised when a mixer input has been removed because it has ended + + + + + Removes a mixer input + + Mixer input to remove + + + + Removes all mixer inputs + + + + + The output WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + SampleProvider event args + + + + + Constructs a new SampleProviderEventArgs + + + + + The Sample Provider + + + + + No nonsense mono to stereo provider, no volume adjustment, + just copies input to left and right. + + + + + Initializes a new instance of MonoToStereoSampleProvider + + Source sample provider + + + + WaveFormat of this provider + + + + + Reads samples from this provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Multiplier for left channel (default is 1.0) + + + + + Multiplier for right channel (default is 1.0) + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing sample provider, allowing re-patching of input channels to different + output channels + + Input sample providers. Must all be of the same sample rate, but can have any number of channels + Desired number of output channels. + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads samples from this sample provider + + Buffer to be filled with sample data + Offset into buffer to start writing to, usually 0 + Number of samples required + Number of samples read + + + + The output WaveFormat for this SampleProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Simple class that raises an event on every sample + + + + + Initializes a new instance of NotifyingSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Sample notifier + + + + + Allows you to: + 1. insert a pre-delay of silence before the source begins + 2. skip over a certain amount of the beginning of the source + 3. only play a set amount from the source + 4. insert silence at the end after the source is complete + + + + + Number of samples of silence to insert before playing source + + + + + Amount of silence to insert before playing + + + + + Number of samples in source to discard + + + + + Amount of audio to skip over from the source before beginning playback + + + + + Number of samples to read from source (if 0, then read it all) + + + + + Amount of audio to take from the source (TimeSpan.Zero means play to end) + + + + + Number of samples of silence to insert after playing source + + + + + Amount of silence to insert after playing source + + + + + Creates a new instance of offsetSampleProvider + + The Source Sample Provider to read from + + + + The WaveFormat of this SampleProvider + + + + + Reads from this sample provider + + Sample buffer + Offset within sample buffer to read to + Number of samples required + Number of samples read + + + + Converts a mono sample provider to stereo, with a customisable pan strategy + + + + + Initialises a new instance of the PanningSampleProvider + + Source sample provider, must be mono + + + + Pan value, must be between -1 (left) and 1 (right) + + + + + The pan strategy currently in use + + + + + The WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Pair of floating point values, representing samples or multipliers + + + + + Left value + + + + + Right value + + + + + Required Interface for a Panning Strategy + + + + + Gets the left and right multipliers for a given pan value + + Pan value from -1 to 1 + Left and right multipliers in a stereo sample pair + + + + Simplistic "balance" control - treating the mono input as if it was stereo + In the centre, both channels full volume. Opposite channel decays linearly + as balance is turned to to one side + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Square Root Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Sinus Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Linear Pan + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Converts an IWaveProvider containing 16 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm16BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Samples required + Number of samples read + + + + Converts an IWaveProvider containing 24 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm24BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 32 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm32BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 8 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm8BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples to read + Number of samples read + + + + Utility class that takes an IWaveProvider input at any bit depth + and exposes it as an ISampleProvider. Can turn mono inputs into stereo, + and allows adjusting of volume + (The eventual successor to WaveChannel32) + This class also serves as an example of how you can link together several simple + Sample Providers to form a more useful class. + + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + force mono inputs to become stereo + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + The WaveFormat of this Sample Provider + + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Raised periodically to inform the user of the max volume + (before the volume meter) + + + + + Helper base class for classes converting to ISampleProvider + + + + + Source Wave Provider + + + + + Source buffer (to avoid constantly creating small buffers during playback) + + + + + Initialises a new instance of SampleProviderConverterBase + + Source Wave provider + + + + Wave format of this wave provider + + + + + Reads samples from the source wave provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Ensure the source buffer exists and is big enough + + Bytes required + + + + Utility class for converting to SampleProvider + + + + + Helper function to go from IWaveProvider to a SampleProvider + Must already be PCM or IEEE float + + The WaveProvider to convert + A sample provider + + + + Helper class for when you need to convert back to an IWaveProvider from + an ISampleProvider. Keeps it as IEEE float + + + + + Initializes a new instance of the WaveProviderFloatToWaveProvider class + + Source wave provider + + + + Reads from this provider + + + + + The waveformat of this WaveProvider (same as the source) + + + + + Converts a sample provider to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts a sample provider to 24 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream, clipping if necessary + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + The Format of this IWaveProvider + + + + + + Volume of this channel. 1.0 = full scale, 0.0 to mute + + + + + Signal Generator + Sin, Square, Triangle, SawTooth, White Noise, Pink Noise, Sweep. + + + Posibility to change ISampleProvider + Example : + --------- + WaveOut _waveOutGene = new WaveOut(); + WaveGenerator wg = new SignalGenerator(); + wg.Type = ... + wg.Frequency = ... + wg ... + _waveOutGene.Init(wg); + _waveOutGene.Play(); + + + + + Initializes a new instance for the Generator (Default :: 44.1Khz, 2 channels, Sinus, Frequency = 440, Gain = 1) + + + + + Initializes a new instance for the Generator (UserDef SampleRate & Channels) + + Desired sample rate + Number of channels + + + + The waveformat of this WaveProvider (same as the source) + + + + + Frequency for the Generator. (20.0 - 20000.0 Hz) + Sin, Square, Triangle, SawTooth, Sweep (Start Frequency). + + + + + Return Log of Frequency Start (Read only) + + + + + End Frequency for the Sweep Generator. (Start Frequency in Frequency) + + + + + Return Log of Frequency End (Read only) + + + + + Gain for the Generator. (0.0 to 1.0) + + + + + Channel PhaseReverse + + + + + Type of Generator. + + + + + Length Seconds for the Sweep Generator. + + + + + Reads from this provider. + + + + + Private :: Random for WhiteNoise & Pink Noise (Value form -1 to 1) + + Random value from -1 to +1 + + + + Signal Generator type + + + + + Pink noise + + + + + White noise + + + + + Sweep + + + + + Sine wave + + + + + Square wave + + + + + Triangle Wave + + + + + Sawtooth wave + + + + + Author: Freefall + Date: 05.08.16 + Based on: the port of Stephan M. Bernsee´s pitch shifting class + Port site: https://sites.google.com/site/mikescoderama/pitch-shifting + Test application and github site: https://github.com/Freefall63/NAudio-Pitchshifter + + NOTE: I strongly advice to add a Limiter for post-processing. + For my needs the FastAttackCompressor1175 provides acceptable results: + https://github.com/Jiyuu/SkypeFX/blob/master/JSNet/FastAttackCompressor1175.cs + + UPDATE: Added a simple Limiter based on the pydirac implementation. + https://github.com/echonest/remix/blob/master/external/pydirac225/source/Dirac_LE.cpp + + + + + + Creates a new SMB Pitch Shifting Sample Provider with default settings + + Source provider + + + + Creates a new SMB Pitch Shifting Sample Provider with custom settings + + Source provider + FFT Size (any power of two <= 4096: 4096, 2048, 1024, 512, ...) + Oversampling (number of overlapping windows) + Initial pitch (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + Read from this sample provider + + + + + WaveFormat + + + + + Pitch Factor (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + + Takes a stereo input and turns it to mono + + + + + Creates a new mono ISampleProvider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this SampleProvider + + + + + Very simple sample provider supporting adjustable gain + + + + + Initializes a new instance of VolumeSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Helper class turning an already 32 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Helper class turning an already 64 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Fully managed resampling sample provider, based on the WDL Resampler + + + + + Constructs a new resampler + + Source to resample + Desired output sample rate + + + + Reads from this sample provider + + + + + Output WaveFormat + + + + + Useful extension methods to make switching between WaveAndSampleProvider easier + + + + + Converts a WaveProvider into a SampleProvider (only works for PCM) + + WaveProvider to convert + + + + + Allows sending a SampleProvider directly to an IWavePlayer without needing to convert + back to an IWaveProvider + + The WavePlayer + + + + + + Turns WaveFormatExtensible into a standard waveformat if possible + + Input wave format + A standard PCM or IEEE waveformat, or the original waveformat + + + + Converts a ISampleProvider to a IWaveProvider but still 32 bit float + + SampleProvider to convert + An IWaveProvider + + + + Converts a ISampleProvider to a IWaveProvider but and convert to 16 bit + + SampleProvider to convert + A 16 bit IWaveProvider + + + + Concatenates one Sample Provider on the end of another + + The sample provider to play first + The sample provider to play next + A single sampleprovider to play one after the other + + + + Concatenates one Sample Provider on the end of another with silence inserted + + The sample provider to play first + Silence duration to insert between the two + The sample provider to play next + A single sample provider + + + + Skips over a specified amount of time (by consuming source stream) + + Source sample provider + Duration to skip over + A sample provider that skips over the specified amount of time + + + + Takes a specified amount of time from the source stream + + Source sample provider + Duration to take + A sample provider that reads up to the specified amount of time + + + + Converts a Stereo Sample Provider to mono, allowing mixing of channel volume + + Stereo Source Provider + Amount of left channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + Amount of right channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + A mono SampleProvider + + + + Converts a Mono ISampleProvider to stereo + + Mono Source Provider + Amount to mix to left channel (1.0 is full volume) + Amount to mix to right channel (1.0 is full volume) + + + + + Microsoft ADPCM + See http://icculus.org/SDL_sound/downloads/external_documentation/wavecomp.htm + + + + + Empty constructor needed for marshalling from a pointer + + + + + Samples per block + + + + + Number of coefficients + + + + + Coefficients + + + + + Microsoft ADPCM + + Sample Rate + Channels + + + + Serializes this wave format + + Binary writer + + + + String Description of this WaveFormat + + + + + GSM 610 + + + + + Creates a GSM 610 WaveFormat + For now hardcoded to 13kbps + + + + + Samples per block + + + + + Writes this structure to a BinaryWriter + + + + + IMA/DVI ADPCM Wave Format + Work in progress + + + + + parameterless constructor for Marshalling + + + + + Creates a new IMA / DVI ADPCM Wave Format + + Sample Rate + Number of channels + Bits Per Sample + + + + MP3 WaveFormat, MPEGLAYER3WAVEFORMAT from mmreg.h + + + + + Wave format ID (wID) + + + + + Padding flags (fdwFlags) + + + + + Block Size (nBlockSize) + + + + + Frames per block (nFramesPerBlock) + + + + + Codec Delay (nCodecDelay) + + + + + Creates a new MP3 WaveFormat + + + + + Wave Format Padding Flags + + + + + MPEGLAYER3_FLAG_PADDING_ISO + + + + + MPEGLAYER3_FLAG_PADDING_ON + + + + + MPEGLAYER3_FLAG_PADDING_OFF + + + + + Wave Format ID + + + + MPEGLAYER3_ID_UNKNOWN + + + MPEGLAYER3_ID_MPEG + + + MPEGLAYER3_ID_CONSTANTFRAMESIZE + + + + DSP Group TrueSpeech + + + + + DSP Group TrueSpeech WaveFormat + + + + + Writes this structure to a BinaryWriter + + + + + Represents a Wave file format + + + + format type + + + number of channels + + + sample rate + + + for buffer estimation + + + block size of data + + + number of bits per sample of mono data + + + number of following bytes + + + + Creates a new PCM 44.1Khz stereo 16 bit format + + + + + Creates a new 16 bit wave format with the specified sample + rate and channel count + + Sample Rate + Number of channels + + + + Gets the size of a wave buffer equivalent to the latency in milliseconds. + + The milliseconds. + + + + + Creates a WaveFormat with custom members + + The encoding + Sample Rate + Number of channels + Average Bytes Per Second + Block Align + Bits Per Sample + + + + + Creates an A-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a Mu-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a new PCM format with the specified sample rate, bit depth and channels + + + + + Creates a new 32 bit IEEE floating point wave format + + sample rate + number of channels + + + + Helper function to retrieve a WaveFormat structure from a pointer + + WaveFormat structure + + + + + Helper function to marshal WaveFormat to an IntPtr + + WaveFormat + IntPtr to WaveFormat structure (needs to be freed by callee) + + + + Reads in a WaveFormat (with extra data) from a fmt chunk (chunk identifier and + length should already have been read) + + Binary reader + Format chunk length + A WaveFormatExtraData + + + + Reads a new WaveFormat object from a stream + + A binary reader that wraps the stream + + + + Reports this WaveFormat as a string + + String describing the wave format + + + + Compares with another WaveFormat object + + Object to compare to + True if the objects are the same + + + + Provides a Hashcode for this WaveFormat + + A hashcode + + + + Returns the encoding type used + + + + + Writes this WaveFormat object to a stream + + the output stream + + + + Returns the number of channels (1=mono,2=stereo etc) + + + + + Returns the sample rate (samples per second) + + + + + Returns the average number of bytes used per second + + + + + Returns the block alignment + + + + + Returns the number of bits per sample (usually 16 or 32, sometimes 24 or 8) + Can be 0 for some codecs + + + + + Returns the number of extra bytes used by this waveformat. Often 0, + except for compressed formats which store extra data after the WAVEFORMATEX header + + + + + Custom marshaller for WaveFormat structures + + + + + Gets the instance of this marshaller + + + + + + + Clean up managed data + + + + + Clean up native data + + + + + + Get native data size + + + + + Marshal managed to native + + + + + Marshal Native to Managed + + + + + Summary description for WaveFormatEncoding. + + + + WAVE_FORMAT_UNKNOWN, Microsoft Corporation + + + WAVE_FORMAT_PCM Microsoft Corporation + + + WAVE_FORMAT_ADPCM Microsoft Corporation + + + WAVE_FORMAT_IEEE_FLOAT Microsoft Corporation + + + WAVE_FORMAT_VSELP Compaq Computer Corp. + + + WAVE_FORMAT_IBM_CVSD IBM Corporation + + + WAVE_FORMAT_ALAW Microsoft Corporation + + + WAVE_FORMAT_MULAW Microsoft Corporation + + + WAVE_FORMAT_DTS Microsoft Corporation + + + WAVE_FORMAT_DRM Microsoft Corporation + + + WAVE_FORMAT_WMAVOICE9 + + + WAVE_FORMAT_OKI_ADPCM OKI + + + WAVE_FORMAT_DVI_ADPCM Intel Corporation + + + WAVE_FORMAT_IMA_ADPCM Intel Corporation + + + WAVE_FORMAT_MEDIASPACE_ADPCM Videologic + + + WAVE_FORMAT_SIERRA_ADPCM Sierra Semiconductor Corp + + + WAVE_FORMAT_G723_ADPCM Antex Electronics Corporation + + + WAVE_FORMAT_DIGISTD DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIFIX DSP Solutions, Inc. + + + WAVE_FORMAT_DIALOGIC_OKI_ADPCM Dialogic Corporation + + + WAVE_FORMAT_MEDIAVISION_ADPCM Media Vision, Inc. + + + WAVE_FORMAT_CU_CODEC Hewlett-Packard Company + + + WAVE_FORMAT_YAMAHA_ADPCM Yamaha Corporation of America + + + WAVE_FORMAT_SONARC Speech Compression + + + WAVE_FORMAT_DSPGROUP_TRUESPEECH DSP Group, Inc + + + WAVE_FORMAT_ECHOSC1 Echo Speech Corporation + + + WAVE_FORMAT_AUDIOFILE_AF36, Virtual Music, Inc. + + + WAVE_FORMAT_APTX Audio Processing Technology + + + WAVE_FORMAT_AUDIOFILE_AF10, Virtual Music, Inc. + + + WAVE_FORMAT_PROSODY_1612, Aculab plc + + + WAVE_FORMAT_LRC, Merging Technologies S.A. + + + WAVE_FORMAT_DOLBY_AC2, Dolby Laboratories + + + WAVE_FORMAT_GSM610, Microsoft Corporation + + + WAVE_FORMAT_MSNAUDIO, Microsoft Corporation + + + WAVE_FORMAT_ANTEX_ADPCME, Antex Electronics Corporation + + + WAVE_FORMAT_CONTROL_RES_VQLPC, Control Resources Limited + + + WAVE_FORMAT_DIGIREAL, DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIADPCM, DSP Solutions, Inc. + + + WAVE_FORMAT_CONTROL_RES_CR10, Control Resources Limited + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_MPEG, Microsoft Corporation + + + + + + + + + WAVE_FORMAT_MPEGLAYER3, ISO/MPEG Layer3 Format Tag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_GSM + + + WAVE_FORMAT_G729 + + + WAVE_FORMAT_G723 + + + WAVE_FORMAT_ACELP + + + + WAVE_FORMAT_RAW_AAC1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Windows Media Audio, WAVE_FORMAT_WMAUDIO2, Microsoft Corporation + + + + + Windows Media Audio Professional WAVE_FORMAT_WMAUDIO3, Microsoft Corporation + + + + + Windows Media Audio Lossless, WAVE_FORMAT_WMAUDIO_LOSSLESS + + + + + Windows Media Audio Professional over SPDIF WAVE_FORMAT_WMASPDIF (0x0164) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Advanced Audio Coding (AAC) audio in Audio Data Transport Stream (ADTS) format. + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_ADTS_AAC. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral band replication (SBR) or parametric stereo (PS) tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + + Source wmCodec.h + + + + MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_LOAS. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral SBR or PS tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + NOKIA_MPEG_ADTS_AAC + Source wmCodec.h + + + NOKIA_MPEG_RAW_AAC + Source wmCodec.h + + + VODAFONE_MPEG_ADTS_AAC + Source wmCodec.h + + + VODAFONE_MPEG_RAW_AAC + Source wmCodec.h + + + + High-Efficiency Advanced Audio Coding (HE-AAC) stream. + The format block is an HEAACWAVEFORMAT structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + WAVE_FORMAT_DVM + + + WAVE_FORMAT_VORBIS1 "Og" Original stream compatible + + + WAVE_FORMAT_VORBIS2 "Pg" Have independent header + + + WAVE_FORMAT_VORBIS3 "Qg" Have no codebook header + + + WAVE_FORMAT_VORBIS1P "og" Original stream compatible + + + WAVE_FORMAT_VORBIS2P "pg" Have independent headere + + + WAVE_FORMAT_VORBIS3P "qg" Have no codebook header + + + WAVE_FORMAT_EXTENSIBLE + + + + + + + WaveFormatExtensible + http://www.microsoft.com/whdc/device/audio/multichaud.mspx + + + + + Parameterless constructor for marshalling + + + + + Creates a new WaveFormatExtensible for PCM or IEEE + + + + + WaveFormatExtensible for PCM or floating point can be awkward to work with + This creates a regular WaveFormat structure representing the same audio format + Returns the WaveFormat unchanged for non PCM or IEEE float + + + + + + SubFormat (may be one of AudioMediaSubtypes) + + + + + Serialize + + + + + + String representation + + + + + This class used for marshalling from unmanaged code + + + + + Allows the extra data to be read + + + + + parameterless constructor for marshalling + + + + + Reads this structure from a BinaryReader + + + + + Writes this structure to a BinaryWriter + + + + + The WMA wave format. + May not be much use because WMA codec is a DirectShow DMO not an ACM + + + + + Generic interface for wave recording + + + + + Recording WaveFormat + + + + + Start Recording + + + + + Stop Recording + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + WASAPI Loopback Capture + based on a contribution from "Pygmy" - http://naudio.codeplex.com/discussions/203605 + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Gets the default audio loopback capture device + + The default audio loopback capture device + + + + Capturing wave format + + + + + Specify loopback + + + + + Allows recording using the Windows waveIn APIs + Events are raised as recorded buffers are made available + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Prepares a Wave input device for recording + + + + + Creates a WaveIn device using the specified window handle for callbacks + + A valid window handle + + + + Prepares a Wave input device for recording + + + + + Returns the number of Wave In devices available in the system + + + + + Retrieves the capabilities of a waveIn device + + Device to test + The WaveIn device capabilities + + + + Milliseconds for the buffer. Recommended value is 100ms + + + + + Number of Buffers to use (usually 2 or 3) + + + + + The device number to use + + + + + Called when we get a new buffer of recorded data + + + + + Start recording + + + + + Stop recording + + + + + Gets the current position in bytes from the wave input device. + it calls directly into waveInGetPosition) + + Position in bytes + + + + WaveFormat we are recording in + + + + + Dispose pattern + + + + + Microphone Level + + + + + Dispose method + + + + + Recording using waveIn api with event callbacks. + Use this for recording in non-gui applications + Events are raised as recorded buffers are made available + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Prepares a Wave input device for recording + + + + + Returns the number of Wave In devices available in the system + + + + + Retrieves the capabilities of a waveIn device + + Device to test + The WaveIn device capabilities + + + + Milliseconds for the buffer. Recommended value is 100ms + + + + + Number of Buffers to use (usually 2 or 3) + + + + + The device number to use + + + + + Start recording + + + + + Stop recording + + + + + Gets the current position in bytes from the wave input device. + it calls directly into waveInGetPosition) + + Position in bytes + + + + WaveFormat we are recording in + + + + + Dispose pattern + + + + + Microphone Level + + + + + Dispose method + + + + + This class writes audio data to a .aif file on disk + + + + + Creates an Aiff file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Aiff File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + AiffFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new AiffFileWriter + + The filename to write to + The Wave Format of the output data + + + + The aiff file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + WaveFormat of this aiff file + + + + + Returns false: Cannot read from a AiffFileWriter + + + + + Returns true: Can write to a AiffFileWriter + + + + + Returns false: Cannot seek within a AiffFileWriter + + + + + Read is not supported for a AiffFileWriter + + + + + Seek is not supported for a AiffFileWriter + + + + + SetLength is not supported for AiffFileWriter + + + + + + Gets the Position in the AiffFile (i.e. number of bytes written so far) + + + + + Appends bytes to the AiffFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Aiff file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Aiff file + They will be converted to the appropriate bit depth depending on the WaveFormat of the AIF file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Aiff file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this AiffFileWriter + + + + + Raised when ASIO data has been recorded. + It is important to handle this as quickly as possible as it is in the buffer callback + + + + + Initialises a new instance of AsioAudioAvailableEventArgs + + Pointers to the ASIO buffers for each channel + Pointers to the ASIO buffers for each channel + Number of samples in each buffer + Audio format within each buffer + + + + Pointer to a buffer per input channel + + + + + Pointer to a buffer per output channel + Allows you to write directly to the output buffers + If you do so, set SamplesPerBuffer = true, + and make sure all buffers are written to with valid data + + + + + Set to true if you have written to the output buffers + If so, AsioOut will not read from its source + + + + + Number of samples in each buffer + + + + + Converts all the recorded audio into a buffer of 32 bit floating point samples, interleaved by channel + + The samples as 32 bit floating point, interleaved + + + + Audio format within each buffer + Most commonly this will be one of, Int32LSB, Int16LSB, Int24LSB or Float32LSB + + + + + Gets as interleaved samples, allocating a float array + + The samples as 32 bit floating point values + + + + ASIO Out Player. New implementation using an internal C# binding. + + This implementation is only supporting Short16Bit and Float32Bit formats and is optimized + for 2 outputs channels . + SampleRate is supported only if AsioDriver is supporting it + + This implementation is probably the first AsioDriver binding fully implemented in C#! + + Original Contributor: Mark Heath + New Contributor to C# binding : Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Playback Stopped + + + + + When recording, fires whenever recorded audio is available + + + + + Initializes a new instance of the class with the first + available ASIO Driver. + + + + + Initializes a new instance of the class with the driver name. + + Name of the device. + + + + Opens an ASIO output device + + Device number (zero based) + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Dispose + + + + + Gets the names of the installed ASIO Driver. + + an array of driver names + + + + Determines whether ASIO is supported. + + + true if ASIO is supported; otherwise, false. + + + + + Inits the driver from the asio driver name. + + Name of the driver. + + + + Shows the control panel + + + + + Starts playback + + + + + Stops playback + + + + + Pauses playback + + + + + Initialises to play + + Source wave provider + + + + Initialises to play, with optional recording + + Source wave provider - set to null for record only + Number of channels to record + Specify sample rate here if only recording, ignored otherwise + + + + driver buffer update callback to fill the wave buffer. + + The input channels. + The output channels. + + + + Gets the latency (in ms) of the playback driver + + + + + Automatically stop when the end of the input stream is reached + Disable this if auto-stop is causing hanging issues + + + + + A flag to let you know that we have reached the end of the input file + Useful if AutoStop is set to false + You can monitor this yourself and call Stop when it is true + + + + + Playback State + + + + + Driver Name + + + + + The number of output channels we are currently using for playback + (Must be less than or equal to DriverOutputChannelCount) + + + + + The number of input channels we are currently recording from + (Must be less than or equal to DriverInputChannelCount) + + + + + The maximum number of input channels this ASIO driver supports + + + + + The maximum number of output channels this ASIO driver supports + + + + + The number of samples per channel, per buffer. + + + + + By default the first channel on the input WaveProvider is sent to the first ASIO output. + This option sends it to the specified channel number. + Warning: make sure you don't set it higher than the number of available output channels - + the number of source channels. + n.b. Future NAudio may modify this + + + + + Input channel offset (used when recording), allowing you to choose to record from just one + specific input rather than them all + + + + + Sets the volume (1.0 is unity gain) + Not supported for ASIO Out. Set the volume on the input stream instead + + + + + Get the input channel name + + channel index (zero based) + channel name + + + + Get the output channel name + + channel index (zero based) + channel name + + + + https://tech.ebu.ch/docs/tech/tech3285.pdf + + + + + Constructs a new BextChunkInfo + + + + + Description (max 256 chars) + + + + + Originator (max 32 chars) + + + + + Originator Reference (max 32 chars) + + + + + Originator Date Time + + + + + Origination Date as string + + + + + Origination as time + + + + + Time reference (first sample count since midnight) + + + + + version 2 has loudness stuff which we don't know so using version 1 + + + + + 64 bytes http://en.wikipedia.org/wiki/UMID + + + + + for version 2 = 180 bytes (10 before are loudness values), using version 1 = 190 bytes + + + + + Coding history arbitrary length string at end of structure + http://www.ebu.ch/CMSimages/fr/tec_text_r98-1999_tcm7-4709.pdf + A=PCM,F=48000,W=16,M=stereo,T=original,CR/LF + + + + + Broadcast WAVE File Writer + + + + + Createa a new BwfWriter + + Rarget filename + WaveFormat + Chunk information + + + + Write audio data to this BWF + + + + + Flush writer, and fix up header sizes + + + + + Disposes this writer + + + + + A wave file writer that adds cue support + + + + + Writes a wave file, including a cues chunk + + + + + Adds a cue to the Wave file + + Sample position + Label text + + + + Updates the header, and writes the cues out + + + + + NativeDirectSoundOut using DirectSound COM interop. + Contact author: Alexandre Mutel - alexandre_mutel at yahoo.fr + Modified by: Graham "Gee" Plumb + + + + + Playback Stopped + + + + + Gets the DirectSound output devices in the system + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + (40ms seems to work under Vista). + + The latency. + Selected device + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream) + + Position in bytes + + + + Gets the current position from the wave output device. + + + + + Initialise playback + + The waveprovider to be played + + + + Current playback state + + + + + + The volume 1.0 is full scale + + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Determines whether the SecondaryBuffer is lost. + + + true if [is buffer lost]; otherwise, false. + + + + + Convert ms to bytes size according to WaveFormat + + The ms + number of byttes + + + + Processes the samples in a separate thread. + + + + + Stop playback + + + + + Clean up the SecondaryBuffer + + + + In DirectSound, when playback is started, + the rest of the sound that was played last time is played back as noise. + This happens even if the secondary buffer is completely silenced, + so it seems that the buffer in the primary buffer or higher is not cleared. + + + To solve this problem fill the secondary buffer with silence data when stop playback. + + + + + + Feeds the SecondaryBuffer with the WaveStream + + number of bytes to feed + + + + IDirectSound interface + + + + + IDirectSoundBuffer interface + + + + + IDirectSoundNotify interface + + + + + Instanciate DirectSound from the DLL + + The GUID. + The direct sound. + The p unk outer. + + + + DirectSound default playback device GUID + + + + + DirectSound default capture device GUID + + + + + DirectSound default device for voice playback + + + + + DirectSound default device for voice capture + + + + + The DSEnumCallback function is an application-defined callback function that enumerates the DirectSound drivers. + The system calls this function in response to the application's call to the DirectSoundEnumerate or DirectSoundCaptureEnumerate function. + + Address of the GUID that identifies the device being enumerated, or NULL for the primary device. This value can be passed to the DirectSoundCreate8 or DirectSoundCaptureCreate8 function to create a device object for that driver. + Address of a null-terminated string that provides a textual description of the DirectSound device. + Address of a null-terminated string that specifies the module name of the DirectSound driver corresponding to this device. + Address of application-defined data. This is the pointer passed to DirectSoundEnumerate or DirectSoundCaptureEnumerate as the lpContext parameter. + Returns TRUE to continue enumerating drivers, or FALSE to stop. + + + + The DirectSoundEnumerate function enumerates the DirectSound drivers installed in the system. + + callback function + User context + + + + Gets the HANDLE of the desktop window. + + HANDLE of the Desktop window + + + + Class for enumerating DirectSound devices + + + + + The device identifier + + + + + Device description + + + + + Device module name + + + + + IWaveBuffer interface use to store wave datas. + Data can be manipulated with arrays (,, + , ) that are pointing to the same memory buffer. + This is a requirement for all subclasses. + + Use the associated Count property based on the type of buffer to get the number of data in the + buffer. + + for the standard implementation using C# unions. + + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets the byte buffer count. + + The byte buffer count. + + + + Gets the float buffer count. + + The float buffer count. + + + + Gets the short buffer count. + + The short buffer count. + + + + Gets the int buffer count. + + The int buffer count. + + + + Represents the interface to a device that can play a WaveFile + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Initialise playback + + The waveprovider to be played + + + + The volume + 1.0f is full scale + Note that not all implementations necessarily support volume changes + + + + + Current playback state + + + + + Indicates that playback has gone into a stopped state due to + reaching the end of the input stream or an error has been encountered during playback + + + + + Interface for IWavePlayers that can report position + + + + + Position (in terms of bytes played - does not necessarily translate directly to the position within the source audio file) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Generic interface for all WaveProviders. + + + + + Gets the WaveFormat of this WaveProvider. + + The wave format. + + + + Fill the specified buffer with wave data. + + The buffer to fill of wave data. + Offset into buffer + The number of bytes to read + the number of bytes written to the buffer. + + + + Like IWaveProvider, but makes it much simpler to put together a 32 bit floating + point mixing engine + + + + + Gets the WaveFormat of this Sample Provider. + + The wave format. + + + + Fill the specified buffer with 32 bit floating point samples + + The buffer to fill with samples. + Offset into buffer + The number of samples to read + the number of samples written to the buffer. + + + + Media Foundation Encoder class allows you to use Media Foundation to encode an IWaveProvider + to any supported encoding format + + + + + Queries the available bitrates for a given encoding output type, sample rate and number of channels + + Audio subtype - a value from the AudioSubtypes class + The sample rate of the PCM to encode + The number of channels of the PCM to encode + An array of available bitrates in average bits per second + + + + Gets all the available media types for a particular + + Audio subtype - a value from the AudioSubtypes class + An array of available media types that can be encoded with this subtype + + + + Helper function to simplify encoding Window Media Audio + Should be supported on Vista and above (not tested) + + Input provider, must be PCM + Output file path, should end with .wma + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Helper function to simplify encoding to MP3 + By default, will only be available on Windows 8 and above + + Input provider, must be PCM + Output file path, should end with .mp3 + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Helper function to simplify encoding to AAC + By default, will only be available on Windows 7 and above + + Input provider, must be PCM + Output file path, should end with .mp4 (or .aac on Windows 8) + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Tries to find the encoding media type with the closest bitrate to that specified + + Audio subtype, a value from AudioSubtypes + Your encoder input format (used to check sample rate and channel count) + Your desired bitrate + The closest media type, or null if none available + + + + Creates a new encoder that encodes to the specified output media type + + Desired output media type + + + + Encodes a file + + Output filename (container type is deduced from the filename) + Input provider (should be PCM, some encoders will also allow IEEE float) + + + + Disposes this instance + + + + + + Disposes this instance + + + + + Finalizer + + + + + Playback State + + + + + Stopped + + + + + Playing + + + + + Paused + + + + + Stopped Event Args + + + + + Initializes a new instance of StoppedEventArgs + + An exception to report (null if no exception) + + + + An exception. Will be null if the playback or record operation stopped due to + the user requesting stop or reached the end of the input audio + + + + + Support for playback using Wasapi + + + + + Playback Stopped + + + + + WASAPI Out shared mode, default + + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + Desired latency in milliseconds + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + true if sync is done with event. false use sleep. + Desired latency in milliseconds + + + + Creates a new WASAPI Output + + Device to use + + true if sync is done with event. false use sleep. + Desired latency in milliseconds + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Begin Playback + + + + + Stop playback and flush buffers + + + + + Stop playback without flushing buffers + + + + + Initialize for playing the specified wave stream + + IWaveProvider to play + + + + Playback State + + + + + Volume + + + + + Retrieve the AudioStreamVolume object for this audio stream + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Dispose + + + + + WaveBuffer class use to store wave datas. Data can be manipulated with arrays + (,,, ) that are pointing to the + same memory buffer. Use the associated Count property based on the type of buffer to get the number of + data in the buffer. + Implicit casting is now supported to float[], byte[], int[], short[]. + You must not use Length on returned arrays. + + n.b. FieldOffset is 8 now to allow it to work natively on 64 bit + + + + + Number of Bytes + + + + + Initializes a new instance of the class. + + The number of bytes. The size of the final buffer will be aligned on 4 Bytes (upper bound) + + + + Initializes a new instance of the class binded to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Binds this WaveBuffer instance to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets or sets the byte buffer count. + + The byte buffer count. + + + + Gets or sets the float buffer count. + + The float buffer count. + + + + Gets or sets the short buffer count. + + The short buffer count. + + + + Gets or sets the int buffer count. + + The int buffer count. + + + + Clears the associated buffer. + + + + + Copy this WaveBuffer to a destination buffer up to ByteBufferCount bytes. + + + + + Checks the validity of the count parameters. + + Name of the arg. + The value. + The size of value. + + + + This class writes WAV data to a .wav file on disk + + + + + Creates a 16 bit Wave File from an ISampleProvider + BEWARE: the source provider must not return data indefinitely + + The filename to write to + The source sample provider + + + + Creates a Wave file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + Writes to a stream by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The stream the method will output to + The source WaveProvider + + + + WaveFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new WaveFileWriter + + The filename to write to + The Wave Format of the output data + + + + The wave file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + Total time (calculated from Length and average bytes per second) + + + + + WaveFormat of this wave file + + + + + Returns false: Cannot read from a WaveFileWriter + + + + + Returns true: Can write to a WaveFileWriter + + + + + Returns false: Cannot seek within a WaveFileWriter + + + + + Read is not supported for a WaveFileWriter + + + + + Seek is not supported for a WaveFileWriter + + + + + SetLength is not supported for WaveFileWriter + + + + + + Gets the Position in the WaveFile (i.e. number of bytes written so far) + + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Wave file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Wave file + They will be converted to the appropriate bit depth depending on the WaveFormat of the WAV file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + Also updates header, so that WAV file will be valid up to the point currently written + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this WaveFileWriter + + + + + Represents a wave out device + + + + + Indicates playback has stopped automatically + + + + + Retrieves the capabilities of a waveOut device + + Device to test + The WaveOut device capabilities + + + + Returns the number of Wave Out devices available in the system + + + + + Gets or sets the desired latency in milliseconds + Should be set before a call to Init + + + + + Gets or sets the number of buffers used + Should be set before a call to Init + + + + + Gets or sets the device number + Should be set before a call to Init + This must be between -1 and DeviceCount - 1. + -1 means stick to default device even default device is changed + + + + + Creates a default WaveOut device + Will use window callbacks if called from a GUI thread, otherwise function + callbacks + + + + + Creates a WaveOut device using the specified window handle for callbacks + + A valid window handle + + + + Opens a WaveOut device + + + + + Initialises the WaveOut device + + WaveProvider to play + + + + Start playing the audio from the WaveStream + + + + + Pause the audio + + + + + Resume playing after a pause from the same position + + + + + Stop and reset the WaveOut device + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream - it calls directly into waveOutGetPosition) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Playback State + + + + + Volume for this device 1.0 is full scale + + + + + Closes this WaveOut device + + + + + Closes the WaveOut device and disposes of buffers + + True if called from Dispose + + + + Finalizer. Only called when user forgets to call Dispose + + + + + Alternative WaveOut class, making use of the Event callback + + + + + Indicates playback has stopped automatically + + + + + Gets or sets the desired latency in milliseconds + Should be set before a call to Init + + + + + Gets or sets the number of buffers used + Should be set before a call to Init + + + + + Gets or sets the device number + Should be set before a call to Init + This must be between -1 and DeviceCount - 1. + -1 means stick to default device even default device is changed + + + + + Opens a WaveOut device + + + + + Initialises the WaveOut device + + WaveProvider to play + + + + Start playing the audio from the WaveStream + + + + + Pause the audio + + + + + Resume playing after a pause from the same position + + + + + Stop and reset the WaveOut device + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream - it calls directly into waveOutGetPosition) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Playback State + + + + + Volume for this device 1.0 is full scale + + + + + Closes this WaveOut device + + + + + Closes the WaveOut device and disposes of buffers + + True if called from Dispose + + + + Finalizer. Only called when user forgets to call Dispose + + + + + Provides a buffered store of samples + Read method will return queued samples or fill buffer with zeroes + Now backed by a circular buffer + + + + + Creates a new buffered WaveProvider + + WaveFormat + + + + If true, always read the amount of data requested, padding with zeroes if necessary + By default is set to true + + + + + Buffer length in bytes + + + + + Buffer duration + + + + + If true, when the buffer is full, start throwing away data + if false, AddSamples will throw an exception when buffer is full + + + + + The number of buffered bytes + + + + + Buffered Duration + + + + + Gets the WaveFormat + + + + + Adds samples. Takes a copy of buffer, so that buffer can be reused if necessary + + + + + Reads from this WaveProvider + Will always return count bytes, since we will zero-fill the buffer if not enough available + + + + + Discards all audio from the buffer + + + + + Provide WaveProvider that can apply effects in real time using DMO. + + If the audio thread is running on the STA thread, please generate and operate from the same thread. + If the audio thread is running on the MTA thread, please operate on any MTA thread. + + Types of DMO effectors to use + Parameters of the effect to be used + + + + Create a new DmoEffectWaveProvider + + Input Stream + + + + Stream Wave Format + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Get Effector Parameters + + + + + Dispose + + + + + The Media Foundation Resampler Transform + + + + + Creates the Media Foundation Resampler, allowing modifying of sample rate, bit depth and channel count + + Source provider, must be PCM + Output format, must also be PCM + + + + Creates a resampler with a specified target output sample rate + + Source provider + Output sample rate + + + + Creates and configures the actual Resampler transform + + A newly created and configured resampler MFT + + + + Gets or sets the Resampler quality. n.b. set the quality before starting to resample. + 1 is lowest quality (linear interpolation) and 60 is best quality + + + + + Disposes this resampler + + + + + WaveProvider that can mix together multiple 32 bit floating point input provider + All channels must have the same number of inputs and same sample rate + n.b. Work in Progress - not tested yet + + + + + Creates a new MixingWaveProvider32 + + + + + Creates a new 32 bit MixingWaveProvider32 + + inputs - must all have the same format. + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove an input from the mixer + + waveProvider to remove + + + + The number of inputs to this mixer + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Converts from mono to stereo, allowing freedom to route all, some, or none of the incoming signal to left or right channels + + + + + Creates a new stereo waveprovider based on a mono input + + Mono 16 bit PCM input + + + + 1.0 to copy the mono stream to the left channel without adjusting volume + + + + + 1.0 to copy the mono stream to the right channel without adjusting volume + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels. Number of outputs is equal to total number of channels in inputs + + Input wave providers. Must all be of the same format, but can have any number of channels + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels + + Input wave providers. Must all be of the same format, but can have any number of channels + Desired number of output channels. (-1 means use total number of input channels) + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads data from this WaveProvider + + Buffer to be filled with sample data + Offset to write to within buffer, usually 0 + Number of bytes required + Number of bytes read + + + + The WaveFormat of this WaveProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Silence producing wave provider + Useful for playing silence when doing a WASAPI Loopback Capture + + + + + Creates a new silence producing wave provider + + Desired WaveFormat (should be PCM / IEE float + + + + Read silence from into the buffer + + + + + WaveFormat of this silence producing wave provider + + + + + Takes a stereo 16 bit input and turns it mono, allowing you to select left or right channel only or mix them together + + + + + Creates a new mono waveprovider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Helper class allowing us to modify the volume of a 16 bit stream without converting to IEEE float + + + + + Constructs a new VolumeWaveProvider16 + + Source provider, must be 16 bit PCM + + + + Gets or sets volume. + 1.0 is full scale, 0.0 is silence, anything over 1.0 will amplify but potentially clip + + + + + WaveFormat of this WaveProvider + + + + + Read bytes from this WaveProvider + + Buffer to read into + Offset within buffer to read to + Bytes desired + Bytes read + + + + Converts 16 bit PCM to IEEE float, optionally adjusting volume along the way + + + + + Creates a new Wave16toFloatProvider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts IEEE float to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Creates a new WaveFloatTo16Provider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Buffered WaveProvider taking source data from WaveIn + + + + + Creates a new WaveInProvider + n.b. Should make sure the WaveFormat is set correctly on IWaveIn before calling + + The source of wave data + + + + Reads data from the WaveInProvider + + + + + The WaveFormat + + + + + Base class for creating a 16 bit wave provider + + + + + Initializes a new instance of the WaveProvider16 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider16 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a short array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Base class for creating a 32 bit floating point wave provider + Can also be used as a base class for an ISampleProvider that can + be plugged straight into anything requiring an IWaveProvider + + + + + Initializes a new instance of the WaveProvider32 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider32 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a float array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Utility class to intercept audio from an IWaveProvider and + save it to disk + + + + + Constructs a new WaveRecorder + + The location to write the WAV file to + The Source Wave Provider + + + + Read simply returns what the source returns, but writes to disk along the way + + + + + The WaveFormat + + + + + Closes the WAV file + + + + A read-only stream of AIFF data based on an aiff file + with an associated WaveFormat + originally contributed to NAudio by Giawa + + + + Supports opening a AIF file + The AIF is of similar nastiness to the WAV format. + This supports basic reading of uncompressed PCM AIF files, + with 8, 16, 24 and 32 bit PCM data. + + + + + Creates an Aiff File Reader based on an input stream + + The input stream containing a AIF file including header + + + + Ensures valid AIFF header and then finds data offset. + + The stream, positioned at the start of audio data + The format found + The position of the data chunk + The length of the data chunk + Additional chunks found + + + + Cleans up the resources associated with this AiffFileReader + + + + + + + + + + + + + + + Number of Samples (if possible to calculate) + + + + + Position in the AIFF file + + + + + + Reads bytes from the AIFF File + + + + + + AIFF Chunk + + + + + Chunk Name + + + + + Chunk Length + + + + + Chunk start + + + + + Creates a new AIFF Chunk + + + + + AudioFileReader simplifies opening an audio file in NAudio + Simply pass in the filename, and it will attempt to open the + file and set up a conversion path that turns into PCM IEEE float. + ACM codecs will be used for conversion. + It provides a volume property and implements both WaveStream and + ISampleProvider, making it possibly the only stage in your audio + pipeline necessary for simple playback scenarios + + + + + Initializes a new instance of AudioFileReader + + The file to open + + + + Creates the reader stream, supporting all filetypes in the core NAudio library, + and ensuring we are in PCM format + + File Name + + + + File Name + + + + + WaveFormat of this stream + + + + + Length of this stream (in bytes) + + + + + Position of this stream (in bytes) + + + + + Reads from this wave stream + + Audio buffer + Offset into buffer + Number of bytes required + Number of bytes read + + + + Reads audio from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Gets or Sets the Volume of this AudioFileReader. 1.0f is full volume + + + + + Helper to convert source to dest bytes + + + + + Helper to convert dest to source bytes + + + + + Disposes this AudioFileReader + + True if called from Dispose + + + + Helper stream that lets us read from compressed audio files with large block alignment + as though we could read any amount and reposition anywhere + + + + + Creates a new BlockAlignReductionStream + + the input stream + + + + Block alignment of this stream + + + + + Wave Format + + + + + Length of this Stream + + + + + Current position within stream + + + + + Disposes this WaveStream + + + + + Reads data from this stream + + + + + + + + + Implementation of Com IStream + + + + + Holds information on a cue: a labeled position within a Wave file + + + + + Cue position in samples + + + + + Label of the cue + + + + + Creates a Cue based on a sample position and label + + + + + + + Holds a list of cues + + + The specs for reading and writing cues from the cue and list RIFF chunks + are from http://www.sonicspot.com/guide/wavefiles.html and http://www.wotsit.org/ + ------------------------------ + The cues are stored like this: + ------------------------------ + struct CuePoint + { + Int32 dwIdentifier; + Int32 dwPosition; + Int32 fccChunk; + Int32 dwChunkStart; + Int32 dwBlockStart; + Int32 dwSampleOffset; + } + + struct CueChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwCuePoints; + CuePoint[] points; + } + ------------------------------ + Labels look like this: + ------------------------------ + struct ListHeader + { + Int32 listID; /* 'list' */ + Int32 chunkSize; /* includes the Type ID below */ + Int32 typeID; /* 'adtl' */ + } + + struct LabelChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwIdentifier; + Char[] dwText; /* Encoded with extended ASCII */ + } LabelChunk; + + + + + Creates an empty cue list + + + + + Adds an item to the list + + Cue + + + + Gets sample positions for the embedded cues + + Array containing the cue positions + + + + Gets labels for the embedded cues + + Array containing the labels + + + + Creates a cue list from the cue RIFF chunk and the list RIFF chunk + + The data contained in the cue chunk + The data contained in the list chunk + + + + Gets the cues as the concatenated cue and list RIFF chunks. + + RIFF chunks containing the cue data + + + + Number of cues + + + + + Accesses the cue at the specified index + + + + + + + Checks if the cue and list chunks exist and if so, creates a cue list + + + + + A wave file reader supporting cue reading + + + + + Loads a wavefile and supports reading cues + + + + + + Loads a wave from a stream and supports reading cues + + + + + + Cue List (can be null if cues not present) + + + + + An interface for WaveStreams which can report notification of individual samples + + + + + A sample has been detected + + + + + Sample event arguments + + + + + Left sample + + + + + Right sample + + + + + Constructor + + + + + Class for reading any file that Media Foundation can play + Will only work in Windows Vista and above + Automatically converts to PCM + If it is a video file with multiple audio streams, it will pick out the first audio stream + + + + + Allows customisation of this reader class + + + + + Sets up the default settings for MediaFoundationReader + + + + + Allows us to request IEEE float output (n.b. no guarantee this will be accepted) + + + + + If true, the reader object created in the constructor is used in Read + Should only be set to true if you are working entirely on an STA thread, or + entirely with MTA threads. + + + + + If true, the reposition does not happen immediately, but waits until the + next call to read to be processed. + + + + + Default constructor + + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename (can also be a URL e.g. http:// mms:// file://) + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename + Advanced settings + + + + Initializes + + + + + Creates the reader (overridable by ) + + + + + Reads from this wave stream + + Buffer to read into + Offset in buffer + Bytes required + Number of bytes read; 0 indicates end of stream + + + + WaveFormat of this stream (n.b. this is after converting to PCM) + + + + + The bytesRequired of this stream in bytes (n.b may not be accurate) + + + + + Current position within this stream + + + + + Cleans up after finishing with this reader + + true if called from Dispose + + + + WaveFormat has changed + + + + + Class for reading from MP3 files + + + + + The MP3 wave format (n.b. NOT the output format of this stream - see the WaveFormat property) + + + + Supports opening a MP3 file + + + Supports opening a MP3 file + MP3 File name + Factory method to build a frame decompressor + + + + Opens MP3 from a stream rather than a file + Will not dispose of this stream itself + + The incoming stream containing MP3 data + + + + Opens MP3 from a stream rather than a file + Will not dispose of this stream itself + + The incoming stream containing MP3 data + Factory method to build a frame decompressor + + + + Function that can create an MP3 Frame decompressor + + A WaveFormat object describing the MP3 file format + An MP3 Frame decompressor + + + + Creates an ACM MP3 Frame decompressor. This is the default with NAudio + + A WaveFormat object based + + + + + Gets the total length of this file in milliseconds. + + + + + ID3v2 tag if present + + + + + ID3v1 tag if present + + + + + Reads the next mp3 frame + + Next mp3 frame, or null if EOF + + + + Reads the next mp3 frame + + Next mp3 frame, or null if EOF + + + + This is the length in bytes of data available to be read out from the Read method + (i.e. the decompressed MP3 length) + n.b. this may return 0 for files whose length is unknown + + + + + + + + + + + + + + + Reads decompressed PCM data from our MP3 file. + + + + + Xing header if present + + + + + Disposes this WaveStream + + + + + WaveStream that simply passes on data from its source stream + (e.g. a MemoryStream) + + + + + Initialises a new instance of RawSourceWaveStream + + The source stream containing raw audio + The waveformat of the audio in the source stream + + + + Initialises a new instance of RawSourceWaveStream + + The buffer containing raw audio + Offset in the source buffer to read from + Number of bytes to read in the buffer + The waveformat of the audio in the source stream + + + + The WaveFormat of this stream + + + + + The length in bytes of this stream (if supported) + + + + + The current position in this stream + + + + + Reads data from the stream + + + + + Wave Stream for converting between sample rates + + + + + WaveStream to resample using the DMO Resampler + + Input Stream + Desired Output Format + + + + Stream Wave Format + + + + + Stream length in bytes + + + + + Stream position in bytes + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Dispose + + True if disposing (not from finalizer) + + + + Holds information about a RIFF file chunk + + + + + Creates a RiffChunk object + + + + + The chunk identifier + + + + + The chunk identifier converted to a string + + + + + The chunk length + + + + + The stream position this chunk is located at + + + + + A simple compressor + + + + + Create a new simple compressor stream + + Source stream + + + + Make-up Gain + + + + + Threshold + + + + + Ratio + + + + + Attack time + + + + + Release time + + + + + Turns gain on or off + + + + + Gets the WaveFormat of this stream + + + + + Reads bytes from this stream + + Buffer to read into + Offset in array to read into + Number of bytes to read + Number of bytes read + + + + MediaFoundationReader supporting reading from a stream + + + + + Constructs a new media foundation reader from a stream + + + + + Creates the reader + + + + + WaveStream that converts 32 bit audio back down to 16 bit, clipping if necessary + + + + + The method reuses the same buffer to prevent + unnecessary allocations. + + + + + Creates a new Wave32To16Stream + + the source stream + + + + Sets the volume for this stream. 1.0f is full scale + + + + + + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + Destination buffer + Offset into destination buffer + + Number of bytes read. + + + + Conversion to 16 bit and clipping + + + + + + + + + + Clip indicator. Can be reset. + + + + + Disposes this WaveStream + + + + + Represents Channel for the WaveMixerStream + 32 bit output and 16 bit input + It's output is always stereo + The input stream can be panned + + + + + Creates a new WaveChannel32 + + the source stream + stream volume (1 is 0dB) + pan control (-1 to 1) + + + + Creates a WaveChannel32 with default settings + + The source stream + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + If true, Read always returns the number of bytes requested + + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Pan of this channel (from -1 to 1) + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + Sample + + + + + Raise the sample event (no check for null because it has already been done) + + + + This class supports the reading of WAV files, + providing a repositionable WaveStream that returns the raw data + contained in the WAV file + + + + Supports opening a WAV file + The WAV file format is a real mess, but we will only + support the basic WAV file format which actually covers the vast + majority of WAV files out there. For more WAV file format information + visit www.wotsit.org. If you have a WAV file that can't be read by + this class, email it to the NAudio project and we will probably + fix this reader to support it + + + + + Creates a Wave File Reader based on an input stream + + The input stream containing a WAV file including header + + + + Gets a list of the additional chunks found in this file + + + + + Gets the data for the specified chunk + + + + + Cleans up the resources associated with this WaveFileReader + + + + + + + + + + This is the length of audio data contained in this WAV file, in bytes + (i.e. the byte length of the data chunk, not the length of the WAV file itself) + + + + + + Number of Sample Frames (if possible to calculate) + This currently does not take into account number of channels + Multiply number of channels if you want the total number of samples + + + + + Position in the WAV data chunk. + + + + + + Reads bytes from the Wave File + + + + + + Attempts to read the next sample or group of samples as floating point normalised into the range -1.0f to 1.0f + + An array of samples, 1 for mono, 2 for stereo etc. Null indicates end of file reached + + + + + Attempts to read a sample into a float. n.b. only applicable for uncompressed formats + Will normalise the value read into the range -1.0f to 1.0f if it comes from a PCM encoding + + False if the end of the WAV data chunk was reached + + + + IWaveProvider that passes through an ACM Codec + + + + + Create a new WaveFormat conversion stream + + Desired output format + Source Provider + + + + Gets the WaveFormat of this stream + + + + + Indicates that a reposition has taken place, and internal buffers should be reset + + + + + Reads bytes from this stream + + Buffer to read into + Offset in buffer to read into + Number of bytes to read + Number of bytes read + + + + Disposes this stream + + true if the user called this + + + + Disposes this resource + + + + + Finalizer + + + + + WaveStream that passes through an ACM Codec + + + + + Create a new WaveFormat conversion stream + + Desired output format + Source stream + + + + Creates a stream that can convert to PCM + + The source stream + A PCM stream + + + + Gets or sets the current position in the stream + + + + + Converts source bytes to destination bytes + + + + + Converts destination bytes to source bytes + + + + + Returns the stream length + + + + + Gets the WaveFormat of this stream + + + + + + + Buffer to read into + Offset within buffer to write to + Number of bytes to read + Bytes read + + + + Disposes this stream + + true if the user called this + + + + A buffer of Wave samples + + + + + creates a new wavebuffer + + WaveIn device to write to + Buffer size in bytes + + + + Place this buffer back to record more audio + + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + + Provides access to the actual record buffer (for reading only) + + + + + Indicates whether the Done flag is set on this buffer + + + + + Indicates whether the InQueue flag is set on this buffer + + + + + Number of bytes recorded + + + + + The buffer size in bytes + + + + + WaveStream that can mix together multiple 32 bit input streams + (Normally used with stereo input channels) + All channels must have the same number of inputs + + + + + Creates a new 32 bit WaveMixerStream + + + + + Creates a new 32 bit WaveMixerStream + + An Array of WaveStreams - must all have the same format. + Use WaveChannel is designed for this purpose. + Automatically stop when all inputs have been read + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove a WaveStream from the mixer + + waveStream to remove + + + + The number of inputs to this mixer + + + + + Automatically stop when all inputs have been read + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Length of this Wave Stream (in bytes) + + + + + + Position within this Wave Stream (in bytes) + + + + + + + + + + + Disposes this WaveStream + + + + + Simply shifts the input stream in time, optionally + clipping its start and end. + (n.b. may include looping in the future) + + + + + Creates a new WaveOffsetStream + + the source stream + the time at which we should start reading from the source stream + amount to trim off the front of the source stream + length of time to play from source stream + + + + Creates a WaveOffsetStream with default settings (no offset or pre-delay, + and whole length of source stream) + + The source stream + + + + The length of time before which no audio will be played + + + + + An offset into the source stream from which to start playing + + + + + Length of time to read from the source stream + + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + A buffer of Wave samples for streaming to a Wave Output device + + + + + creates a new wavebuffer + + WaveOut device to write to + Buffer size in bytes + Stream to provide more data + Lock to protect WaveOut API's from being called on >1 thread + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + this is called by the WAVE callback and should be used to refill the buffer + + + + Whether the header's in queue flag is set + + + + + The buffer size in bytes + + + + + Base class for all WaveStream classes. Derives from stream. + + + + + Retrieves the WaveFormat for this stream + + + + + We can read from this stream + + + + + We can seek within this stream + + + + + We can't write to this stream + + + + + Flush does not need to do anything + See + + + + + An alternative way of repositioning. + See + + + + + Sets the length of the WaveStream. Not Supported. + + + + + + Writes to the WaveStream. Not Supported. + + + + + The block alignment for this wavestream. Do not modify the Position + to anything that is not a whole multiple of this value + + + + + Moves forward or backwards the specified number of seconds in the stream + + Number of seconds to move, can be negative + + + + The current position in the stream in Time format + + + + + Total length in real-time of the stream (may be an estimate for compressed files) + + + + + Whether the WaveStream has non-zero sample data at the current position for the + specified count + + Number of bytes to read + + + + MP3 Frame decompressor using the Windows Media MP3 Decoder DMO object + + + + + Initializes a new instance of the DMO MP3 Frame decompressor + + + + + + Converted PCM WaveFormat + + + + + Decompress a single frame of MP3 + + + + + Alerts us that a reposition has occured so the MP3 decoder needs to reset its state + + + + + Dispose of this obejct and clean up resources + + + + + http://tech.ebu.ch/docs/tech/tech3306-2009.pdf + + + + + WaveFormat + + + + + Data Chunk Position + + + + + Data Chunk Length + + + + + Riff Chunks + + + + + Soundfont generator + + + + + Gets the generator type + + + + + Generator amount as an unsigned short + + + + + Generator amount as a signed short + + + + + Low byte amount + + + + + High byte amount + + + + + Instrument + + + + + Sample Header + + + + + + + + + + Generator types + + + + Start address offset + + + End address offset + + + Start loop address offset + + + End loop address offset + + + Start address coarse offset + + + Modulation LFO to pitch + + + Vibrato LFO to pitch + + + Modulation envelope to pitch + + + Initial filter cutoff frequency + + + Initial filter Q + + + Modulation LFO to filter Cutoff frequency + + + Modulation envelope to filter cutoff frequency + + + End address coarse offset + + + Modulation LFO to volume + + + Unused + + + Chorus effects send + + + Reverb effects send + + + Pan + + + Unused + + + Unused + + + Unused + + + Delay modulation LFO + + + Frequency modulation LFO + + + Delay vibrato LFO + + + Frequency vibrato LFO + + + Delay modulation envelope + + + Attack modulation envelope + + + Hold modulation envelope + + + Decay modulation envelope + + + Sustain modulation envelop + + + Release modulation envelope + + + Key number to modulation envelope hold + + + Key number to modulation envelope decay + + + Delay volume envelope + + + Attack volume envelope + + + Hold volume envelope + + + Decay volume envelope + + + Sustain volume envelope + + + Release volume envelope + + + Key number to volume envelope hold + + + Key number to volume envelope decay + + + Instrument + + + Reserved + + + Key range + + + Velocity range + + + Start loop address coarse offset + + + Key number + + + Velocity + + + Initial attenuation + + + Reserved + + + End loop address coarse offset + + + Coarse tune + + + Fine tune + + + Sample ID + + + Sample modes + + + Reserved + + + Scale tuning + + + Exclusive class + + + Overriding root key + + + Unused + + + Unused + + + + A soundfont info chunk + + + + + SoundFont Version + + + + + WaveTable sound engine + + + + + Bank name + + + + + Data ROM + + + + + Creation Date + + + + + Author + + + + + Target Product + + + + + Copyright + + + + + Comments + + + + + Tools + + + + + ROM Version + + + + + + + + + + SoundFont instrument + + + + + instrument name + + + + + Zones + + + + + + + + + + Instrument Builder + + + + + Transform Types + + + + + Linear + + + + + Modulator + + + + + Source Modulation data type + + + + + Destination generator type + + + + + Amount + + + + + Source Modulation Amount Type + + + + + Source Transform Type + + + + + + + + + + Controller Sources + + + + + No Controller + + + + + Note On Velocity + + + + + Note On Key Number + + + + + Poly Pressure + + + + + Channel Pressure + + + + + Pitch Wheel + + + + + Pitch Wheel Sensitivity + + + + + Source Types + + + + + Linear + + + + + Concave + + + + + Convex + + + + + Switch + + + + + Modulator Type + + + + + + + + + + + A SoundFont Preset + + + + + Preset name + + + + + Patch Number + + + + + Bank number + 0 - 127, GM percussion bank is 128 + + + + + Zones + + + + + + + + + + Class to read the SoundFont file presets chunk + + + + + The Presets contained in this chunk + + + + + The instruments contained in this chunk + + + + + The sample headers contained in this chunk + + + + + + + + + + just reads a chunk ID at the current position + + chunk ID + + + + reads a chunk at the current position + + + + + creates a new riffchunk from current position checking that we're not + at the end of this chunk first + + the new chunk + + + + useful for chunks that just contain a string + + chunk as string + + + + A SoundFont Sample Header + + + + + The sample name + + + + + Start offset + + + + + End offset + + + + + Start loop point + + + + + End loop point + + + + + Sample Rate + + + + + Original pitch + + + + + Pitch correction + + + + + Sample Link + + + + + SoundFont Sample Link Type + + + + + + + + + + SoundFont sample modes + + + + + No loop + + + + + Loop Continuously + + + + + Reserved no loop + + + + + Loop and continue + + + + + Sample Link Type + + + + + Mono Sample + + + + + Right Sample + + + + + Left Sample + + + + + Linked Sample + + + + + ROM Mono Sample + + + + + ROM Right Sample + + + + + ROM Left Sample + + + + + ROM Linked Sample + + + + + SoundFont Version Structure + + + + + Major Version + + + + + Minor Version + + + + + Builds a SoundFont version + + + + + Reads a SoundFont Version structure + + + + + Writes a SoundFont Version structure + + + + + Gets the length of this structure + + + + + Represents a SoundFont + + + + + Loads a SoundFont from a file + + Filename of the SoundFont + + + + Loads a SoundFont from a stream + + stream + + + + The File Info Chunk + + + + + The Presets + + + + + The Instruments + + + + + The Sample Headers + + + + + The Sample Data + + + + + + + + + + base class for structures that can read themselves + + + + + A SoundFont zone + + + + + + + + + + Modulators for this Zone + + + + + Generators for this Zone + + + + + Summary description for Fader. + + + + + Required designer variable. + + + + + Creates a new Fader control + + + + + Clean up any resources being used. + + + + + + + + + + + + + + + + + + + + + + + + + Minimum value of this fader + + + + + Maximum value of this fader + + + + + Current value of this fader + + + + + Fader orientation + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Pan slider control + + + + + Required designer variable. + + + + + True when pan value changed + + + + + Creates a new PanSlider control + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + + The current Pan setting + + + + + Control that represents a potentiometer + TODO list: + Optional Log scale + Optional reverse scale + Keyboard control + Optional bitmap mode + Optional complete draw mode + Tooltip support + + + + + Value changed event + + + + + Creates a new pot control + + + + + Minimum Value of the Pot + + + + + Maximum Value of the Pot + + + + + The current value of the pot + + + + + Draws the control + + + + + Handles the mouse down event to allow changing value by dragging + + + + + Handles the mouse up event to allow changing value by dragging + + + + + Handles the mouse down event to allow changing value by dragging + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Implements a rudimentary volume meter + + + + + Basic volume meter + + + + + On Fore Color Changed + + + + + Current Value + + + + + Minimum decibels + + + + + Maximum decibels + + + + + Meter orientation + + + + + Paints the volume meter + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + VolumeSlider control + + + + + Required designer variable. + + + + + Volume changed event + + + + + Creates a new VolumeSlider control + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + The volume for this control + + + + + Windows Forms control for painting audio waveforms + + + + + Constructs a new instance of the WaveFormPainter class + + + + + On Resize + + + + + On ForeColor Changed + + + + + + Add Max Value + + + + + + On Paint + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Control for viewing waveforms + + + + + Required designer variable. + + + + + Creates a new WaveViewer control + + + + + sets the associated wavestream + + + + + The zoom level, in samples per pixel + + + + + Start position (currently in bytes) + + + + + Clean up any resources being used. + + + + + + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Audio Subtype GUIDs + http://msdn.microsoft.com/en-us/library/windows/desktop/aa372553%28v=vs.85%29.aspx + + + + + Advanced Audio Coding (AAC). + + + + + Not used + + + + + Dolby AC-3 audio over Sony/Philips Digital Interface (S/PDIF). + + + + + Encrypted audio data used with secure audio path. + + + + + Digital Theater Systems (DTS) audio. + + + + + Uncompressed IEEE floating-point audio. + + + + + MPEG Audio Layer-3 (MP3). + + + + + MPEG-1 audio payload. + + + + + Windows Media Audio 9 Voice codec. + + + + + Uncompressed PCM audio. + + + + + Windows Media Audio 9 Professional codec over S/PDIF. + + + + + Windows Media Audio 9 Lossless codec or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 8 codec, Windows Media Audio 9 codec, or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 9 Professional codec or Windows Media Audio 9.1 Professional codec. + + + + + Dolby Digital (AC-3). + + + + + MPEG-4 and AAC Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + μ-law coding + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Adaptive delta pulse code modulation (ADPCM) + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Dolby Digital Plus formatted for HDMI output. + http://msdn.microsoft.com/en-us/library/windows/hardware/ff538392(v=vs.85).aspx + Reference : internet + + + + + MSAudio1 - unknown meaning + Reference : wmcodecdsp.h + + + + + IMA ADPCM ACM Wrapper + + + + + WMSP2 - unknown meaning + Reference: wmsdkidl.h + + + + + IMFActivate, defined in mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Creates the object associated with this activation object. + + + + + Shuts down the created object. + + + + + Detaches the created object from the activation object. + + + + + Provides a generic way to store key/value pairs on an object. + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms704598%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + IMFByteStream + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms698720%28v=vs.85%29.aspx + + + + + Retrieves the characteristics of the byte stream. + virtual HRESULT STDMETHODCALLTYPE GetCapabilities(/*[out]*/ __RPC__out DWORD *pdwCapabilities) = 0; + + + + + Retrieves the length of the stream. + virtual HRESULT STDMETHODCALLTYPE GetLength(/*[out]*/ __RPC__out QWORD *pqwLength) = 0; + + + + + Sets the length of the stream. + virtual HRESULT STDMETHODCALLTYPE SetLength(/*[in]*/ QWORD qwLength) = 0; + + + + + Retrieves the current read or write position in the stream. + virtual HRESULT STDMETHODCALLTYPE GetCurrentPosition(/*[out]*/ __RPC__out QWORD *pqwPosition) = 0; + + + + + Sets the current read or write position. + virtual HRESULT STDMETHODCALLTYPE SetCurrentPosition(/*[in]*/ QWORD qwPosition) = 0; + + + + + Queries whether the current position has reached the end of the stream. + virtual HRESULT STDMETHODCALLTYPE IsEndOfStream(/*[out]*/ __RPC__out BOOL *pfEndOfStream) = 0; + + + + + Reads data from the stream. + virtual HRESULT STDMETHODCALLTYPE Read(/*[size_is][out]*/ __RPC__out_ecount_full(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbRead) = 0; + + + + + Begins an asynchronous read operation from the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginRead(/*[out]*/ _Out_writes_bytes_(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous read operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndRead(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbRead) = 0; + + + + + Writes data to the stream. + virtual HRESULT STDMETHODCALLTYPE Write(/*[size_is][in]*/ __RPC__in_ecount_full(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbWritten) = 0; + + + + + Begins an asynchronous write operation to the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginWrite(/*[in]*/ _In_reads_bytes_(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous write operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndWrite(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbWritten) = 0; + + + + + Moves the current position in the stream by a specified offset. + virtual HRESULT STDMETHODCALLTYPE Seek(/*[in]*/ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, /*[in]*/ LONGLONG llSeekOffset, /*[in]*/ DWORD dwSeekFlags, /*[out]*/ __RPC__out QWORD *pqwCurrentPosition) = 0; + + + + + Clears any internal buffers used by the stream. + virtual HRESULT STDMETHODCALLTYPE Flush( void) = 0; + + + + + Closes the stream and releases any resources associated with the stream. + virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; + + + + + Represents a generic collection of IUnknown pointers. + + + + + Retrieves the number of objects in the collection. + + + + + Retrieves an object in the collection. + + + + + Adds an object to the collection. + + + + + Removes an object from the collection. + + + + + Removes an object from the collection. + + + + + Removes all items from the collection. + + + + + IMFMediaBuffer + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms696261%28v=vs.85%29.aspx + + + + + Gives the caller access to the memory in the buffer. + + + + + Unlocks a buffer that was previously locked. + + + + + Retrieves the length of the valid data in the buffer. + + + + + Sets the length of the valid data in the buffer. + + + + + Retrieves the allocated size of the buffer. + + + + + IMFMediaEvent - Represents an event generated by a Media Foundation object. Use this interface to get information about the event. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms702249%28v=vs.85%29.aspx + Mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the event type. + + + virtual HRESULT STDMETHODCALLTYPE GetType( + /* [out] */ __RPC__out MediaEventType *pmet) = 0; + + + + + Retrieves the extended type of the event. + + + virtual HRESULT STDMETHODCALLTYPE GetExtendedType( + /* [out] */ __RPC__out GUID *pguidExtendedType) = 0; + + + + + Retrieves an HRESULT that specifies the event status. + + + virtual HRESULT STDMETHODCALLTYPE GetStatus( + /* [out] */ __RPC__out HRESULT *phrStatus) = 0; + + + + + Retrieves the value associated with the event, if any. + + + virtual HRESULT STDMETHODCALLTYPE GetValue( + /* [out] */ __RPC__out PROPVARIANT *pvValue) = 0; + + + + + Represents a description of a media format. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms704850%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the major type of the format. + + + + + Queries whether the media type is a compressed format. + + + + + Compares two media types and determines whether they are identical. + + + + + Retrieves an alternative representation of the media type. + + + + + Frees memory that was allocated by the GetRepresentation method. + + + + + Creates an instance of either the sink writer or the source reader. + + + + + Creates an instance of the sink writer or source reader, given a URL. + + + + + Creates an instance of the sink writer or source reader, given an IUnknown pointer. + + + + + CLSID_MFReadWriteClassFactory + + + + + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms702192%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves flags associated with the sample. + + + + + Sets flags associated with the sample. + + + + + Retrieves the presentation time of the sample. + + + + + Sets the presentation time of the sample. + + + + + Retrieves the duration of the sample. + + + + + Sets the duration of the sample. + + + + + Retrieves the number of buffers in the sample. + + + + + Retrieves a buffer from the sample. + + + + + Converts a sample with multiple buffers into a sample with a single buffer. + + + + + Adds a buffer to the end of the list of buffers in the sample. + + + + + Removes a buffer at a specified index from the sample. + + + + + Removes all buffers from the sample. + + + + + Retrieves the total length of the valid data in all of the buffers in the sample. + + + + + Copies the sample data to a buffer. + + + + + Implemented by the Microsoft Media Foundation sink writer object. + + + + + Adds a stream to the sink writer. + + + + + Sets the input format for a stream on the sink writer. + + + + + Initializes the sink writer for writing. + + + + + Delivers a sample to the sink writer. + + + + + Indicates a gap in an input stream. + + + + + Places a marker in the specified stream. + + + + + Notifies the media sink that a stream has reached the end of a segment. + + + + + Flushes one or more streams. + + + + + (Finalize) Completes all writing operations on the sink writer. + + + + + Queries the underlying media sink or encoder for an interface. + + + + + Gets statistics about the performance of the sink writer. + + + + + IMFSourceReader interface + http://msdn.microsoft.com/en-us/library/windows/desktop/dd374655%28v=vs.85%29.aspx + + + + + Queries whether a stream is selected. + + + + + Selects or deselects one or more streams. + + + + + Gets a format that is supported natively by the media source. + + + + + Gets the current media type for a stream. + + + + + Sets the media type for a stream. + + + + + Seeks to a new position in the media source. + + + + + Reads the next sample from the media source. + + + + + Flushes one or more streams. + + + + + Queries the underlying media source or decoder for an interface. + + + + + Gets an attribute from the underlying media source. + + + + + Contains flags that indicate the status of the IMFSourceReader::ReadSample method + http://msdn.microsoft.com/en-us/library/windows/desktop/dd375773(v=vs.85).aspx + + + + + No Error + + + + + An error occurred. If you receive this flag, do not make any further calls to IMFSourceReader methods. + + + + + The source reader reached the end of the stream. + + + + + One or more new streams were created + + + + + The native format has changed for one or more streams. The native format is the format delivered by the media source before any decoders are inserted. + + + + + The current media has type changed for one or more streams. To get the current media type, call the IMFSourceReader::GetCurrentMediaType method. + + + + + There is a gap in the stream. This flag corresponds to an MEStreamTick event from the media source. + + + + + All transforms inserted by the application have been removed for a particular stream. + + + + + IMFTransform, defined in mftransform.h + + + + + Retrieves the minimum and maximum number of input and output streams. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamLimits( + /* [out] */ __RPC__out DWORD *pdwInputMinimum, + /* [out] */ __RPC__out DWORD *pdwInputMaximum, + /* [out] */ __RPC__out DWORD *pdwOutputMinimum, + /* [out] */ __RPC__out DWORD *pdwOutputMaximum) = 0; + + + + + Retrieves the current number of input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamCount( + /* [out] */ __RPC__out DWORD *pcInputStreams, + /* [out] */ __RPC__out DWORD *pcOutputStreams) = 0; + + + + + Retrieves the stream identifiers for the input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamIDs( + DWORD dwInputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwInputIDArraySize) DWORD *pdwInputIDs, + DWORD dwOutputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwOutputIDArraySize) DWORD *pdwOutputIDs) = 0; + + + + + Gets the buffer requirements and other information for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamInfo( + DWORD dwInputStreamID, + /* [out] */ __RPC__out MFT_INPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the buffer requirements and other information for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamInfo( + DWORD dwOutputStreamID, + /* [out] */ __RPC__out MFT_OUTPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the global attribute store for this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetAttributes( + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an input stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamAttributes( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamAttributes( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Removes an input stream from this MFT. + + + virtual HRESULT STDMETHODCALLTYPE DeleteInputStream( + DWORD dwStreamID) = 0; + + + + + Adds one or more new input streams to this MFT. + + + virtual HRESULT STDMETHODCALLTYPE AddInputStreams( + DWORD cStreams, + /* [in] */ __RPC__in DWORD *adwStreamIDs) = 0; + + + + + Gets an available media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputAvailableType( + DWORD dwInputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Retrieves an available media type for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputAvailableType( + DWORD dwOutputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Sets, tests, or clears the media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetInputType( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Sets, tests, or clears the media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetOutputType( + DWORD dwOutputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Gets the current media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputCurrentType( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Gets the current media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputCurrentType( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Queries whether an input stream on this Media Foundation transform (MFT) can accept more data. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStatus( + DWORD dwInputStreamID, + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Queries whether the Media Foundation transform (MFT) is ready to produce output data. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStatus( + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Sets the range of time stamps the client needs for output. + + + virtual HRESULT STDMETHODCALLTYPE SetOutputBounds( + LONGLONG hnsLowerBound, + LONGLONG hnsUpperBound) = 0; + + + + + Sends an event to an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessEvent( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaEvent *pEvent) = 0; + + + + + Sends a message to the Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessMessage( + MFT_MESSAGE_TYPE eMessage, + ULONG_PTR ulParam) = 0; + + + + + Delivers data to an input stream on this Media Foundation transform (MFT). + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessInput( + DWORD dwInputStreamID, + IMFSample *pSample, + DWORD dwFlags) = 0; + + + + + Generates output from the current input data. + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessOutput( + DWORD dwFlags, + DWORD cOutputBufferCount, + /* [size_is][out][in] */ MFT_OUTPUT_DATA_BUFFER *pOutputSamples, + /* [out] */ DWORD *pdwStatus) = 0; + + + + + See mfobjects.h + + + + + Unknown event type. + + + + + Signals a serious error. + + + + + Custom event type. + + + + + A non-fatal error occurred during streaming. + + + + + Session Unknown + + + + + Raised after the IMFMediaSession::SetTopology method completes asynchronously + + + + + Raised by the Media Session when the IMFMediaSession::ClearTopologies method completes asynchronously. + + + + + Raised when the IMFMediaSession::Start method completes asynchronously. + + + + + Raised when the IMFMediaSession::Pause method completes asynchronously. + + + + + Raised when the IMFMediaSession::Stop method completes asynchronously. + + + + + Raised when the IMFMediaSession::Close method completes asynchronously. + + + + + Raised by the Media Session when it has finished playing the last presentation in the playback queue. + + + + + Raised by the Media Session when the playback rate changes. + + + + + Raised by the Media Session when it completes a scrubbing request. + + + + + Raised by the Media Session when the session capabilities change. + + + + + Raised by the Media Session when the status of a topology changes. + + + + + Raised by the Media Session when a new presentation starts. + + + + + Raised by a media source a new presentation is ready. + + + + + License acquisition is about to begin. + + + + + License acquisition is complete. + + + + + Individualization is about to begin. + + + + + Individualization is complete. + + + + + Signals the progress of a content enabler object. + + + + + A content enabler object's action is complete. + + + + + Raised by a trusted output if an error occurs while enforcing the output policy. + + + + + Contains status information about the enforcement of an output policy. + + + + + A media source started to buffer data. + + + + + A media source stopped buffering data. + + + + + The network source started opening a URL. + + + + + The network source finished opening a URL. + + + + + Raised by a media source at the start of a reconnection attempt. + + + + + Raised by a media source at the end of a reconnection attempt. + + + + + Raised by the enhanced video renderer (EVR) when it receives a user event from the presenter. + + + + + Raised by the Media Session when the format changes on a media sink. + + + + + Source Unknown + + + + + Raised when a media source starts without seeking. + + + + + Raised by a media stream when the source starts without seeking. + + + + + Raised when a media source seeks to a new position. + + + + + Raised by a media stream after a call to IMFMediaSource::Start causes a seek in the stream. + + + + + Raised by a media source when it starts a new stream. + + + + + Raised by a media source when it restarts or seeks a stream that is already active. + + + + + Raised by a media source when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media source when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media source when a presentation ends. + + + + + Raised by a media stream when the stream ends. + + + + + Raised when a media stream delivers a new sample. + + + + + Signals that a media stream does not have data available at a specified time. + + + + + Raised by a media stream when it starts or stops thinning the stream. + + + + + Raised by a media stream when the media type of the stream changes. + + + + + Raised by a media source when the playback rate changes. + + + + + Raised by the sequencer source when a segment is completed and is followed by another segment. + + + + + Raised by a media source when the source's characteristics change. + + + + + Raised by a media source to request a new playback rate. + + + + + Raised by a media source when it updates its metadata. + + + + + Raised by the sequencer source when the IMFSequencerSource::UpdateTopology method completes asynchronously. + + + + + Sink Unknown + + + + + Raised by a stream sink when it completes the transition to the running state. + + + + + Raised by a stream sink when it completes the transition to the stopped state. + + + + + Raised by a stream sink when it completes the transition to the paused state. + + + + + Raised by a stream sink when the rate has changed. + + + + + Raised by a stream sink to request a new media sample from the pipeline. + + + + + Raised by a stream sink after the IMFStreamSink::PlaceMarker method is called. + + + + + Raised by a stream sink when the stream has received enough preroll data to begin rendering. + + + + + Raised by a stream sink when it completes a scrubbing request. + + + + + Raised by a stream sink when the sink's media type is no longer valid. + + + + + Raised by the stream sinks of the EVR if the video device changes. + + + + + Provides feedback about playback quality to the quality manager. + + + + + Raised when a media sink becomes invalid. + + + + + The audio session display name changed. + + + + + The volume or mute state of the audio session changed + + + + + The audio device was removed. + + + + + The Windows audio server system was shut down. + + + + + The grouping parameters changed for the audio session. + + + + + The audio session icon changed. + + + + + The default audio format for the audio device changed. + + + + + The audio session was disconnected from a Windows Terminal Services session + + + + + The audio session was preempted by an exclusive-mode connection. + + + + + Trust Unknown + + + + + The output policy for a stream changed. + + + + + Content protection message + + + + + The IMFOutputTrustAuthority::SetPolicy method completed. + + + + + DRM License Backup Completed + + + + + DRM License Backup Progress + + + + + DRM License Restore Completed + + + + + DRM License Restore Progress + + + + + DRM License Acquisition Completed + + + + + DRM Individualization Completed + + + + + DRM Individualization Progress + + + + + DRM Proximity Completed + + + + + DRM License Store Cleaned + + + + + DRM Revocation Download Completed + + + + + Transform Unknown + + + + + Sent by an asynchronous MFT to request a new input sample. + + + + + Sent by an asynchronous MFT when new output data is available from the MFT. + + + + + Sent by an asynchronous Media Foundation transform (MFT) when a drain operation is complete. + + + + + Sent by an asynchronous MFT in response to an MFT_MESSAGE_COMMAND_MARKER message. + + + + + Media Foundation attribute guids + http://msdn.microsoft.com/en-us/library/windows/desktop/ms696989%28v=vs.85%29.aspx + + + + + Specifies whether an MFT performs asynchronous processing. + + + + + Enables the use of an asynchronous MFT. + + + + + Contains flags for an MFT activation object. + + + + + Specifies the category for an MFT. + + + + + Contains the class identifier (CLSID) of an MFT. + + + + + Contains the registered input types for a Media Foundation transform (MFT). + + + + + Contains the registered output types for a Media Foundation transform (MFT). + + + + + Contains the symbolic link for a hardware-based MFT. + + + + + Contains the display name for a hardware-based MFT. + + + + + Contains a pointer to the stream attributes of the connected stream on a hardware-based MFT. + + + + + Specifies whether a hardware-based MFT is connected to another hardware-based MFT. + + + + + Specifies the preferred output format for an encoder. + + + + + Specifies whether an MFT is registered only in the application's process. + + + + + Contains configuration properties for an encoder. + + + + + Specifies whether a hardware device source uses the system time for time stamps. + + + + + Contains an IMFFieldOfUseMFTUnlock pointer, which can be used to unlock the MFT. + + + + + Contains the merit value of a hardware codec. + + + + + Specifies whether a decoder is optimized for transcoding rather than for playback. + + + + + Contains a pointer to the proxy object for the application's presentation descriptor. + + + + + Contains a pointer to the presentation descriptor from the protected media path (PMP). + + + + + Specifies the duration of a presentation, in 100-nanosecond units. + + + + + Specifies the total size of the source file, in bytes. + + + + + Specifies the audio encoding bit rate for the presentation, in bits per second. + + + + + Specifies the video encoding bit rate for the presentation, in bits per second. + + + + + Specifies the MIME type of the content. + + + + + Specifies when a presentation was last modified. + + + + + The identifier of the playlist element in the presentation. + + + + + Contains the preferred RFC 1766 language of the media source. + + + + + The time at which the presentation must begin, relative to the start of the media source. + + + + + Specifies whether the audio streams in the presentation have a variable bit rate. + + + + + Media type Major Type + + + + + Media Type subtype + + + + + Audio block alignment + + + + + Audio average bytes per second + + + + + Audio number of channels + + + + + Audio samples per second + + + + + Audio bits per sample + + + + + Enables the source reader or sink writer to use hardware-based Media Foundation transforms (MFTs). + + + + + Contains additional format data for a media type. + + + + + Specifies for a media type whether each sample is independent of the other samples in the stream. + + + + + Specifies for a media type whether the samples have a fixed size. + + + + + Contains a DirectShow format GUID for a media type. + + + + + Specifies the preferred legacy format structure to use when converting an audio media type. + + + + + Specifies for a media type whether the media data is compressed. + + + + + Approximate data rate of the video stream, in bits per second, for a video media type. + + + + + Specifies the payload type of an Advanced Audio Coding (AAC) stream. + 0 - The stream contains raw_data_block elements only + 1 - Audio Data Transport Stream (ADTS). The stream contains an adts_sequence, as defined by MPEG-2. + 2 - Audio Data Interchange Format (ADIF). The stream contains an adif_sequence, as defined by MPEG-2. + 3 - The stream contains an MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + + + + + Specifies the audio profile and level of an Advanced Audio Coding (AAC) stream, as defined by ISO/IEC 14496-3. + + + + + Media Foundation Errors + + + + RANGES + 14000 - 14999 = General Media Foundation errors + 15000 - 15999 = ASF parsing errors + 16000 - 16999 = Media Source errors + 17000 - 17999 = MEDIAFOUNDATION Network Error Events + 18000 - 18999 = MEDIAFOUNDATION WMContainer Error Events + 19000 - 19999 = MEDIAFOUNDATION Media Sink Error Events + 20000 - 20999 = Renderer errors + 21000 - 21999 = Topology Errors + 25000 - 25999 = Timeline Errors + 26000 - 26999 = Unused + 28000 - 28999 = Transform errors + 29000 - 29999 = Content Protection errors + 40000 - 40999 = Clock errors + 41000 - 41999 = MF Quality Management Errors + 42000 - 42999 = MF Transcode API Errors + + + + + MessageId: MF_E_PLATFORM_NOT_INITIALIZED + + MessageText: + + Platform not initialized. Please call MFStartup().%0 + + + + + MessageId: MF_E_BUFFERTOOSMALL + + MessageText: + + The buffer was too small to carry out the requested action.%0 + + + + + MessageId: MF_E_INVALIDREQUEST + + MessageText: + + The request is invalid in the current state.%0 + + + + + MessageId: MF_E_INVALIDSTREAMNUMBER + + MessageText: + + The stream number provided was invalid.%0 + + + + + MessageId: MF_E_INVALIDMEDIATYPE + + MessageText: + + The data specified for the media type is invalid, inconsistent, or not supported by this object.%0 + + + + + MessageId: MF_E_NOTACCEPTING + + MessageText: + + The callee is currently not accepting further input.%0 + + + + + MessageId: MF_E_NOT_INITIALIZED + + MessageText: + + This object needs to be initialized before the requested operation can be carried out.%0 + + + + + MessageId: MF_E_UNSUPPORTED_REPRESENTATION + + MessageText: + + The requested representation is not supported by this object.%0 + + + + + MessageId: MF_E_NO_MORE_TYPES + + MessageText: + + An object ran out of media types to suggest therefore the requested chain of streaming objects cannot be completed.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SERVICE + + MessageText: + + The object does not support the specified service.%0 + + + + + MessageId: MF_E_UNEXPECTED + + MessageText: + + An unexpected error has occurred in the operation requested.%0 + + + + + MessageId: MF_E_INVALIDNAME + + MessageText: + + Invalid name.%0 + + + + + MessageId: MF_E_INVALIDTYPE + + MessageText: + + Invalid type.%0 + + + + + MessageId: MF_E_INVALID_FILE_FORMAT + + MessageText: + + The file does not conform to the relevant file format specification. + + + + + MessageId: MF_E_INVALIDINDEX + + MessageText: + + Invalid index.%0 + + + + + MessageId: MF_E_INVALID_TIMESTAMP + + MessageText: + + An invalid timestamp was given.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SCHEME + + MessageText: + + The scheme of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_BYTESTREAM_TYPE + + MessageText: + + The byte stream type of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_TIME_FORMAT + + MessageText: + + The given time format is unsupported.%0 + + + + + MessageId: MF_E_NO_SAMPLE_TIMESTAMP + + MessageText: + + The Media Sample does not have a timestamp.%0 + + + + + MessageId: MF_E_NO_SAMPLE_DURATION + + MessageText: + + The Media Sample does not have a duration.%0 + + + + + MessageId: MF_E_INVALID_STREAM_DATA + + MessageText: + + The request failed because the data in the stream is corrupt.%0\n. + + + + + MessageId: MF_E_RT_UNAVAILABLE + + MessageText: + + Real time services are not available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE + + MessageText: + + The specified rate is not supported.%0 + + + + + MessageId: MF_E_THINNING_UNSUPPORTED + + MessageText: + + This component does not support stream-thinning.%0 + + + + + MessageId: MF_E_REVERSE_UNSUPPORTED + + MessageText: + + The call failed because no reverse playback rates are available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE_TRANSITION + + MessageText: + + The requested rate transition cannot occur in the current state.%0 + + + + + MessageId: MF_E_RATE_CHANGE_PREEMPTED + + MessageText: + + The requested rate change has been pre-empted and will not occur.%0 + + + + + MessageId: MF_E_NOT_FOUND + + MessageText: + + The specified object or value does not exist.%0 + + + + + MessageId: MF_E_NOT_AVAILABLE + + MessageText: + + The requested value is not available.%0 + + + + + MessageId: MF_E_NO_CLOCK + + MessageText: + + The specified operation requires a clock and no clock is available.%0 + + + + + MessageId: MF_S_MULTIPLE_BEGIN + + MessageText: + + This callback and state had already been passed in to this event generator earlier.%0 + + + + + MessageId: MF_E_MULTIPLE_BEGIN + + MessageText: + + This callback has already been passed in to this event generator.%0 + + + + + MessageId: MF_E_MULTIPLE_SUBSCRIBERS + + MessageText: + + Some component is already listening to events on this event generator.%0 + + + + + MessageId: MF_E_TIMER_ORPHANED + + MessageText: + + This timer was orphaned before its callback time arrived.%0 + + + + + MessageId: MF_E_STATE_TRANSITION_PENDING + + MessageText: + + A state transition is already pending.%0 + + + + + MessageId: MF_E_UNSUPPORTED_STATE_TRANSITION + + MessageText: + + The requested state transition is unsupported.%0 + + + + + MessageId: MF_E_UNRECOVERABLE_ERROR_OCCURRED + + MessageText: + + An unrecoverable error has occurred.%0 + + + + + MessageId: MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS + + MessageText: + + The provided sample has too many buffers.%0 + + + + + MessageId: MF_E_SAMPLE_NOT_WRITABLE + + MessageText: + + The provided sample is not writable.%0 + + + + + MessageId: MF_E_INVALID_KEY + + MessageText: + + The specified key is not valid. + + + + + MessageId: MF_E_BAD_STARTUP_VERSION + + MessageText: + + You are calling MFStartup with the wrong MF_VERSION. Mismatched bits? + + + + + MessageId: MF_E_UNSUPPORTED_CAPTION + + MessageText: + + The caption of the given URL is unsupported.%0 + + + + + MessageId: MF_E_INVALID_POSITION + + MessageText: + + The operation on the current offset is not permitted.%0 + + + + + MessageId: MF_E_ATTRIBUTENOTFOUND + + MessageText: + + The requested attribute was not found.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_ALLOWED + + MessageText: + + The specified property type is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_SUPPORTED + + MessageText: + + The specified property type is not supported.%0 + + + + + MessageId: MF_E_PROPERTY_EMPTY + + MessageText: + + The specified property is empty.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_EMPTY + + MessageText: + + The specified property is not empty.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_NOT_ALLOWED + + MessageText: + + The vector property specified is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_REQUIRED + + MessageText: + + A vector property is required in this context.%0 + + + + + MessageId: MF_E_OPERATION_CANCELLED + + MessageText: + + The operation is cancelled.%0 + + + + + MessageId: MF_E_BYTESTREAM_NOT_SEEKABLE + + MessageText: + + The provided bytestream was expected to be seekable and it is not.%0 + + + + + MessageId: MF_E_DISABLED_IN_SAFEMODE + + MessageText: + + The Media Foundation platform is disabled when the system is running in Safe Mode.%0 + + + + + MessageId: MF_E_CANNOT_PARSE_BYTESTREAM + + MessageText: + + The Media Source could not parse the byte stream.%0 + + + + + MessageId: MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS + + MessageText: + + Mutually exclusive flags have been specified to source resolver. This flag combination is invalid.%0 + + + + + MessageId: MF_E_MEDIAPROC_WRONGSTATE + + MessageText: + + MediaProc is in the wrong state%0 + + + + + MessageId: MF_E_RT_THROUGHPUT_NOT_AVAILABLE + + MessageText: + + Real time I/O service can not provide requested throughput.%0 + + + + + MessageId: MF_E_RT_TOO_MANY_CLASSES + + MessageText: + + The workqueue cannot be registered with more classes.%0 + + + + + MessageId: MF_E_RT_WOULDBLOCK + + MessageText: + + This operation cannot succeed because another thread owns this object.%0 + + + + + MessageId: MF_E_NO_BITPUMP + + MessageText: + + Internal. Bitpump not found.%0 + + + + + MessageId: MF_E_RT_OUTOFMEMORY + + MessageText: + + No more RT memory available.%0 + + + + + MessageId: MF_E_RT_WORKQUEUE_CLASS_NOT_SPECIFIED + + MessageText: + + An MMCSS class has not been set for this work queue.%0 + + + + + MessageId: MF_E_INSUFFICIENT_BUFFER + + MessageText: + + Insufficient memory for response.%0 + + + + + MessageId: MF_E_CANNOT_CREATE_SINK + + MessageText: + + Activate failed to create mediasink. Call OutputNode::GetUINT32(MF_TOPONODE_MAJORTYPE) for more information. %0 + + + + + MessageId: MF_E_BYTESTREAM_UNKNOWN_LENGTH + + MessageText: + + The length of the provided bytestream is unknown.%0 + + + + + MessageId: MF_E_SESSION_PAUSEWHILESTOPPED + + MessageText: + + The media session cannot pause from a stopped state.%0 + + + + + MessageId: MF_S_ACTIVATE_REPLACED + + MessageText: + + The activate could not be created in the remote process for some reason it was replaced with empty one.%0 + + + + + MessageId: MF_E_FORMAT_CHANGE_NOT_SUPPORTED + + MessageText: + + The data specified for the media type is supported, but would require a format change, which is not supported by this object.%0 + + + + + MessageId: MF_E_INVALID_WORKQUEUE + + MessageText: + + The operation failed because an invalid combination of workqueue ID and flags was specified.%0 + + + + + MessageId: MF_E_DRM_UNSUPPORTED + + MessageText: + + No DRM support is available.%0 + + + + + MessageId: MF_E_UNAUTHORIZED + + MessageText: + + This operation is not authorized.%0 + + + + + MessageId: MF_E_OUT_OF_RANGE + + MessageText: + + The value is not in the specified or valid range.%0 + + + + + MessageId: MF_E_INVALID_CODEC_MERIT + + MessageText: + + The registered codec merit is not valid.%0 + + + + + MessageId: MF_E_HW_MFT_FAILED_START_STREAMING + + MessageText: + + Hardware MFT failed to start streaming due to lack of hardware resources.%0 + + + + + MessageId: MF_S_ASF_PARSEINPROGRESS + + MessageText: + + Parsing is still in progress and is not yet complete.%0 + + + + + MessageId: MF_E_ASF_PARSINGINCOMPLETE + + MessageText: + + Not enough data have been parsed to carry out the requested action.%0 + + + + + MessageId: MF_E_ASF_MISSINGDATA + + MessageText: + + There is a gap in the ASF data provided.%0 + + + + + MessageId: MF_E_ASF_INVALIDDATA + + MessageText: + + The data provided are not valid ASF.%0 + + + + + MessageId: MF_E_ASF_OPAQUEPACKET + + MessageText: + + The packet is opaque, so the requested information cannot be returned.%0 + + + + + MessageId: MF_E_ASF_NOINDEX + + MessageText: + + The requested operation failed since there is no appropriate ASF index.%0 + + + + + MessageId: MF_E_ASF_OUTOFRANGE + + MessageText: + + The value supplied is out of range for this operation.%0 + + + + + MessageId: MF_E_ASF_INDEXNOTLOADED + + MessageText: + + The index entry requested needs to be loaded before it can be available.%0 + + + + + MessageId: MF_E_ASF_TOO_MANY_PAYLOADS + + MessageText: + + The packet has reached the maximum number of payloads.%0 + + + + + MessageId: MF_E_ASF_UNSUPPORTED_STREAM_TYPE + + MessageText: + + Stream type is not supported.%0 + + + + + MessageId: MF_E_ASF_DROPPED_PACKET + + MessageText: + + One or more ASF packets were dropped.%0 + + + + + MessageId: MF_E_NO_EVENTS_AVAILABLE + + MessageText: + + There are no events available in the queue.%0 + + + + + MessageId: MF_E_INVALID_STATE_TRANSITION + + MessageText: + + A media source cannot go from the stopped state to the paused state.%0 + + + + + MessageId: MF_E_END_OF_STREAM + + MessageText: + + The media stream cannot process any more samples because there are no more samples in the stream.%0 + + + + + MessageId: MF_E_SHUTDOWN + + MessageText: + + The request is invalid because Shutdown() has been called.%0 + + + + + MessageId: MF_E_MP3_NOTFOUND + + MessageText: + + The MP3 object was not found.%0 + + + + + MessageId: MF_E_MP3_OUTOFDATA + + MessageText: + + The MP3 parser ran out of data before finding the MP3 object.%0 + + + + + MessageId: MF_E_MP3_NOTMP3 + + MessageText: + + The file is not really a MP3 file.%0 + + + + + MessageId: MF_E_MP3_NOTSUPPORTED + + MessageText: + + The MP3 file is not supported.%0 + + + + + MessageId: MF_E_NO_DURATION + + MessageText: + + The Media stream has no duration.%0 + + + + + MessageId: MF_E_INVALID_FORMAT + + MessageText: + + The Media format is recognized but is invalid.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_FOUND + + MessageText: + + The property requested was not found.%0 + + + + + MessageId: MF_E_PROPERTY_READ_ONLY + + MessageText: + + The property is read only.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_ALLOWED + + MessageText: + + The specified property is not allowed in this context.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NOT_STARTED + + MessageText: + + The media source is not started.%0 + + + + + MessageId: MF_E_UNSUPPORTED_FORMAT + + MessageText: + + The Media format is recognized but not supported.%0 + + + + + MessageId: MF_E_MP3_BAD_CRC + + MessageText: + + The MPEG frame has bad CRC.%0 + + + + + MessageId: MF_E_NOT_PROTECTED + + MessageText: + + The file is not protected.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_WRONGSTATE + + MessageText: + + The media source is in the wrong state%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED + + MessageText: + + No streams are selected in source presentation descriptor.%0 + + + + + MessageId: MF_E_CANNOT_FIND_KEYFRAME_SAMPLE + + MessageText: + + No key frame sample was found.%0 + + + + + MessageId: MF_E_NETWORK_RESOURCE_FAILURE + + MessageText: + + An attempt to acquire a network resource failed.%0 + + + + + MessageId: MF_E_NET_WRITE + + MessageText: + + Error writing to the network.%0 + + + + + MessageId: MF_E_NET_READ + + MessageText: + + Error reading from the network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_NETWORK + + MessageText: + + Internal. Entry cannot complete operation without network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_ASYNC + + MessageText: + + Internal. Async op is required.%0 + + + + + MessageId: MF_E_NET_BWLEVEL_NOT_SUPPORTED + + MessageText: + + Internal. Bandwidth levels are not supported.%0 + + + + + MessageId: MF_E_NET_STREAMGROUPS_NOT_SUPPORTED + + MessageText: + + Internal. Stream groups are not supported.%0 + + + + + MessageId: MF_E_NET_MANUALSS_NOT_SUPPORTED + + MessageText: + + Manual stream selection is not supported.%0 + + + + + MessageId: MF_E_NET_INVALID_PRESENTATION_DESCRIPTOR + + MessageText: + + Invalid presentation descriptor.%0 + + + + + MessageId: MF_E_NET_CACHESTREAM_NOT_FOUND + + MessageText: + + Cannot find cache stream.%0 + + + + + MessageId: MF_I_MANUAL_PROXY + + MessageText: + + The proxy setting is manual.%0 + + + + duplicate removed + MessageId=17011 Severity=Informational Facility=MEDIAFOUNDATION SymbolicName=MF_E_INVALID_REQUEST + Language=English + The request is invalid in the current state.%0 + . + + MessageId: MF_E_NET_REQUIRE_INPUT + + MessageText: + + Internal. Entry cannot complete operation without input.%0 + + + + + MessageId: MF_E_NET_REDIRECT + + MessageText: + + The client redirected to another server.%0 + + + + + MessageId: MF_E_NET_REDIRECT_TO_PROXY + + MessageText: + + The client is redirected to a proxy server.%0 + + + + + MessageId: MF_E_NET_TOO_MANY_REDIRECTS + + MessageText: + + The client reached maximum redirection limit.%0 + + + + + MessageId: MF_E_NET_TIMEOUT + + MessageText: + + The server, a computer set up to offer multimedia content to other computers, could not handle your request for multimedia content in a timely manner. Please try again later.%0 + + + + + MessageId: MF_E_NET_CLIENT_CLOSE + + MessageText: + + The control socket is closed by the client.%0 + + + + + MessageId: MF_E_NET_BAD_CONTROL_DATA + + MessageText: + + The server received invalid data from the client on the control connection.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_SERVER + + MessageText: + + The server is not a compatible streaming media server.%0 + + + + + MessageId: MF_E_NET_UNSAFE_URL + + MessageText: + + Url.%0 + + + + + MessageId: MF_E_NET_CACHE_NO_DATA + + MessageText: + + Data is not available.%0 + + + + + MessageId: MF_E_NET_EOL + + MessageText: + + End of line.%0 + + + + + MessageId: MF_E_NET_BAD_REQUEST + + MessageText: + + The request could not be understood by the server.%0 + + + + + MessageId: MF_E_NET_INTERNAL_SERVER_ERROR + + MessageText: + + The server encountered an unexpected condition which prevented it from fulfilling the request.%0 + + + + + MessageId: MF_E_NET_SESSION_NOT_FOUND + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_NET_NOCONNECTION + + MessageText: + + There is no connection established with the Windows Media server. The operation failed.%0 + + + + + MessageId: MF_E_NET_CONNECTION_FAILURE + + MessageText: + + The network connection has failed.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_PUSHSERVER + + MessageText: + + The Server service that received the HTTP push request is not a compatible version of Windows Media Services (WMS). This error may indicate the push request was received by IIS instead of WMS. Ensure WMS is started and has the HTTP Server control protocol properly enabled and try again.%0 + + + + + MessageId: MF_E_NET_SERVER_ACCESSDENIED + + MessageText: + + The Windows Media server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_PROXY_ACCESSDENIED + + MessageText: + + The proxy server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_CANNOTCONNECT + + MessageText: + + Unable to establish a connection to the server.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_TEMPLATE + + MessageText: + + The specified push template is invalid.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_PUBLISHING_POINT + + MessageText: + + The specified push publishing point is invalid.%0 + + + + + MessageId: MF_E_NET_BUSY + + MessageText: + + The requested resource is in use.%0 + + + + + MessageId: MF_E_NET_RESOURCE_GONE + + MessageText: + + The Publishing Point or file on the Windows Media Server is no longer available.%0 + + + + + MessageId: MF_E_NET_ERROR_FROM_PROXY + + MessageText: + + The proxy experienced an error while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_PROXY_TIMEOUT + + MessageText: + + The proxy did not receive a timely response while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_SERVER_UNAVAILABLE + + MessageText: + + The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.%0 + + + + + MessageId: MF_E_NET_TOO_MUCH_DATA + + MessageText: + + The encoding process was unable to keep up with the amount of supplied data.%0 + + + + + MessageId: MF_E_NET_SESSION_INVALID + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_OFFLINE_MODE + + MessageText: + + The requested URL is not available in offline mode.%0 + + + + + MessageId: MF_E_NET_UDP_BLOCKED + + MessageText: + + A device in the network is blocking UDP traffic.%0 + + + + + MessageId: MF_E_NET_UNSUPPORTED_CONFIGURATION + + MessageText: + + The specified configuration value is not supported.%0 + + + + + MessageId: MF_E_NET_PROTOCOL_DISABLED + + MessageText: + + The networking protocol is disabled.%0 + + + + + MessageId: MF_E_ALREADY_INITIALIZED + + MessageText: + + This object has already been initialized and cannot be re-initialized at this time.%0 + + + + + MessageId: MF_E_BANDWIDTH_OVERRUN + + MessageText: + + The amount of data passed in exceeds the given bitrate and buffer window.%0 + + + + + MessageId: MF_E_LATE_SAMPLE + + MessageText: + + The sample was passed in too late to be correctly processed.%0 + + + + + MessageId: MF_E_FLUSH_NEEDED + + MessageText: + + The requested action cannot be carried out until the object is flushed and the queue is emptied.%0 + + + + + MessageId: MF_E_INVALID_PROFILE + + MessageText: + + The profile is invalid.%0 + + + + + MessageId: MF_E_INDEX_NOT_COMMITTED + + MessageText: + + The index that is being generated needs to be committed before the requested action can be carried out.%0 + + + + + MessageId: MF_E_NO_INDEX + + MessageText: + + The index that is necessary for the requested action is not found.%0 + + + + + MessageId: MF_E_CANNOT_INDEX_IN_PLACE + + MessageText: + + The requested index cannot be added in-place to the specified ASF content.%0 + + + + + MessageId: MF_E_MISSING_ASF_LEAKYBUCKET + + MessageText: + + The ASF leaky bucket parameters must be specified in order to carry out this request.%0 + + + + + MessageId: MF_E_INVALID_ASF_STREAMID + + MessageText: + + The stream id is invalid. The valid range for ASF stream id is from 1 to 127.%0 + + + + + MessageId: MF_E_STREAMSINK_REMOVED + + MessageText: + + The requested Stream Sink has been removed and cannot be used.%0 + + + + + MessageId: MF_E_STREAMSINKS_OUT_OF_SYNC + + MessageText: + + The various Stream Sinks in this Media Sink are too far out of sync for the requested action to take place.%0 + + + + + MessageId: MF_E_STREAMSINKS_FIXED + + MessageText: + + Stream Sinks cannot be added to or removed from this Media Sink because its set of streams is fixed.%0 + + + + + MessageId: MF_E_STREAMSINK_EXISTS + + MessageText: + + The given Stream Sink already exists.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_CANCELED + + MessageText: + + Sample allocations have been canceled.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_EMPTY + + MessageText: + + The sample allocator is currently empty, due to outstanding requests.%0 + + + + + MessageId: MF_E_SINK_ALREADYSTOPPED + + MessageText: + + When we try to sopt a stream sink, it is already stopped %0 + + + + + MessageId: MF_E_ASF_FILESINK_BITRATE_UNKNOWN + + MessageText: + + The ASF file sink could not reserve AVIO because the bitrate is unknown.%0 + + + + + MessageId: MF_E_SINK_NO_STREAMS + + MessageText: + + No streams are selected in sink presentation descriptor.%0 + + + + + MessageId: MF_S_SINK_NOT_FINALIZED + + MessageText: + + The sink has not been finalized before shut down. This may cause sink generate a corrupted content.%0 + + + + + MessageId: MF_E_METADATA_TOO_LONG + + MessageText: + + A metadata item was too long to write to the output container.%0 + + + + + MessageId: MF_E_SINK_NO_SAMPLES_PROCESSED + + MessageText: + + The operation failed because no samples were processed by the sink.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_PROCAMP_HW + + MessageText: + + There is no available procamp hardware with which to perform color correction.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_DEINTERLACE_HW + + MessageText: + + There is no available deinterlacing hardware with which to deinterlace the video stream.%0 + + + + + MessageId: MF_E_VIDEO_REN_COPYPROT_FAILED + + MessageText: + + A video stream requires copy protection to be enabled, but there was a failure in attempting to enable copy protection.%0 + + + + + MessageId: MF_E_VIDEO_REN_SURFACE_NOT_SHARED + + MessageText: + + A component is attempting to access a surface for sharing that is not shared.%0 + + + + + MessageId: MF_E_VIDEO_DEVICE_LOCKED + + MessageText: + + A component is attempting to access a shared device that is already locked by another component.%0 + + + + + MessageId: MF_E_NEW_VIDEO_DEVICE + + MessageText: + + The device is no longer available. The handle should be closed and a new one opened.%0 + + + + + MessageId: MF_E_NO_VIDEO_SAMPLE_AVAILABLE + + MessageText: + + A video sample is not currently queued on a stream that is required for mixing.%0 + + + + + MessageId: MF_E_NO_AUDIO_PLAYBACK_DEVICE + + MessageText: + + No audio playback device was found.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_IN_USE + + MessageText: + + The requested audio playback device is currently in use.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_INVALIDATED + + MessageText: + + The audio playback device is no longer present.%0 + + + + + MessageId: MF_E_AUDIO_SERVICE_NOT_RUNNING + + MessageText: + + The audio service is not running.%0 + + + + + MessageId: MF_E_TOPO_INVALID_OPTIONAL_NODE + + MessageText: + + The topology contains an invalid optional node. Possible reasons are incorrect number of outputs and inputs or optional node is at the beginning or end of a segment. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_FIND_DECRYPTOR + + MessageText: + + No suitable transform was found to decrypt the content. %0 + + + + + MessageId: MF_E_TOPO_CODEC_NOT_FOUND + + MessageText: + + No suitable transform was found to encode or decode the content. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_CONNECT + + MessageText: + + Unable to find a way to connect nodes%0 + + + + + MessageId: MF_E_TOPO_UNSUPPORTED + + MessageText: + + Unsupported operations in topoloader%0 + + + + + MessageId: MF_E_TOPO_INVALID_TIME_ATTRIBUTES + + MessageText: + + The topology or its nodes contain incorrectly set time attributes%0 + + + + + MessageId: MF_E_TOPO_LOOPS_IN_TOPOLOGY + + MessageText: + + The topology contains loops, which are unsupported in media foundation topologies%0 + + + + + MessageId: MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_STREAM_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a stream descriptor%0 + + + + + MessageId: MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED + + MessageText: + + A stream descriptor was set on a source stream node but it was not selected on the presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_SOURCE + + MessageText: + + A source stream node in the topology does not have a source%0 + + + + + MessageId: MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED + + MessageText: + + The topology loader does not support sink activates on output nodes.%0 + + + + + MessageId: MF_E_SEQUENCER_UNKNOWN_SEGMENT_ID + + MessageText: + + The sequencer cannot find a segment with the given ID.%0\n. + + + + + MessageId: MF_S_SEQUENCER_CONTEXT_CANCELED + + MessageText: + + The context was canceled.%0\n. + + + + + MessageId: MF_E_NO_SOURCE_IN_CACHE + + MessageText: + + Cannot find source in source cache.%0\n. + + + + + MessageId: MF_S_SEQUENCER_SEGMENT_AT_END_OF_STREAM + + MessageText: + + Cannot update topology flags.%0\n. + + + + + MessageId: MF_E_TRANSFORM_TYPE_NOT_SET + + MessageText: + + A valid type has not been set for this stream or a stream that it depends on.%0 + + + + + MessageId: MF_E_TRANSFORM_STREAM_CHANGE + + MessageText: + + A stream change has occurred. Output cannot be produced until the streams have been renegotiated.%0 + + + + + MessageId: MF_E_TRANSFORM_INPUT_REMAINING + + MessageText: + + The transform cannot take the requested action until all of the input data it currently holds is processed or flushed.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_MISSING + + MessageText: + + The transform requires a profile but no profile was supplied or found.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_INVALID_OR_CORRUPT + + MessageText: + + The transform requires a profile but the supplied profile was invalid or corrupt.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_TRUNCATED + + MessageText: + + The transform requires a profile but the supplied profile ended unexpectedly while parsing.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_PID_NOT_RECOGNIZED + + MessageText: + + The property ID does not match any property supported by the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VARIANT_TYPE_WRONG + + MessageText: + + The variant does not have the type expected for this property ID.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_NOT_WRITEABLE + + MessageText: + + An attempt was made to set the value on a read-only property.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_ARRAY_VALUE_WRONG_NUM_DIM + + MessageText: + + The array property value has an unexpected number of dimensions.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_SIZE_WRONG + + MessageText: + + The array or blob property value has an unexpected size.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_OUT_OF_RANGE + + MessageText: + + The property value is out of range for this transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_INCOMPATIBLE + + MessageText: + + The property value is incompatible with some other property or mediatype set on the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_OUTPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set output mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_INPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set input mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION + + MessageText: + + The requested operation is not supported for the currently set combination of mediatypes.%0 + + + + + MessageId: MF_E_TRANSFORM_CONFLICTS_WITH_OTHER_CURRENTLY_ENABLED_FEATURES + + MessageText: + + The requested feature is not supported in combination with some other currently enabled feature.%0 + + + + + MessageId: MF_E_TRANSFORM_NEED_MORE_INPUT + + MessageText: + + The transform cannot produce output until it gets more input samples.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_SPKR_CONFIG + + MessageText: + + The requested operation is not supported for the current speaker configuration.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING + + MessageText: + + The transform cannot accept mediatype changes in the middle of processing.%0 + + + + + MessageId: MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT + + MessageText: + + The caller should not propagate this event to downstream components.%0 + + + + + MessageId: MF_E_UNSUPPORTED_D3D_TYPE + + MessageText: + + The input type is not supported for D3D device.%0 + + + + + MessageId: MF_E_TRANSFORM_ASYNC_LOCKED + + MessageText: + + The caller does not appear to support this transform's asynchronous capabilities.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_INITIALIZE_ACM_DRIVER + + MessageText: + + An audio compression manager driver could not be initialized by the transform.%0 + + + + + MessageId: MF_E_LICENSE_INCORRECT_RIGHTS + + MessageText: + + You are not allowed to open this file. Contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_OUTOFDATE + + MessageText: + + The license for this media file has expired. Get a new license or contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_REQUIRED + + MessageText: + + You need a license to perform the requested operation on this media file.%0 + + + + + MessageId: MF_E_DRM_HARDWARE_INCONSISTENT + + MessageText: + + The licenses for your media files are corrupted. Contact Microsoft product support.%0 + + + + + MessageId: MF_E_NO_CONTENT_PROTECTION_MANAGER + + MessageText: + + The APP needs to provide IMFContentProtectionManager callback to access the protected media file.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NO_RIGHTS + + MessageText: + + Client does not have rights to restore licenses.%0 + + + + + MessageId: MF_E_BACKUP_RESTRICTED_LICENSE + + MessageText: + + Licenses are restricted and hence can not be backed up.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NEEDS_INDIVIDUALIZATION + + MessageText: + + License restore requires machine to be individualized.%0 + + + + + MessageId: MF_S_PROTECTION_NOT_REQUIRED + + MessageText: + + Protection for stream is not required.%0 + + + + + MessageId: MF_E_COMPONENT_REVOKED + + MessageText: + + Component is revoked.%0 + + + + + MessageId: MF_E_TRUST_DISABLED + + MessageText: + + Trusted functionality is currently disabled on this component.%0 + + + + + MessageId: MF_E_WMDRMOTA_NO_ACTION + + MessageText: + + No Action is set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_ALREADY_SET + + MessageText: + + Action is already set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_HEADER_NOT_AVAILABLE + + MessageText: + + DRM Heaader is not available.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_ENCRYPTION_SCHEME_NOT_SUPPORTED + + MessageText: + + Current encryption scheme is not supported.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_MISMATCH + + MessageText: + + Action does not match with current configuration.%0 + + + + + MessageId: MF_E_WMDRMOTA_INVALID_POLICY + + MessageText: + + Invalid policy for WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_POLICY_UNSUPPORTED + + MessageText: + + The policies that the Input Trust Authority requires to be enforced are unsupported by the outputs.%0 + + + + + MessageId: MF_E_OPL_NOT_SUPPORTED + + MessageText: + + The OPL that the license requires to be enforced are not supported by the Input Trust Authority.%0 + + + + + MessageId: MF_E_TOPOLOGY_VERIFICATION_FAILED + + MessageText: + + The topology could not be successfully verified.%0 + + + + + MessageId: MF_E_SIGNATURE_VERIFICATION_FAILED + + MessageText: + + Signature verification could not be completed successfully for this component.%0 + + + + + MessageId: MF_E_DEBUGGING_NOT_ALLOWED + + MessageText: + + Running this process under a debugger while using protected content is not allowed.%0 + + + + + MessageId: MF_E_CODE_EXPIRED + + MessageText: + + MF component has expired.%0 + + + + + MessageId: MF_E_GRL_VERSION_TOO_LOW + + MessageText: + + The current GRL on the machine does not meet the minimum version requirements.%0 + + + + + MessageId: MF_E_GRL_RENEWAL_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any renewal entries for the specified revocation.%0 + + + + + MessageId: MF_E_GRL_EXTENSIBLE_ENTRY_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any extensible entries for the specified extension GUID.%0 + + + + + MessageId: MF_E_KERNEL_UNTRUSTED + + MessageText: + + The kernel isn't secure for high security level content.%0 + + + + + MessageId: MF_E_PEAUTH_UNTRUSTED + + MessageText: + + The response from protected environment driver isn't valid.%0 + + + + + MessageId: MF_E_NON_PE_PROCESS + + MessageText: + + A non-PE process tried to talk to PEAuth.%0 + + + + + MessageId: MF_E_REBOOT_REQUIRED + + MessageText: + + We need to reboot the machine.%0 + + + + + MessageId: MF_S_WAIT_FOR_POLICY_SET + + MessageText: + + Protection for this stream is not guaranteed to be enforced until the MEPolicySet event is fired.%0 + + + + + MessageId: MF_S_VIDEO_DISABLED_WITH_UNKNOWN_SOFTWARE_OUTPUT + + MessageText: + + This video stream is disabled because it is being sent to an unknown software output.%0 + + + + + MessageId: MF_E_GRL_INVALID_FORMAT + + MessageText: + + The GRL file is not correctly formed, it may have been corrupted or overwritten.%0 + + + + + MessageId: MF_E_GRL_UNRECOGNIZED_FORMAT + + MessageText: + + The GRL file is in a format newer than those recognized by this GRL Reader.%0 + + + + + MessageId: MF_E_ALL_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and required all processes that can run protected media to restart.%0 + + + + + MessageId: MF_E_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and the current process needs to restart.%0 + + + + + MessageId: MF_E_USERMODE_UNTRUSTED + + MessageText: + + The user space is untrusted for protected content play.%0 + + + + + MessageId: MF_E_PEAUTH_SESSION_NOT_STARTED + + MessageText: + + PEAuth communication session hasn't been started.%0 + + + + + MessageId: MF_E_PEAUTH_PUBLICKEY_REVOKED + + MessageText: + + PEAuth's public key is revoked.%0 + + + + + MessageId: MF_E_GRL_ABSENT + + MessageText: + + The GRL is absent.%0 + + + + + MessageId: MF_S_PE_TRUSTED + + MessageText: + + The Protected Environment is trusted.%0 + + + + + MessageId: MF_E_PE_UNTRUSTED + + MessageText: + + The Protected Environment is untrusted.%0 + + + + + MessageId: MF_E_PEAUTH_NOT_STARTED + + MessageText: + + The Protected Environment Authorization service (PEAUTH) has not been started.%0 + + + + + MessageId: MF_E_INCOMPATIBLE_SAMPLE_PROTECTION + + MessageText: + + The sample protection algorithms supported by components are not compatible.%0 + + + + + MessageId: MF_E_PE_SESSIONS_MAXED + + MessageText: + + No more protected environment sessions can be supported.%0 + + + + + MessageId: MF_E_HIGH_SECURITY_LEVEL_CONTENT_NOT_ALLOWED + + MessageText: + + WMDRM ITA does not allow protected content with high security level for this release.%0 + + + + + MessageId: MF_E_TEST_SIGNED_COMPONENTS_NOT_ALLOWED + + MessageText: + + WMDRM ITA cannot allow the requested action for the content as one or more components is not properly signed.%0 + + + + + MessageId: MF_E_ITA_UNSUPPORTED_ACTION + + MessageText: + + WMDRM ITA does not support the requested action.%0 + + + + + MessageId: MF_E_ITA_ERROR_PARSING_SAP_PARAMETERS + + MessageText: + + WMDRM ITA encountered an error in parsing the Secure Audio Path parameters.%0 + + + + + MessageId: MF_E_POLICY_MGR_ACTION_OUTOFBOUNDS + + MessageText: + + The Policy Manager action passed in is invalid.%0 + + + + + MessageId: MF_E_BAD_OPL_STRUCTURE_FORMAT + + MessageText: + + The structure specifying Output Protection Level is not the correct format.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_PROTECTION_GUID + + MessageText: + + WMDRM ITA does not recognize the Explicite Analog Video Output Protection guid specified in the license.%0 + + + + + MessageId: MF_E_NO_PMP_HOST + + MessageText: + + IMFPMPHost object not available.%0 + + + + + MessageId: MF_E_ITA_OPL_DATA_NOT_INITIALIZED + + MessageText: + + WMDRM ITA could not initialize the Output Protection Level data.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Analog Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_DIGITAL_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Digital Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_CLOCK_INVALID_CONTINUITY_KEY + + MessageText: + + The continuity key supplied is not currently valid.%0 + + + + + MessageId: MF_E_CLOCK_NO_TIME_SOURCE + + MessageText: + + No Presentation Time Source has been specified.%0 + + + + + MessageId: MF_E_CLOCK_STATE_ALREADY_SET + + MessageText: + + The clock is already in the requested state.%0 + + + + + MessageId: MF_E_CLOCK_NOT_SIMPLE + + MessageText: + + The clock has too many advanced features to carry out the request.%0 + + + + + MessageId: MF_S_CLOCK_STOPPED + + MessageText: + + Timer::SetTimer returns this success code if called happened while timer is stopped. Timer is not going to be dispatched until clock is running%0 + + + + + MessageId: MF_E_NO_MORE_DROP_MODES + + MessageText: + + The component does not support any more drop modes.%0 + + + + + MessageId: MF_E_NO_MORE_QUALITY_LEVELS + + MessageText: + + The component does not support any more quality levels.%0 + + + + + MessageId: MF_E_DROPTIME_NOT_SUPPORTED + + MessageText: + + The component does not support drop time functionality.%0 + + + + + MessageId: MF_E_QUALITYKNOB_WAIT_LONGER + + MessageText: + + Quality Manager needs to wait longer before bumping the Quality Level up.%0 + + + + + MessageId: MF_E_QM_INVALIDSTATE + + MessageText: + + Quality Manager is in an invalid state. Quality Management is off at this moment.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_CONTAINERTYPE + + MessageText: + + No transcode output container type is specified.%0 + + + + + MessageId: MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS + + MessageText: + + The profile does not have a media type configuration for any selected source streams.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_MATCHING_ENCODER + + MessageText: + + Cannot find an encoder MFT that accepts the user preferred output type.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_INITIALIZED + + MessageText: + + Memory allocator is not initialized.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_COMMITED + + MessageText: + + Memory allocator is not committed yet.%0 + + + + + MessageId: MF_E_ALLOCATOR_ALREADY_COMMITED + + MessageText: + + Memory allocator has already been committed.%0 + + + + + MessageId: MF_E_STREAM_ERROR + + MessageText: + + An error occurred in media stream.%0 + + + + + MessageId: MF_E_INVALID_STREAM_STATE + + MessageText: + + Stream is not in a state to handle the request.%0 + + + + + MessageId: MF_E_HW_STREAM_NOT_CONNECTED + + MessageText: + + Hardware stream is not connected yet.%0 + + + + + Main interface for using Media Foundation with NAudio + + + + + initializes MediaFoundation - only needs to be called once per process + + + + + Enumerate the installed MediaFoundation transforms in the specified category + + A category from MediaFoundationTransformCategories + + + + + uninitializes MediaFoundation + + + + + Creates a Media type + + + + + Creates a media type from a WaveFormat + + + + + Creates a memory buffer of the specified size + + Memory buffer size in bytes + The memory buffer + + + + Creates a sample object + + The sample object + + + + Creates a new attributes store + + Initial size + The attributes store + + + + Creates a media foundation byte stream based on a stream object + (usable with WinRT streams) + + The input stream + A media foundation byte stream + + + + Creates a source reader based on a byte stream + + The byte stream + A media foundation source reader + + + + Interop definitions for MediaFoundation + thanks to Lucian Wischik for the initial work on many of these definitions (also various interfaces) + n.b. the goal is to make as much of this internal as possible, and provide + better .NET APIs using the MediaFoundationApi class instead + + + + + Initializes Microsoft Media Foundation. + + + + + Shuts down the Microsoft Media Foundation platform + + + + + Creates an empty media type. + + + + + Initializes a media type from a WAVEFORMATEX structure. + + + + + Converts a Media Foundation audio media type to a WAVEFORMATEX structure. + + TODO: try making second parameter out WaveFormatExtraData + + + + Creates the source reader from a URL. + + + + + Creates the source reader from a byte stream. + + + + + Creates the sink writer from a URL or byte stream. + + + + + Creates a Microsoft Media Foundation byte stream that wraps an IRandomAccessStream object. + + + + + Gets a list of Microsoft Media Foundation transforms (MFTs) that match specified search criteria. + + + + + Creates an empty media sample. + + + + + Allocates system memory and creates a media buffer to manage it. + + + + + Creates an empty attribute store. + + + + + Gets a list of output formats from an audio encoder. + + + + + All streams + + + + + First audio stream + + + + + First video stream + + + + + Media source + + + + + Media Foundation SDK Version + + + + + Media Foundation API Version + + + + + Media Foundation Version + + + + + An abstract base class for simplifying working with Media Foundation Transforms + You need to override the method that actually creates and configures the transform + + + + + The Source Provider + + + + + The Output WaveFormat + + + + + Constructs a new MediaFoundationTransform wrapper + Will read one second at a time + + The source provider for input data to the transform + The desired output format + + + + To be implemented by overriding classes. Create the transform object, set up its input and output types, + and configure any custom properties in here + + An object implementing IMFTrasform + + + + Disposes this MediaFoundation transform + + + + + Disposes this Media Foundation Transform + + + + + Destructor + + + + + The output WaveFormat of this Media Foundation Transform + + + + + Reads data out of the source, passing it through the transform + + Output buffer + Offset within buffer to write to + Desired byte count + Number of bytes read + + + + Attempts to read from the transform + Some useful info here: + http://msdn.microsoft.com/en-gb/library/windows/desktop/aa965264%28v=vs.85%29.aspx#process_data + + + + + + Indicate that the source has been repositioned and completely drain out the transforms buffers + + + + + Media Foundation Transform Categories + + + + + MFT_CATEGORY_VIDEO_DECODER + + + + + MFT_CATEGORY_VIDEO_ENCODER + + + + + MFT_CATEGORY_VIDEO_EFFECT + + + + + MFT_CATEGORY_MULTIPLEXER + + + + + MFT_CATEGORY_DEMULTIPLEXER + + + + + MFT_CATEGORY_AUDIO_DECODER + + + + + MFT_CATEGORY_AUDIO_ENCODER + + + + + MFT_CATEGORY_AUDIO_EFFECT + + + + + MFT_CATEGORY_VIDEO_PROCESSOR + + + + + MFT_CATEGORY_OTHER + + + + + Media Type helper class, simplifying working with IMFMediaType + (will probably change in the future, to inherit from an attributes class) + Currently does not release the COM object, so you must do that yourself + + + + + Wraps an existing IMFMediaType object + + The IMFMediaType object + + + + Creates and wraps a new IMFMediaType object + + + + + Creates and wraps a new IMFMediaType object based on a WaveFormat + + WaveFormat + + + + Tries to get a UINT32 value, returning a default value if it doesn't exist + + Attribute key + Default value + Value or default if key doesn't exist + + + + The Sample Rate (valid for audio media types) + + + + + The number of Channels (valid for audio media types) + + + + + The number of bits per sample (n.b. not always valid for compressed audio types) + + + + + The average bytes per second (valid for audio media types) + + + + + The Media Subtype. For audio, is a value from the AudioSubtypes class + + + + + The Major type, e.g. audio or video (from the MediaTypes class) + + + + + Access to the actual IMFMediaType object + Use to pass to MF APIs or Marshal.ReleaseComObject when you are finished with it + + + + + Major Media Types + http://msdn.microsoft.com/en-us/library/windows/desktop/aa367377%28v=vs.85%29.aspx + + + + + Default + + + + + Audio + + + + + Video + + + + + Protected Media + + + + + Synchronized Accessible Media Interchange (SAMI) captions. + + + + + Script stream + + + + + Still image stream. + + + + + HTML stream. + + + + + Binary stream. + + + + + A stream that contains data files. + + + + + Contains information about an input stream on a Media Foundation transform (MFT) + + + + + Maximum amount of time between an input sample and the corresponding output sample, in 100-nanosecond units. + + + + + Bitwise OR of zero or more flags from the _MFT_INPUT_STREAM_INFO_FLAGS enumeration. + + + + + The minimum size of each input buffer, in bytes. + + + + + Maximum amount of input data, in bytes, that the MFT holds to perform lookahead. + + + + + The memory alignment required for input buffers. If the MFT does not require a specific alignment, the value is zero. + + + + + Defines messages for a Media Foundation transform (MFT). + + + + + Requests the MFT to flush all stored data. + + + + + Requests the MFT to drain any stored data. + + + + + Sets or clears the Direct3D Device Manager for DirectX Video Accereration (DXVA). + + + + + Drop samples - requires Windows 7 + + + + + Command Tick - requires Windows 8 + + + + + Notifies the MFT that streaming is about to begin. + + + + + Notifies the MFT that streaming is about to end. + + + + + Notifies the MFT that an input stream has ended. + + + + + Notifies the MFT that the first sample is about to be processed. + + + + + Marks a point in the stream. This message applies only to asynchronous MFTs. Requires Windows 7 + + + + + Contains information about an output buffer for a Media Foundation transform. + + + + + Output stream identifier. + + + + + Pointer to the IMFSample interface. + + + + + Before calling ProcessOutput, set this member to zero. + + + + + Before calling ProcessOutput, set this member to NULL. + + + + + Contains information about an output stream on a Media Foundation transform (MFT). + + + + + Bitwise OR of zero or more flags from the _MFT_OUTPUT_STREAM_INFO_FLAGS enumeration. + + + + + Minimum size of each output buffer, in bytes. + + + + + The memory alignment required for output buffers. + + + + + Contains media type information for registering a Media Foundation transform (MFT). + + + + + The major media type. + + + + + The Media Subtype + + + + + Contains statistics about the performance of the sink writer. + + + + + The size of the structure, in bytes. + + + + + The time stamp of the most recent sample given to the sink writer. + + + + + The time stamp of the most recent sample to be encoded. + + + + + The time stamp of the most recent sample given to the media sink. + + + + + The time stamp of the most recent stream tick. + + + + + The system time of the most recent sample request from the media sink. + + + + + The number of samples received. + + + + + The number of samples encoded. + + + + + The number of samples given to the media sink. + + + + + The number of stream ticks received. + + + + + The amount of data, in bytes, currently waiting to be processed. + + + + + The total amount of data, in bytes, that has been sent to the media sink. + + + + + The number of pending sample requests. + + + + + The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer. + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink. + + + + + Contains flags for registering and enumeration Media Foundation transforms (MFTs). + + + + + None + + + + + The MFT performs synchronous data processing in software. + + + + + The MFT performs asynchronous data processing in software. + + + + + The MFT performs hardware-based data processing, using either the AVStream driver or a GPU-based proxy MFT. + + + + + The MFT that must be unlocked by the application before use. + + + + + For enumeration, include MFTs that were registered in the caller's process. + + + + + The MFT is optimized for transcoding rather than playback. + + + + + For enumeration, sort and filter the results. + + + + + Bitwise OR of all the flags, excluding MFT_ENUM_FLAG_SORTANDFILTER. + + + + + Indicates the status of an input stream on a Media Foundation transform (MFT). + + + + + None + + + + + The input stream can receive more data at this time. + + + + + Describes an input stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of input data must contain complete, unbroken units of data. + + + + + Each media sample that the client provides as input must contain exactly one unit of data, as defined for the MFT_INPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All input samples must be the same size. + + + + + MTF Input Stream Holds buffers + + + + + The MFT does not hold input samples after the IMFTransform::ProcessInput method returns. + + + + + This input stream can be removed by calling IMFTransform::DeleteInputStream. + + + + + This input stream is optional. + + + + + The MFT can perform in-place processing. + + + + + Defines flags for the IMFTransform::ProcessOutput method. + + + + + None + + + + + The MFT can still generate output from this stream without receiving any more input. + + + + + The format has changed on this output stream, or there is a new preferred format for this stream. + + + + + The MFT has removed this output stream. + + + + + There is no sample ready for this stream. + + + + + Indicates whether a Media Foundation transform (MFT) can produce output data. + + + + + None + + + + + There is a sample available for at least one output stream. + + + + + Describes an output stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of output data from the MFT contains complete, unbroken units of data. + + + + + Each output sample contains exactly one unit of data, as defined for the MFT_OUTPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All output samples are the same size. + + + + + The MFT can discard the output data from this output stream, if requested by the client. + + + + + This output stream is optional. + + + + + The MFT provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. + + + + + The MFT can either provide output samples for this stream or it can use samples that the client allocates. + + + + + The MFT does not require the client to process the output for this stream. + + + + + The MFT might remove this output stream during streaming. + + + + + Defines flags for processing output samples in a Media Foundation transform (MFT). + + + + + None + + + + + Do not produce output for streams in which the pSample member of the MFT_OUTPUT_DATA_BUFFER structure is NULL. + + + + + Regenerates the last output sample. + + + + + Process Output Status flags + + + + + None + + + + + The Media Foundation transform (MFT) has created one or more new output streams. + + + + + Defines flags for the setting or testing the media type on a Media Foundation transform (MFT). + + + + + None + + + + + Test the proposed media type, but do not set it. + + + + + Represents a MIDI Channel AfterTouch Event. + + + + + Creates a new ChannelAfterTouchEvent from raw MIDI data + + A binary reader + + + + Creates a new Channel After-Touch Event + + Absolute time + Channel + After-touch pressure + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The aftertouch pressure value + + + + + Represents a MIDI control change event + + + + + Reads a control change event from a MIDI stream + + Binary reader on the MIDI stream + + + + Creates a control change event + + Time + MIDI Channel Number + The MIDI Controller + Controller value + + + + Describes this control change event + + A string describing this event + + + + + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The controller number + + + + + The controller value + + + + + Represents a MIDI key signature event event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new Key signature event with the specified data + + + + + Creates a deep clone of this MIDI event. + + + + + Number of sharps or flats + + + + + Major or Minor key + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event + + + + + Gets the type of this meta event + + + + + Empty constructor + + + + + Custom constructor for use by derived types, who will manage the data themselves + + Meta event type + Meta data length + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Reads a meta-event from a stream + + A binary reader based on the stream of MIDI data + A new MetaEvent object + + + + Describes this meta event + + + + + + + + + + MIDI MetaEvent Type + + + + Track sequence number + + + Text event + + + Copyright + + + Sequence track name + + + Track instrument name + + + Lyric + + + Marker + + + Cue point + + + Program (patch) name + + + Device (port) name + + + MIDI Channel (not official?) + + + MIDI Port (not official?) + + + End track + + + Set tempo + + + SMPTE offset + + + Time signature + + + Key signature + + + Sequencer specific + + + + MIDI command codes + + + + Note Off + + + Note On + + + Key After-touch + + + Control change + + + Patch change + + + Channel after-touch + + + Pitch wheel change + + + Sysex message + + + Eox (comes at end of a sysex message) + + + Timing clock (used when synchronization is required) + + + Start sequence + + + Continue sequence + + + Stop sequence + + + Auto-Sensing + + + Meta-event + + + + MidiController enumeration + http://www.midi.org/techspecs/midimessages.php#3 + + + + Bank Select (MSB) + + + Modulation (MSB) + + + Breath Controller + + + Foot controller (MSB) + + + Main volume + + + Pan + + + Expression + + + Bank Select LSB + + + Sustain + + + Portamento On/Off + + + Sostenuto On/Off + + + Soft Pedal On/Off + + + Legato Footswitch + + + Reset all controllers + + + All notes off + + + + Represents an individual MIDI event + + + + The MIDI command code + + + + Creates a MidiEvent from a raw message received using + the MME MIDI In APIs + + The short MIDI message + A new MIDI Event + + + + Constructs a MidiEvent from a BinaryStream + + The binary stream of MIDI data + The previous MIDI event (pass null for first event) + A new MidiEvent + + + + Converts this MIDI event to a short message (32 bit integer) that + can be sent by the Windows MIDI out short message APIs + Cannot be implemented for all MIDI messages + + A short message + + + + Default constructor + + + + + Creates a MIDI event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + + + + Creates a deep clone of this MIDI event. + + + + + The MIDI Channel Number for this event (1-16) + + + + + The Delta time for this event + + + + + The absolute time for this event + + + + + The command code for this event + + + + + Whether this is a note off event + + + + + Whether this is a note on event + + + + + Determines if this is an end track event + + + + + Displays a summary of the MIDI event + + A string containing a brief description of this MIDI event + + + + Utility function that can read a variable length integer from a binary stream + + The binary stream + The integer read + + + + Writes a variable length integer to a binary stream + + Binary stream + The value to write + + + + Exports this MIDI event's data + Overriden in derived classes, but they should call this version + + Absolute time used to calculate delta. + Is updated ready for the next delta calculation + Stream to write to + + + + A helper class to manage collection of MIDI events + It has the ability to organise them in tracks + + + + + Creates a new Midi Event collection + + Initial file type + Delta Ticks Per Quarter Note + + + + The number of tracks + + + + + The absolute time that should be considered as time zero + Not directly used here, but useful for timeshifting applications + + + + + The number of ticks per quarter note + + + + + Gets events on a specified track + + Track number + The list of events + + + + Gets events on a specific track + + Track number + The list of events + + + + Adds a new track + + The new track event list + + + + Adds a new track + + Initial events to add to the new track + The new track event list + + + + Removes a track + + Track number to remove + + + + Clears all events + + + + + The MIDI file type + + + + + Adds an event to the appropriate track depending on file type + + The event to be added + The original (or desired) track number + When adding events in type 0 mode, the originalTrack parameter + is ignored. If in type 1 mode, it will use the original track number to + store the new events. If the original track was 0 and this is a channel based + event, it will create new tracks if necessary and put it on the track corresponding + to its channel number + + + + Sorts, removes empty tracks and adds end track markers + + + + + Gets an enumerator for the lists of track events + + + + + Gets an enumerator for the lists of track events + + + + + Utility class for comparing MidiEvent objects + + + + + Compares two MidiEvents + Sorts by time, with EndTrack always sorted to the end + + + + + Class able to read a MIDI file + + + + + Opens a MIDI file for reading + + Name of MIDI file + + + + MIDI File format + + + + + Opens a MIDI file for reading + + Name of MIDI file + If true will error on non-paired note events + + + + Opens a MIDI file stream for reading + + The input stream containing a MIDI file + If true will error on non-paired note events + + + + The collection of events in this MIDI file + + + + + Number of tracks in this MIDI file + + + + + Delta Ticks Per Quarter Note + + + + + Describes the MIDI file + + A string describing the MIDI file and its events + + + + Exports a MIDI file + + Filename to export to + Events to export + + + + Represents a MIDI in device + + + + + Called when a MIDI message is received + + + + + An invalid MIDI message + + + + + Gets the number of MIDI input devices available in the system + + + + + Opens a specified MIDI in device + + The device number + + + + Closes this MIDI in device + + + + + Closes this MIDI in device + + + + + Start the MIDI in device + + + + + Stop the MIDI in device + + + + + Reset the MIDI in device + + + + + Gets the MIDI in device info + + + + + Closes the MIDI out device + + True if called from Dispose + + + + Cleanup + + + + + MIDI In Device Capabilities + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name + + + + + Support - Reserved + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + MIDI In Message Information + + + + + Create a new MIDI In Message EventArgs + + + + + + + The Raw message received from the MIDI In API + + + + + The raw message interpreted as a MidiEvent + + + + + The timestamp in milliseconds for this message + + + + + MIM_OPEN + + + + + MIM_CLOSE + + + + + MIM_DATA + + + + + MIM_LONGDATA + + + + + MIM_ERROR + + + + + MIM_LONGERROR + + + + + MIM_MOREDATA + + + + + MOM_OPEN + + + + + MOM_CLOSE + + + + + MOM_DONE + + + + + Represents a MIDI message + + + + + Creates a new MIDI message + + Status + Data parameter 1 + Data parameter 2 + + + + Creates a new MIDI message from a raw message + + A packed MIDI message from an MMIO function + + + + Creates a Note On message + + Note number (0 to 127) + Volume (0 to 127) + MIDI channel (1 to 16) + A new MidiMessage object + + + + Creates a Note Off message + + Note number + Volume + MIDI channel (1-16) + A new MidiMessage object + + + + Creates a patch change message + + The patch number + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Creates a Control Change message + + The controller number to change + The value to set the controller to + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Returns the raw MIDI message data + + + + + Represents a MIDI out device + + + + + Gets the number of MIDI devices available in the system + + + + + Gets the MIDI Out device info + + + + + Opens a specified MIDI out device + + The device number + + + + Closes this MIDI out device + + + + + Closes this MIDI out device + + + + + Gets or sets the volume for this MIDI out device + + + + + Resets the MIDI out device + + + + + Sends a MIDI out message + + Message + Parameter 1 + Parameter 2 + + + + Sends a MIDI message to the MIDI out device + + The message to send + + + + Closes the MIDI out device + + True if called from Dispose + + + + Send a long message, for example sysex. + + The bytes to send. + + + + Cleanup + + + + + class representing the capabilities of a MIDI out device + MIDIOUTCAPS: http://msdn.microsoft.com/en-us/library/dd798467%28VS.85%29.aspx + + + + + MIDICAPS_VOLUME + + + + + separate left-right volume control + MIDICAPS_LRVOLUME + + + + + MIDICAPS_CACHE + + + + + MIDICAPS_STREAM + driver supports midiStreamOut directly + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + Returns the number of supported voices + + + + + Gets the polyphony of the device + + + + + Returns true if the device supports all channels + + + + + Queries whether a particular channel is supported + + Channel number to test + True if the channel is supported + + + + Returns true if the device supports patch caching + + + + + Returns true if the device supports separate left and right volume + + + + + Returns true if the device supports MIDI stream out + + + + + Returns true if the device supports volume control + + + + + Returns the type of technology used by this MIDI out device + + + + + Represents the different types of technology used by a MIDI out device + + from mmsystem.h + + + The device is a MIDI port + + + The device is a MIDI synth + + + The device is a square wave synth + + + The device is an FM synth + + + The device is a MIDI mapper + + + The device is a WaveTable synth + + + The device is a software synth + + + + Represents a note MIDI event + + + + + Reads a NoteEvent from a stream of MIDI data + + Binary Reader for the stream + + + + Creates a MIDI Note Event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + MIDI Note Number + MIDI Note Velocity + + + + + + + + + The MIDI note number + + + + + The note velocity + + + + + The note name + + + + + Describes the Note Event + + Note event as a string + + + + + + + + + Represents a MIDI note on event + + + + + Reads a new Note On event from a stream of MIDI data + + Binary reader on the MIDI data stream + + + + Creates a NoteOn event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI note number + MIDI note velocity + MIDI note duration + + + + Creates a deep clone of this MIDI event. + + + + + The associated Note off event + + + + + Get or set the Note Number, updating the off event at the same time + + + + + Get or set the channel, updating the off event at the same time + + + + + The duration of this note + + + There must be a note off event + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI patch change event + + + + + Gets the default MIDI instrument names + + + + + Reads a new patch change event from a MIDI stream + + Binary reader for the MIDI stream + + + + Creates a new patch change event + + Time of the event + Channel number + Patch number + + + + The Patch Number + + + + + Describes this patch change event + + String describing the patch change event + + + + Gets as a short message for sending with the midiOutShortMsg API + + short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI pitch wheel change event + + + + + Reads a pitch wheel change event from a MIDI stream + + The MIDI stream to read from + + + + Creates a new pitch wheel change event + + Absolute event time + Channel + Pitch wheel value + + + + Describes this pitch wheel change event + + String describing this pitch wheel change event + + + + Pitch Wheel Value 0 is minimum, 0x2000 (8192) is default, 0x3FFF (16383) is maximum + + + + + Gets a short message + + Integer to sent as short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event with raw data + + + + + Raw data contained in the meta event + + + + + Creates a meta event with raw data + + + + + Creates a deep clone of this MIDI event. + + + + + Describes this meta event + + + + + + + + + + Represents a Sequencer Specific event + + + + + Reads a new sequencer specific event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new Sequencer Specific event + + The sequencer specific data + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this sequencer specific + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + SMPTE Offset Event + + + + + Creates a new time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a deep clone of this MIDI event. + + + + + Hours + + + + + Minutes + + + + + Seconds + + + + + Frames + + + + + SubFrames + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI sysex message + + + + + Reads a sysex message from a MIDI stream + + Stream of MIDI data + a new sysex message + + + + Creates a deep clone of this MIDI event. + + + + + Describes this sysex message + + A string describing the sysex message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI tempo event + + + + + Reads a new tempo event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new tempo event with specified settings + + Microseconds per quarter note + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Describes this tempo event + + String describing the tempo event + + + + Microseconds per quarter note + + + + + Tempo + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI text event + + + + + Reads a new text event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TextEvent + + The text in this type + MetaEvent type (must be one that is + associated with text data) + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this text event + + + + + The raw contents of this text event + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TimeSignatureEvent + + Time at which to create this event + Numerator + Denominator + Ticks in Metronome Click + No of 32nd Notes in Quarter Click + + + + Creates a deep clone of this MIDI event. + + + + + Numerator (number of beats in a bar) + + + + + Denominator (Beat unit), + 1 means 2, 2 means 4 (crochet), 3 means 8 (quaver), 4 means 16 and 5 means 32 + + + + + Ticks in a metronome click + + + + + Number of 32nd notes in a quarter note + + + + + The time signature + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI track sequence number event event + + + + + Creates a new track sequence number event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a deep clone of this MIDI event. + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Boolean mixer control + + + + + Gets the details for this control + + memory pointer + + + + The current value of the control + + + + + Custom Mixer control + + + + + Get the data for this custom control + + pointer to memory to receive data + + + + List text mixer control + + + + + Get the details for this control + + Memory location to read to + + + Represents a Windows mixer device + + + The number of mixer devices available + + + Connects to the specified mixer + The index of the mixer to use. + This should be between zero and NumberOfDevices - 1 + + + The number of destinations this mixer supports + + + The name of this mixer device + + + The manufacturer code for this mixer device + + + The product identifier code for this mixer device + + + Retrieve the specified MixerDestination object + The ID of the destination to use. + Should be between 0 and DestinationCount - 1 + + + + A way to enumerate the destinations + + + + + A way to enumerate all available devices + + + + + Represents a mixer control + + + + + Mixer Handle + + + + + Number of Channels + + + + + Mixer Handle Type + + + + + Gets all the mixer controls + + Mixer Handle + Mixer Line + Mixer Handle Type + + + + + Gets a specified Mixer Control + + Mixer Handle + Line ID + Control ID + Number of Channels + Flags to use (indicates the meaning of mixerHandle) + + + + + Gets the control details + + + + + Gets the control details + + + + + + Mixer control name + + + + + Mixer control type + + + + + Returns true if this is a boolean control + + Control type + + + + Is this a boolean control + + + + + Determines whether a specified mixer control type is a list text control + + + + + True if this is a list text control + + + + + True if this is a signed control + + + + + True if this is an unsigned control + + + + + True if this is a custom control + + + + + String representation for debug purposes + + + + + Mixer control types + + + + Custom + + + Boolean meter + + + Signed meter + + + Peak meter + + + Unsigned meter + + + Boolean + + + On Off + + + Mute + + + Mono + + + Loudness + + + Stereo Enhance + + + Button + + + Decibels + + + Signed + + + Unsigned + + + Percent + + + Slider + + + Pan + + + Q-sound pan + + + Fader + + + Volume + + + Bass + + + Treble + + + Equaliser + + + Single Select + + + Mux + + + Multiple select + + + Mixer + + + Micro time + + + Milli time + + + + Mixer Interop Flags + + + + + MIXER_OBJECTF_HANDLE = 0x80000000; + + + + + MIXER_OBJECTF_MIXER = 0x00000000; + + + + + MIXER_OBJECTF_HMIXER + + + + + MIXER_OBJECTF_WAVEOUT + + + + + MIXER_OBJECTF_HWAVEOUT + + + + + MIXER_OBJECTF_WAVEIN + + + + + MIXER_OBJECTF_HWAVEIN + + + + + MIXER_OBJECTF_MIDIOUT + + + + + MIXER_OBJECTF_HMIDIOUT + + + + + MIXER_OBJECTF_MIDIIN + + + + + MIXER_OBJECTF_HMIDIIN + + + + + MIXER_OBJECTF_AUX + + + + + MIXER_GETCONTROLDETAILSF_VALUE = 0x00000000; + MIXER_SETCONTROLDETAILSF_VALUE = 0x00000000; + + + + + MIXER_GETCONTROLDETAILSF_LISTTEXT = 0x00000001; + MIXER_SETCONTROLDETAILSF_LISTTEXT = 0x00000001; + + + + + MIXER_GETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_SETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_GETLINECONTROLSF_QUERYMASK = 0x0000000F; + + + + + MIXER_GETLINECONTROLSF_ALL = 0x00000000; + + + + + MIXER_GETLINECONTROLSF_ONEBYID = 0x00000001; + + + + + MIXER_GETLINECONTROLSF_ONEBYTYPE = 0x00000002; + + + + + MIXER_GETLINEINFOF_DESTINATION = 0x00000000; + + + + + MIXER_GETLINEINFOF_SOURCE = 0x00000001; + + + + + MIXER_GETLINEINFOF_LINEID = 0x00000002; + + + + + MIXER_GETLINEINFOF_COMPONENTTYPE = 0x00000003; + + + + + MIXER_GETLINEINFOF_TARGETTYPE = 0x00000004; + + + + + MIXER_GETLINEINFOF_QUERYMASK = 0x0000000F; + + + + + Mixer Line Flags + + + + + Audio line is active. An active line indicates that a signal is probably passing + through the line. + + + + + Audio line is disconnected. A disconnected line's associated controls can still be + modified, but the changes have no effect until the line is connected. + + + + + Audio line is an audio source line associated with a single audio destination line. + If this flag is not set, this line is an audio destination line associated with zero + or more audio source lines. + + + + + BOUNDS structure + + + + + dwMinimum / lMinimum / reserved 0 + + + + + dwMaximum / lMaximum / reserved 1 + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + METRICS structure + + + + + cSteps / reserved[0] + + + + + cbCustomData / reserved[1], number of bytes for control details + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + MIXERCONTROL struct + http://msdn.microsoft.com/en-us/library/dd757293%28VS.85%29.aspx + + + + + Represents a mixer line (source or destination) + + + + + Creates a new mixer destination + + Mixer Handle + Destination Index + Mixer Handle Type + + + + Creates a new Mixer Source For a Specified Source + + Mixer Handle + Destination Index + Source Index + Flag indicating the meaning of mixerHandle + + + + Creates a new Mixer Source + + Wave In Device + + + + Mixer Line Name + + + + + Mixer Line short name + + + + + The line ID + + + + + Component Type + + + + + Mixer destination type description + + + + + Number of channels + + + + + Number of sources + + + + + Number of controls + + + + + Is this destination active + + + + + Is this destination disconnected + + + + + Is this destination a source + + + + + Gets the specified source + + + + + Enumerator for the controls on this Mixer Limne + + + + + Enumerator for the sources on this Mixer Line + + + + + The name of the target output device + + + + + Describes this Mixer Line (for diagnostic purposes) + + + + + Mixer Line Component type enumeration + + + + + Audio line is a destination that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_DST_UNDEFINED + + + + + Audio line is a digital destination (for example, digital input to a DAT or CD audio device). + MIXERLINE_COMPONENTTYPE_DST_DIGITAL + + + + + Audio line is a line level destination (for example, line level input from a CD audio device) that will be the final recording source for the analog-to-digital converter (ADC). Because most audio cards for personal computers provide some sort of gain for the recording audio source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_DST_WAVEIN type. + MIXERLINE_COMPONENTTYPE_DST_LINE + + + + + Audio line is a destination used for a monitor. + MIXERLINE_COMPONENTTYPE_DST_MONITOR + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive speakers. This is the typical component type for the audio output of audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_SPEAKERS + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive headphones. Most audio cards use the same audio destination line for speakers and headphones, in which case the mixer device simply uses the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS type. + MIXERLINE_COMPONENTTYPE_DST_HEADPHONES + + + + + Audio line is a destination that will be routed to a telephone line. + MIXERLINE_COMPONENTTYPE_DST_TELEPHONE + + + + + Audio line is a destination that will be the final recording source for the waveform-audio input (ADC). This line typically provides some sort of gain or attenuation. This is the typical component type for the recording line of most audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_WAVEIN + + + + + Audio line is a destination that will be the final recording source for voice input. This component type is exactly like MIXERLINE_COMPONENTTYPE_DST_WAVEIN but is intended specifically for settings used during voice recording/recognition. Support for this line is optional for a mixer device. Many mixer devices provide only MIXERLINE_COMPONENTTYPE_DST_WAVEIN. + MIXERLINE_COMPONENTTYPE_DST_VOICEIN + + + + + Audio line is a source that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED + + + + + Audio line is a digital source (for example, digital output from a DAT or audio CD). + MIXERLINE_COMPONENTTYPE_SRC_DIGITAL + + + + + Audio line is a line-level source (for example, line-level input from an external stereo) that can be used as an optional recording source. Because most audio cards for personal computers provide some sort of gain for the recording source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY type. + MIXERLINE_COMPONENTTYPE_SRC_LINE + + + + + Audio line is a microphone recording source. Most audio cards for personal computers provide at least two types of recording sources: an auxiliary audio line and microphone input. A microphone audio line typically provides some sort of gain. Audio cards that use a single input for use with a microphone or auxiliary audio line should use the MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE component type. + MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE + + + + + Audio line is a source originating from the output of an internal synthesizer. Most audio cards for personal computers provide some sort of MIDI synthesizer (for example, an Adlib®-compatible or OPL/3 FM synthesizer). + MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER + + + + + Audio line is a source originating from the output of an internal audio CD. This component type is provided for audio cards that provide an audio source line intended to be connected to an audio CD (or CD-ROM playing an audio CD). + MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC + + + + + Audio line is a source originating from an incoming telephone line. + MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE + + + + + Audio line is a source originating from personal computer speaker. Several audio cards for personal computers provide the ability to mix what would typically be played on the internal speaker with the output of an audio card. Some audio cards support the ability to use this output as a recording source. + MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER + + + + + Audio line is a source originating from the waveform-audio output digital-to-analog converter (DAC). Most audio cards for personal computers provide this component type as a source to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination. Some cards also allow this source to be routed to the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT + + + + + Audio line is a source originating from the auxiliary audio line. This line type is intended as a source with gain or attenuation that can be routed to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination and/or recorded from the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY + + + + + Audio line is an analog source (for example, analog output from a video-cassette tape). + MIXERLINE_COMPONENTTYPE_SRC_ANALOG + + + + + Represents a signed mixer control + + + + + Gets details for this contrl + + + + + The value of the control + + + + + Minimum value for this control + + + + + Maximum value for this control + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + + Represents an unsigned mixer control + + + + + Gets the details for this control + + + + + The control value + + + + + The control's minimum value + + + + + The control's maximum value + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + Helper methods for working with audio buffers + + + + + Ensures the buffer is big enough + + + + + + + + Ensures the buffer is big enough + + + + + + + + these will become extension methods once we move to .NET 3.5 + + + + + Checks if the buffer passed in is entirely full of nulls + + + + + Converts to a string containing the buffer described in hex + + + + + Decodes the buffer using the specified encoding, stopping at the first null + + + + + Concatenates the given arrays into a single array. + + The arrays to concatenate + The concatenated resulting array. + + + + An encoding for use with file types that have one byte per character + + + + + The one and only instance of this class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chunk Identifier helpers + + + + + Chunk identifier to Int32 (replaces mmioStringToFOURCC) + + four character chunk identifier + Chunk identifier as int 32 + + + + A very basic circular buffer implementation + + + + + Create a new circular buffer + + Max buffer size in bytes + + + + Write data to the buffer + + Data to write + Offset into data + Number of bytes to write + number of bytes written + + + + Read from the buffer + + Buffer to read into + Offset into read buffer + Bytes to read + Number of bytes actually read + + + + Maximum length of this circular buffer + + + + + Number of bytes currently stored in the circular buffer + + + + + Resets the buffer + + + + + Advances the buffer, discarding bytes + + Bytes to advance + + + + A util class for conversions + + + + + linear to dB conversion + + linear value + decibel value + + + + dB to linear conversion + + decibel value + linear value + + + + Allows us to add descriptions to interop members + + + + + The description + + + + + Field description + + + + + String representation + + + + + + Helper to get descriptions + + + + + Describes the Guid by looking for a FieldDescription attribute on the specified class + + + + + HResult + + + + + S_OK + + + + + S_FALSE + + + + + E_INVALIDARG (from winerror.h) + + + + + MAKE_HRESULT macro + + + + + Helper to deal with the fact that in Win Store apps, + the HResult property name has changed + + COM Exception + The HResult + + + + Methods for converting between IEEE 80-bit extended double precision + and standard C# double precision. + + + + + Converts a C# double precision number to an 80-bit + IEEE extended double precision number (occupying 10 bytes). + + The double precision number to convert to IEEE extended. + An array of 10 bytes containing the IEEE extended number. + + + + Converts an IEEE 80-bit extended precision number to a + C# double precision number. + + The 80-bit IEEE extended number (as an array of 10 bytes). + A C# double precision number that is a close representation of the IEEE extended number. + + + + Pass-through stream that ignores Dispose + Useful for dealing with MemoryStreams that you want to re-use + + + + + The source stream all other methods fall through to + + + + + If true the Dispose will be ignored, if false, will pass through to the SourceStream + Set to true by default + + + + + Creates a new IgnoreDisposeStream + + The source stream + + + + Can Read + + + + + Can Seek + + + + + Can write to the underlying stream + + + + + Flushes the underlying stream + + + + + Gets the length of the underlying stream + + + + + Gets or sets the position of the underlying stream + + + + + Reads from the underlying stream + + + + + Seeks on the underlying stream + + + + + Sets the length of the underlying stream + + + + + Writes to the underlying stream + + + + + Dispose - by default (IgnoreDispose = true) will do nothing, + leaving the underlying stream undisposed + + + + + Support for Marshal Methods in both UWP and .NET 3.5 + + + + + SizeOf a structure + + + + + Offset of a field in a structure + + + + + Pointer to Structure + + + + + In-place and stable implementation of MergeSort + + + + + MergeSort a list of comparable items + + + + + MergeSort a list + + + + + General purpose native methods for internal NAudio use + + + + + A thread-safe Progress Log Control + + + + + Creates a new progress log control + + + + + The contents of the log as text + + + + + Log a message + + + + + Clear the log + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + WavePosition extension methods + + + + + Get Position as timespan + + + + + Manufacturer codes from mmreg.h + + + + Microsoft Corporation + + + Creative Labs, Inc + + + Media Vision, Inc. + + + Fujitsu Corp. + + + Artisoft, Inc. + + + Turtle Beach, Inc. + + + IBM Corporation + + + Vocaltec LTD. + + + Roland + + + DSP Solutions, Inc. + + + NEC + + + ATI + + + Wang Laboratories, Inc + + + Tandy Corporation + + + Voyetra + + + Antex Electronics Corporation + + + ICL Personal Systems + + + Intel Corporation + + + Advanced Gravis + + + Video Associates Labs, Inc. + + + InterActive Inc + + + Yamaha Corporation of America + + + Everex Systems, Inc + + + Echo Speech Corporation + + + Sierra Semiconductor Corp + + + Computer Aided Technologies + + + APPS Software International + + + DSP Group, Inc + + + microEngineering Labs + + + Computer Friends, Inc. + + + ESS Technology + + + Audio, Inc. + + + Motorola, Inc. + + + Canopus, co., Ltd. + + + Seiko Epson Corporation + + + Truevision + + + Aztech Labs, Inc. + + + Videologic + + + SCALACS + + + Korg Inc. + + + Audio Processing Technology + + + Integrated Circuit Systems, Inc. + + + Iterated Systems, Inc. + + + Metheus + + + Logitech, Inc. + + + Winnov, Inc. + + + NCR Corporation + + + EXAN + + + AST Research Inc. + + + Willow Pond Corporation + + + Sonic Foundry + + + Vitec Multimedia + + + MOSCOM Corporation + + + Silicon Soft, Inc. + + + Supermac + + + Audio Processing Technology + + + Speech Compression + + + Ahead, Inc. + + + Dolby Laboratories + + + OKI + + + AuraVision Corporation + + + Ing C. Olivetti & C., S.p.A. + + + I/O Magic Corporation + + + Matsushita Electric Industrial Co., LTD. + + + Control Resources Limited + + + Xebec Multimedia Solutions Limited + + + New Media Corporation + + + Natural MicroSystems + + + Lyrrus Inc. + + + Compusic + + + OPTi Computers Inc. + + + Adlib Accessories Inc. + + + Compaq Computer Corp. + + + Dialogic Corporation + + + InSoft, Inc. + + + M.P. Technologies, Inc. + + + Weitek + + + Lernout & Hauspie + + + Quanta Computer Inc. + + + Apple Computer, Inc. + + + Digital Equipment Corporation + + + Mark of the Unicorn + + + Workbit Corporation + + + Ositech Communications Inc. + + + miro Computer Products AG + + + Cirrus Logic + + + ISOLUTION B.V. + + + Horizons Technology, Inc + + + Computer Concepts Ltd + + + Voice Technologies Group, Inc. + + + Radius + + + Rockwell International + + + Co. XYZ for testing + + + Opcode Systems + + + Voxware Inc + + + Northern Telecom Limited + + + APICOM + + + Grande Software + + + ADDX + + + Wildcat Canyon Software + + + Rhetorex Inc + + + Brooktree Corporation + + + ENSONIQ Corporation + + + FAST Multimedia AG + + + NVidia Corporation + + + OKSORI Co., Ltd. + + + DiAcoustics, Inc. + + + Gulbransen, Inc. + + + Kay Elemetrics, Inc. + + + Crystal Semiconductor Corporation + + + Splash Studios + + + Quarterdeck Corporation + + + TDK Corporation + + + Digital Audio Labs, Inc. + + + Seer Systems, Inc. + + + PictureTel Corporation + + + AT&T Microelectronics + + + Osprey Technologies, Inc. + + + Mediatrix Peripherals + + + SounDesignS M.C.S. Ltd. + + + A.L. Digital Ltd. + + + Spectrum Signal Processing, Inc. + + + Electronic Courseware Systems, Inc. + + + AMD + + + Core Dynamics + + + CANAM Computers + + + Softsound, Ltd. + + + Norris Communications, Inc. + + + Danka Data Devices + + + EuPhonics + + + Precept Software, Inc. + + + Crystal Net Corporation + + + Chromatic Research, Inc + + + Voice Information Systems, Inc + + + Vienna Systems + + + Connectix Corporation + + + Gadget Labs LLC + + + Frontier Design Group LLC + + + Viona Development GmbH + + + Casio Computer Co., LTD + + + Diamond Multimedia + + + S3 + + + Fraunhofer + + + + Summary description for MmException. + + + + + Creates a new MmException + + The result returned by the Windows API call + The name of the Windows API that failed + + + + Helper function to automatically raise an exception on failure + + The result of the API call + The API function name + + + + Returns the Windows API result + + + + + Windows multimedia error codes from mmsystem.h. + + + + no error, MMSYSERR_NOERROR + + + unspecified error, MMSYSERR_ERROR + + + device ID out of range, MMSYSERR_BADDEVICEID + + + driver failed enable, MMSYSERR_NOTENABLED + + + device already allocated, MMSYSERR_ALLOCATED + + + device handle is invalid, MMSYSERR_INVALHANDLE + + + no device driver present, MMSYSERR_NODRIVER + + + memory allocation error, MMSYSERR_NOMEM + + + function isn't supported, MMSYSERR_NOTSUPPORTED + + + error value out of range, MMSYSERR_BADERRNUM + + + invalid flag passed, MMSYSERR_INVALFLAG + + + invalid parameter passed, MMSYSERR_INVALPARAM + + + handle being used simultaneously on another thread (eg callback),MMSYSERR_HANDLEBUSY + + + specified alias not found, MMSYSERR_INVALIDALIAS + + + bad registry database, MMSYSERR_BADDB + + + registry key not found, MMSYSERR_KEYNOTFOUND + + + registry read error, MMSYSERR_READERROR + + + registry write error, MMSYSERR_WRITEERROR + + + registry delete error, MMSYSERR_DELETEERROR + + + registry value not found, MMSYSERR_VALNOTFOUND + + + driver does not call DriverCallback, MMSYSERR_NODRIVERCB + + + more data to be returned, MMSYSERR_MOREDATA + + + unsupported wave format, WAVERR_BADFORMAT + + + still something playing, WAVERR_STILLPLAYING + + + header not prepared, WAVERR_UNPREPARED + + + device is synchronous, WAVERR_SYNC + + + Conversion not possible (ACMERR_NOTPOSSIBLE) + + + Busy (ACMERR_BUSY) + + + Header Unprepared (ACMERR_UNPREPARED) + + + Cancelled (ACMERR_CANCELED) + + + invalid line (MIXERR_INVALLINE) + + + invalid control (MIXERR_INVALCONTROL) + + + invalid value (MIXERR_INVALVALUE) + + + diff --git a/packages/NAudio.1.10.0/lib/netcoreapp3.0/NAudio.dll b/packages/NAudio.1.10.0/lib/netcoreapp3.0/NAudio.dll new file mode 100644 index 0000000000000000000000000000000000000000..38dcd81fef6614818dc6fc7aee533ca8404d5fec GIT binary patch literal 510464 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
v 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
+?QNZz3z{NeZYD;vtLcL|&7bix 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 + a-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts an a-law encoded byte to a 16 bit linear sample + + a-law encoded byte + Linear sample + + + + A-law encoder + + + + + Encodes a single 16 bit sample to a-law + + 16 bit PCM sample + a-law encoded byte + + + + SpanDSP - a series of DSP components for telephony + + g722_decode.c - The ITU G.722 codec, decode part. + + Written by Steve Underwood <steveu@coppice.org> + + Copyright (C) 2005 Steve Underwood + Ported to C# by Mark Heath 2011 + + Despite my general liking of the GPL, I place my own contributions + to this code in the public domain for the benefit of all mankind - + even the slimy ones who might try to proprietize my work and use it + to my detriment. + + Based in part on a single channel G.722 codec which is: + Copyright (c) CMU 1993 + Computer Science, Speech Group + Chengxiang Lu and Alex Hauptmann + + + + + hard limits to 16 bit samples + + + + + Decodes a buffer of G722 + + Codec state + Output buffer (to contain decompressed PCM samples) + + Number of bytes in input G722 data to decode + Number of samples written into output buffer + + + + Encodes a buffer of G722 + + Codec state + Output buffer (to contain encoded G722) + PCM 16 bit samples to encode + Number of samples in the input buffer to encode + Number of encoded bytes written into output buffer + + + + Stores state to be used between calls to Encode or Decode + + + + + ITU Test Mode + TRUE if the operating in the special ITU test mode, with the band split filters disabled. + + + + + TRUE if the G.722 data is packed + + + + + 8kHz Sampling + TRUE if encode from 8k samples/second + + + + + Bits Per Sample + 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. + + + + + Signal history for the QMF (x) + + + + + Band + + + + + In bit buffer + + + + + Number of bits in InBuffer + + + + + Out bit buffer + + + + + Number of bits in OutBuffer + + + + + Creates a new instance of G722 Codec State for a + new encode or decode session + + Bitrate (typically 64000) + Special options + + + + Band data for G722 Codec + + + + s + + + sp + + + sz + + + r + + + a + + + ap + + + p + + + d + + + b + + + bp + + + sg + + + nb + + + det + + + + G722 Flags + + + + + None + + + + + Using a G722 sample rate of 8000 + + + + + Packed + + + + + mu-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts a mu-law encoded byte to a 16 bit linear sample + + mu-law encoded byte + Linear sample + + + + mu-law encoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + Encodes a single 16 bit sample to mu-law + + 16 bit PCM sample + mu-law encoded byte + + + + Audio Capture Client + + + + + Gets a pointer to the buffer + + Pointer to the buffer + + + + Gets a pointer to the buffer + + Number of frames to read + Buffer flags + Pointer to the buffer + + + + Gets the size of the next packet + + + + + Release buffer + + Number of frames written + + + + Release the COM object + + + + + Windows CoreAudio AudioClient + + + + + Retrieves the stream format that the audio engine uses for its internal processing of shared-mode streams. + Can be called before initialize + + + + + Initializes the Audio Client + + Share Mode + Stream Flags + Buffer Duration + Periodicity + Wave Format + Audio Session GUID (can be null) + + + + Retrieves the size (maximum capacity) of the audio buffer associated with the endpoint. (must initialize first) + + + + + Retrieves the maximum latency for the current stream and can be called any time after the stream has been initialized. + + + + + Retrieves the number of frames of padding in the endpoint buffer (must initialize first) + + + + + Retrieves the length of the periodic interval separating successive processing passes by the audio engine on the data in the endpoint buffer. + (can be called before initialize) + + + + + Gets the minimum device period + (can be called before initialize) + + + + + Returns the AudioStreamVolume service for this AudioClient. + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Gets the AudioClockClient service + + + + + Gets the AudioRenderClient service + + + + + Gets the AudioCaptureClient service + + + + + Determines whether if the specified output format is supported + + The share mode. + The desired format. + True if the format is supported + + + + Determines if the specified output format is supported in shared mode + + Share Mode + Desired Format + Output The closest match format. + True if the format is supported + + + + Starts the audio stream + + + + + Stops the audio stream. + + + + + Set the Event Handle for buffer synchro. + + The Wait Handle to setup + + + + Resets the audio stream + Reset is a control method that the client calls to reset a stopped audio stream. + Resetting the stream flushes all pending data and resets the audio clock stream + position to 0. This method fails if it is called on a stream that is not stopped + + + + + Dispose + + + + + Audio Client Buffer Flags + + + + + None + + + + + AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY + + + + + AUDCLNT_BUFFERFLAGS_SILENT + + + + + AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR + + + + + The AudioClientProperties structure is used to set the parameters that describe the properties of the client's audio stream. + + http://msdn.microsoft.com/en-us/library/windows/desktop/hh968105(v=vs.85).aspx + + + + The size of the buffer for the audio stream. + + + + + Boolean value to indicate whether or not the audio stream is hardware-offloaded + + + + + An enumeration that is used to specify the category of the audio stream. + + + + + A bit-field describing the characteristics of the stream. Supported in Windows 8.1 and later. + + + + + AUDCLNT_SHAREMODE + + + + + AUDCLNT_SHAREMODE_SHARED, + + + + + AUDCLNT_SHAREMODE_EXCLUSIVE + + + + + AUDCLNT_STREAMFLAGS + + + + + None + + + + + AUDCLNT_STREAMFLAGS_CROSSPROCESS + + + + + AUDCLNT_STREAMFLAGS_LOOPBACK + + + + + AUDCLNT_STREAMFLAGS_EVENTCALLBACK + + + + + AUDCLNT_STREAMFLAGS_NOPERSIST + + + + + Defines values that describe the characteristics of an audio stream. + + + + + No stream options. + + + + + The audio stream is a 'raw' stream that bypasses all signal processing except for endpoint specific, always-on processing in the APO, driver, and hardware. + + + + + Audio Clock Client + + + + + Characteristics + + + + + Frequency + + + + + Get Position + + + + + Adjusted Position + + + + + Can Adjust Position + + + + + Dispose + + + + + Audio Endpoint Volume + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + On Volume Notification + + + + + Volume Range + + + + + Hardware Support + + + + + Step Information + + + + + Channels + + + + + Master Volume Level + + + + + Master Volume Level Scalar + + + + + Mute + + + + + Volume Step Up + + + + + Volume Step Down + + + + + Creates a new Audio endpoint volume + + IAudioEndpointVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Audio Endpoint Volume Channel + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + Volume Level + + + + + Volume Level Scalar + + + + + Audio Endpoint Volume Channels + + + + + Channel Count + + + + + Indexer - get a specific channel + + + + + Audio Endpoint Volume Notifiaction Delegate + + Audio Volume Notification Data + + + + Audio Endpoint Volume Step Information + + + + + Step + + + + + StepCount + + + + + Audio Endpoint Volume Volume Range + + + + + Minimum Decibels + + + + + Maximum Decibels + + + + + Increment Decibels + + + + + Audio Meter Information + + + + + Peak Values + + + + + Hardware Support + + + + + Master Peak Value + + + + + Audio Meter Information Channels + + + + + Metering Channel Count + + + + + Get Peak value + + Channel index + Peak value + + + + Audio Render Client + + + + + Gets a pointer to the buffer + + Number of frames requested + Pointer to the buffer + + + + Release buffer + + Number of frames written + Buffer flags + + + + Release the COM object + + + + + AudioSessionControl object for information + regarding an audio session + + + + + Constructor. + + + + + + Dispose + + + + + Finalizer + + + + + Audio meter information of the audio session. + + + + + Simple audio volume of the audio session (for volume and mute status). + + + + + The current state of the audio session. + + + + + The name of the audio session. + + + + + the path to the icon shown in the mixer. + + + + + The session identifier of the audio session. + + + + + The session instance identifier of the audio session. + + + + + The process identifier of the audio session. + + + + + Is the session a system sounds session. + + + + + the grouping param for an audio session grouping + + + + + + For chanigng the grouping param and supplying the context of said change + + + + + + + Registers an even client for callbacks + + + + + + Unregisters an event client from receiving callbacks + + + + + + AudioSessionEvents callback implementation + + + + + Constructor. + + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + AudioSessionManager + + Designed to manage audio sessions and in particuar the + SimpleAudioVolume interface to adjust a session volume + + + + + Session created delegate + + + + + Occurs when audio session has been added (for example run another program that use audio playback). + + + + + SimpleAudioVolume object + for adjusting the volume for the user session + + + + + AudioSessionControl object + for registring for callbacks and other session information + + + + + Refresh session of current device. + + + + + Returns list of sessions of current device. + + + + + Dispose. + + + + + Finalizer. + + + + + Specifies the category of an audio stream. + + + + + Other audio stream. + + + + + Media that will only stream when the app is in the foreground. + + + + + Media that can be streamed when the app is in the background. + + + + + Real-time communications, such as VOIP or chat. + + + + + Alert sounds. + + + + + Sound effects. + + + + + Game sound effects. + + + + + Background audio for games. + + + + + Manages the AudioStreamVolume for the . + + + + + Verify that the channel index is valid. + + + + + + + Return the current stream volumes for all channels + + An array of volume levels between 0.0 and 1.0 for each channel in the audio stream. + + + + Returns the current number of channels in this audio stream. + + + + + Return the current volume for the requested channel. + + The 0 based index into the channels. + The volume level for the channel between 0.0 and 1.0. + + + + Set the volume level for each channel of the audio stream. + + An array of volume levels (between 0.0 and 1.0) one for each channel. + + A volume level MUST be supplied for reach channel in the audio stream. + + + Thrown when does not contain elements. + + + + + Sets the volume level for one channel in the audio stream. + + The 0-based index into the channels to adjust the volume of. + The volume level between 0.0 and 1.0 for this channel of the audio stream. + + + + Dispose + + + + + Release/cleanup objects during Dispose/finalization. + + True if disposing and false if being finalized. + + + + Audio Volume Notification Data + + + + + Event Context + + + + + Muted + + + + + Guid that raised the event + + + + + Master Volume + + + + + Channels + + + + + Channel Volume + + + + + Audio Volume Notification Data + + + + + + + + + + Connector + + + + + Connects this connector to a connector in another device-topology object + + + + + Retreives the type of this connector + + + + + Retreives the data flow of this connector + + + + + Disconnects this connector from it's connected connector (if connected) + + + + + Indicates whether this connector is connected to another connector + + + + + Retreives the connector this connector is connected to (if connected) + + + + + Retreives the global ID of the connector this connector is connected to (if connected) + + + + + Retreives the device ID of the audio device this connector is connected to (if connected) + + + + + Connector Type + + + + + The connector is part of a connection of unknown type. + + + + + The connector is part of a physical connection to an auxiliary device that is installed inside the system chassis + + + + + The connector is part of a physical connection to an external device. + + + + + The connector is part of a software-configured I/O connection (typically a DMA channel) between system memory and an audio hardware device on an audio adapter. + + + + + The connector is part of a permanent connection that is fixed and cannot be configured under software control. + + + + + The connector is part of a connection to a network. + + + + + The EDataFlow enumeration defines constants that indicate the direction + in which audio data flows between an audio endpoint device and an application + + + + + Audio rendering stream. + Audio data flows from the application to the audio endpoint device, which renders the stream. + + + + + Audio capture stream. Audio data flows from the audio endpoint device that captures the stream, + to the application + + + + + Audio rendering or capture stream. Audio data can flow either from the application to the audio + endpoint device, or from the audio endpoint device to the application. + + + + + Device State + + + + + DEVICE_STATE_ACTIVE + + + + + DEVICE_STATE_DISABLED + + + + + DEVICE_STATE_NOTPRESENT + + + + + DEVICE_STATE_UNPLUGGED + + + + + DEVICE_STATEMASK_ALL + + + + + Windows CoreAudio DeviceTopology + + + + + Retrieves the number of connections associated with this device-topology object + + + + + Retrieves the connector at the supplied index + + + + + Retrieves the device id of the device represented by this device-topology object + + + + + Endpoint Hardware Support + + + + + Volume + + + + + Mute + + + + + Meter + + + + + Representation of binary large object container. + + + + + Length of binary object. + + + + + Pointer to buffer storing data. + + + + + is defined in WTypes.h + + + + + Audio Client WASAPI Error Codes (HResult) + + + + + AUDCLNT_E_NOT_INITIALIZED + + + + + AUDCLNT_E_UNSUPPORTED_FORMAT + + + + + AUDCLNT_E_DEVICE_IN_USE + + + + + AUDCLNT_E_RESOURCES_INVALIDATED + + + + + Windows CoreAudio IAudioClient interface + Defined in AudioClient.h + + + + + The GetBufferSize method retrieves the size (maximum capacity) of the endpoint buffer. + + + + + The GetService method accesses additional services from the audio client object. + + The interface ID for the requested service. + Pointer to a pointer variable into which the method writes the address of an instance of the requested interface. + + + + Defined in AudioClient.h + + + + + Defined in AudioClient.h + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier for the audio session. + + Receives the session identifier. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier of the audio session instance. + + Receives the identifier of a particular instance. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the process identifier of the audio session. + + Receives the process identifier of the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Indicates whether the session is a system sounds session. + + An HRESULT code indicating whether the operation succeeded of failed. + + + + Enables or disables the default stream attenuation experience (auto-ducking) provided by the system. + + A variable that enables or disables system auto-ducking. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Defines constants that indicate the current state of an audio session. + + + MSDN Reference: http://msdn.microsoft.com/en-us/library/dd370792.aspx + + + + + The audio session is inactive. + + + + + The audio session is active. + + + + + The audio session has expired. + + + + + Defines constants that indicate a reason for an audio session being disconnected. + + + MSDN Reference: Unknown + + + + + The user removed the audio endpoint device. + + + + + The Windows audio service has stopped. + + + + + The stream format changed for the device that the audio session is connected to. + + + + + The user logged off the WTS session that the audio session was running in. + + + + + The WTS session that the audio session was running in was disconnected. + + + + + The (shared-mode) audio session was disconnected to make the audio endpoint device available for an exclusive-mode connection. + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + interface to receive session related events + + + + + notification of volume changes including muting of audio session + + the current volume + the current mute state, true muted, false otherwise + + + + notification of display name changed + + the current display name + + + + notification of icon path changed + + the current icon path + + + + notification of the client that the volume level of an audio channel in the session submix has changed + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + + + + notification of the client that the grouping parameter for the session has changed + + >The new grouping parameter for the session. + + + + notification of the client that the stream-activity state of the session has changed + + The new session state. + + + + notification of the client that the session has been disconnected + + The reason that the audio session was disconnected. + + + + Windows CoreAudio IAudioSessionManager interface + Defined in AudioPolicy.h + + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionNotification interface + Defined in AudioPolicy.h + + + + + + + session being added + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IConnector interface + Defined in devicetopology.h + + + + + Windows CoreAudio IDeviceTopology interface + Defined in devicetopology.h + + + + + defined in MMDeviceAPI.h + + + + + IMMNotificationClient + + + + + Device State Changed + + + + + Device Added + + + + + Device Removed + + + + + Default Device Changed + + + + + Property Value Changed + + + + + + + Windows CoreAudio IPart interface + Defined in devicetopology.h + + + + + Windows CoreAudio IPartsList interface + Defined in devicetopology.h + + + + + is defined in propsys.h + + + + + Windows CoreAudio ISimpleAudioVolume interface + Defined in AudioClient.h + + + + + Sets the master volume level for the audio session. + + The new volume level expressed as a normalized value between 0.0 and 1.0. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the client volume level for the audio session. + + Receives the volume level expressed as a normalized value between 0.0 and 1.0. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Sets the muting state for the audio session. + + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the current muting state for the audio session. + + Receives the muting state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + implements IMMDeviceEnumerator + + + + + MMDevice STGM enumeration + + + + + Read-only access mode. + + + + + Write-only access mode. + + + + + Read-write access mode. + + + + + from Propidl.h. + http://msdn.microsoft.com/en-us/library/aa380072(VS.85).aspx + contains a union so we have to do an explicit layout + + + + + Value type tag. + + + + + Reserved1. + + + + + Reserved2. + + + + + Reserved3. + + + + + cVal. + + + + + bVal. + + + + + iVal. + + + + + uiVal. + + + + + lVal. + + + + + ulVal. + + + + + intVal. + + + + + uintVal. + + + + + hVal. + + + + + uhVal. + + + + + fltVal. + + + + + dblVal. + + + + + boolVal. + + + + + scode. + + + + + Date time. + + + + + Binary large object. + + + + + Pointer value. + + + + + Creates a new PropVariant containing a long value + + + + + Helper method to gets blob data + + + + + Interprets a blob as an array of structs + + + + + Gets the type of data in this PropVariant + + + + + Property value + + + + + allows freeing up memory, might turn this into a Dispose method? + + + + + Clears with a known pointer + + + + + MM Device + + + + + Initializes the device's property store. + + The storage-access mode to open store for. + Administrative client is required for Write and ReadWrite modes. + + + + Audio Client + Makes a new one each call to allow caller to manage when to dispose + n.b. should probably not be a property anymore + + + + + Audio Meter Information + + + + + Audio Endpoint Volume + + + + + AudioSessionManager instance + + + + + DeviceTopology instance + + + + + Properties + + + + + Friendly name for the endpoint + + + + + Friendly name of device + + + + + Icon path of device + + + + + Device Instance Id of Device + + + + + Device ID + + + + + Data Flow + + + + + Device State + + + + + To string + + + + + Dispose + + + + + Finalizer + + + + + Multimedia Device Collection + + + + + Device count + + + + + Get device by index + + Device index + Device at the specified index + + + + Get Enumerator + + Device enumerator + + + + MM Device Enumerator + + + + + Creates a new MM Device Enumerator + + + + + Enumerate Audio Endpoints + + Desired DataFlow + State Mask + Device Collection + + + + Get Default Endpoint + + Data Flow + Role + Device + + + + Check to see if a default audio end point exists without needing an exception. + + Data Flow + Role + True if one exists, and false if one does not exist. + + + + Get device by ID + + Device ID + Device + + + + Registers a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + Unregisters a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + + + + Called to dispose/finalize contained objects. + + True if disposing, false if called from a finalizer. + + + + PROPERTYKEY is defined in wtypes.h + + + + + Format ID + + + + + Property ID + + + + + + + + + + + Property Keys + + + + + PKEY_DeviceInterface_FriendlyName + + + + + PKEY_AudioEndpoint_FormFactor + + + + + PKEY_AudioEndpoint_ControlPanelPageProvider + + + + + PKEY_AudioEndpoint_Association + + + + + PKEY_AudioEndpoint_PhysicalSpeakers + + + + + PKEY_AudioEndpoint_GUID + + + + + PKEY_AudioEndpoint_Disable_SysFx + + + + + PKEY_AudioEndpoint_FullRangeSpeakers + + + + + PKEY_AudioEndpoint_Supports_EventDriven_Mode + + + + + PKEY_AudioEndpoint_JackSubType + + + + + PKEY_AudioEngine_DeviceFormat + + + + + PKEY_AudioEngine_OEMFormat + + + + + PKEY _Devie_FriendlyName + + + + + PKEY _Device_IconPath + + + + + Device description property. + + + + + Id of controller device for endpoint device property. + + + + + Device interface key property. + + + + + System-supplied device instance identification string, assigned by PnP manager, persistent across system restarts. + + + + + Property Store class, only supports reading properties at the moment. + + + + + Property Count + + + + + Gets property by index + + Property index + The property + + + + Contains property guid + + Looks for a specific key + True if found + + + + Indexer by guid + + Property Key + Property or null if not found + + + + Gets property key at sepecified index + + Index + Property key + + + + Gets property value at specified index + + Index + Property value + + + + Sets property value at specified key. + + Key of property to set. + Value to write. + + + + Saves a property change. + + + + + Creates a new property store + + IPropertyStore COM interface + + + + Property Store Property + + + + + Property Key + + + + + Property Value + + + + + The ERole enumeration defines constants that indicate the role + that the system has assigned to an audio endpoint device + + + + + Games, system notification sounds, and voice commands. + + + + + Music, movies, narration, and live music recording + + + + + Voice communications (talking to another person). + + + + + Collection of sessions. + + + + + Returns session at index. + + + + + + + Number of current sessions. + + + + + Windows CoreAudio SimpleAudioVolume + + + + + Creates a new Audio endpoint volume + + ISimpleAudioVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Allows the user to adjust the volume from + 0.0 to 1.0 + + + + + Mute + + + + + Represents state of a capture device + + + + + Not recording + + + + + Beginning to record + + + + + Recording in progress + + + + + Requesting stop + + + + + Audio Capture using Wasapi + See http://msdn.microsoft.com/en-us/library/dd370800%28VS.85%29.aspx + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Initializes a new instance of the class. + + The capture device. + true if sync is done with event. false use sleep. + + + + Initializes a new instance of the class. + + The capture device. + true if sync is done with event. false use sleep. + Length of the audio buffer in milliseconds. A lower value means lower latency but increased CPU usage. + + + + Share Mode - set before calling StartRecording + + + + + Current Capturing State + + + + + Capturing wave format + + + + + Gets the default audio capture device + + The default audio capture device + + + + To allow overrides to specify different flags (e.g. loopback) + + + + + Start Capturing + + + + + Stop Capturing (requests a stop, wait for RecordingStopped event to know it has finished) + + + + + Dispose + + + + + Contains the name and CLSID of a DirectX Media Object + + + + + Name + + + + + CLSID + + + + + Initializes a new instance of DmoDescriptor + + + + + DirectX Media Object Enumerator + + + + + Get audio effect names + + Audio effect names + + + + Get audio encoder names + + Audio encoder names + + + + Get audio decoder names + + Audio decoder names + + + + DMO Guids for use with DMOEnum + dmoreg.h + + + + + MediaErr.h + + + + + DMO Inplace Process Flags + + + + + DMO_INPLACE_NORMAL + + + + + DMO_INPLACE_ZERO + + + + + Return value when Process is executed with IMediaObjectInPlace + + + + + Success. There is no remaining data to process. + + + + + Success. There is still data to process. + + + + + DMO Input Data Buffer Flags + + + + + None + + + + + DMO_INPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_INPUT_DATA_BUFFERF_TIME + + + + + DMO_INPUT_DATA_BUFFERF_TIMELENGTH + + + + + http://msdn.microsoft.com/en-us/library/aa929922.aspx + DMO_MEDIA_TYPE + + + + + Major type + + + + + Major type name + + + + + Subtype + + + + + Subtype name + + + + + Fixed size samples + + + + + Sample size + + + + + Format type + + + + + Format type name + + + + + Gets the structure as a Wave format (if it is one) + + + + + Sets this object up to point to a wave format + + Wave format structure + + + + DMO Output Data Buffer + + + + + Creates a new DMO Output Data Buffer structure + + Maximum buffer size + + + + Dispose + + + + + Media Buffer + + + + + Length of data in buffer + + + + + Status Flags + + + + + Timestamp + + + + + Duration + + + + + Retrives the data in this buffer + + Buffer to receive data + Offset into buffer + + + + Is more data available + If true, ProcessOuput should be called again + + + + + DMO Output Data Buffer Flags + + + + + None + + + + + DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_OUTPUT_DATA_BUFFERF_TIME + + + + + DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH + + + + + DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE + + + + + DMO_PARTIAL_MEDIATYPE + + + + + DMO Process Output Flags + + + + + None + + + + + DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER + + + + + Chorus Phase + + + + + DSFXCHORUS_PHASE_NEG_180 + + + + + DSFXCHORUS_PHASE_NEG_90 + + + + + DSFXCHORUS_PHASE_ZERO + + + + + DSFXCHORUS_PHASE_90 + + + + + DSFXCHORUS_PHASE_180 + + + + + Chorus Wave Form + + + + + DSFXCHORUS_WAVE_TRIANGLE + + + + + DSFXCHORUS_WAVE_SIN + + + + + DMO Chorus Effect + + + + + DMO Chorus Params + + + + + DSFXCHORUS_WETDRYMIX_MIN + + + + + DSFXCHORUS_WETDRYMIX_MAX + + + + + DSFXCHORUS_WETDRYMIX_DEFAULT + + + + + DSFXCHORUS_DEPTH_MIN + + + + + DSFXCHORUS_DEPTH_MAX + + + + + DSFXCHORUS_DEPTH_DEFAULT + + + + + DSFXCHORUS_FEEDBACK_MIN + + + + + DSFXCHORUS_FEEDBACK_MAX + + + + + DSFXCHORUS_FEEDBACK_DEFAULT + + + + + DSFXCHORUS_FREQUENCY_MIN + + + + + DSFXCHORUS_FREQUENCY_MAX + + + + + DSFXCHORUS_FREQUENCY_DEFAULT + + + + + DSFXCHORUS_WAVE_DEFAULT + + + + + DSFXCHORUS_DELAY_MIN + + + + + DSFXCHORUS_DELAY_MAX + + + + + DSFXCHORUS_DELAY_DEFAULT + + + + + DSFXCHORUS_PHASE_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage by which the delay time is modulated by the low-frequency oscillator, + in hundredths of a percentage point. + + + + + Percentage of output signal to feed back into the effect's input. + + + + + Frequency of the LFO. + + + + + Waveform shape of the LFO. + + + + + Number of milliseconds the input is delayed before it is played back. + + + + + Phase differential between left and right LFOs. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Chorus + + + + + Dispose code + + + + + DMO Compressor Effect + + + + + DMO Compressor Params + + + + + DSFXCOMPRESSOR_GAIN_MIN + + + + + DSFXCOMPRESSOR_GAIN_MAX + + + + + DSFXCOMPRESSOR_GAIN_DEFAULT + + + + + DSFXCOMPRESSOR_ATTACK_MIN + + + + + DSFXCOMPRESSOR_ATTACK_MAX + + + + + DSFXCOMPRESSOR_ATTACK_DEFAULT + + + + + DSFXCOMPRESSOR_RELEASE_MIN + + + + + DSFXCOMPRESSOR_RELEASE_MAX + + + + + DSFXCOMPRESSOR_RELEASE_DEFAULT + + + + + DSFXCOMPRESSOR_THRESHOLD_MIN + + + + + DSFXCOMPRESSOR_THRESHOLD_MAX + + + + + DSFXCOMPRESSOR_THRESHOLD_DEFAULT + + + + + DSFXCOMPRESSOR_RATIO_MIN + + + + + DSFXCOMPRESSOR_RATIO_MAX + + + + + DSFXCOMPRESSOR_RATIO_DEFAULT + + + + + DSFXCOMPRESSOR_PREDELAY_MIN + + + + + DSFXCOMPRESSOR_PREDELAY_MAX + + + + + DSFXCOMPRESSOR_PREDELAY_DEFAULT + + + + + Output gain of signal after compression. + + + + + Time before compression reaches its full value. + + + + + Speed at which compression is stopped after input drops below Threshold. + + + + + Point at which compression begins, in decibels. + + + + + Compression ratio + + + + + Time after Threshold is reached before attack phase is started, in milliseconds. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Compressor + + + + + Dispose code + + + + + DMO Distortion Effect + + + + + DMO Distortion Params + + + + + DSFXDISTORTION_GAIN_MIN + + + + + DSFXDISTORTION_GAIN_MAX + + + + + DSFXDISTORTION_GAIN_DEFAULT + + + + + DSFXDISTORTION_EDGE_MIN + + + + + DSFXDISTORTION_EDGE_MAX + + + + + DSFXDISTORTION_EDGE_DEFAULT + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_DEFAULT + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_MIN + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_MAX + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_DEFAULT + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_MIN + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_MAX + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_DEFAULT + + + + + Amount of signal change after distortion. + + + + + Percentage of distortion intensity. + + + + + Center frequency of harmonic content addition. + + + + + Width of frequency band that determines range of harmonic content addition. + + + + + Filter cutoff for high-frequency harmonics attenuation. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Distortion + + + + + Dispose code + + + + + Dmo Echo Effect + + + + + DMO Echo Params + + + + + DSFXECHO_WETDRYMIX_MIN + + + + + DSFXECHO_WETDRYMIX_MAX + + + + + DSFXECHO_WETDRYMIX_DEFAULT + + + + + DSFXECHO_FEEDBACK_MIN + + + + + DSFXECHO_FEEDBACK_MAX + + + + + DSFXECHO_FEEDBACK_DEFAULT + + + + + DSFXECHO_LEFTDELAY_MIN + + + + + DSFXECHO_LEFTDELAY_MAX + + + + + DSFXECHO_LEFTDELAY_DEFAULT + + + + + DSFXECHO_RIGHTDELAY_MIN + + + + + DSFXECHO_RIGHTDELAY_MAX + + + + + DSFXECHO_RIGHTDELAY_DEFAULT + + + + + DSFXECHO_PANDELAY_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage of output fed back into input. + + + + + Delay for left channel, in milliseconds. + + + + + Delay for right channel, in milliseconds. + + + + + Value that specifies whether to swap left and right delays with each successive echo. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Echo + + + + + Dispose code + + + + + DMO Flanger Effect + + + + + DMO Flanger Params + + + + + DSFXFLANGER_WETDRYMIX_MIN + + + + + DSFXFLANGER_WETDRYMIX_MAX + + + + + DSFXFLANGER_WETDRYMIX_DEFAULT + + + + + DSFXFLANGER_DEPTH_MIN + + + + + DSFXFLANGER_DEPTH_MAX + + + + + DSFXFLANGER_DEPTH_DEFAULT + + + + + DSFXFLANGER_FEEDBACK_MIN + + + + + DSFXFLANGER_FEEDBACK_MAX + + + + + DSFXFLANGER_FEEDBACK_DEFAULT + + + + + DSFXFLANGER_FREQUENCY_MIN + + + + + DSFXFLANGER_FREQUENCY_MAX + + + + + DSFXFLANGER_FREQUENCY_DEFAULT + + + + + DSFXFLANGER_WAVE_DEFAULT + + + + + DSFXFLANGER_DELAY_MIN + + + + + DSFXFLANGER_DELAY_MAX + + + + + DSFXFLANGER_DELAY_DEFAULT + + + + + DSFXFLANGER_PHASE_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage by which the delay time is modulated by the low-frequency oscillator, + in hundredths of a percentage point. + + + + + Percentage of output signal to feed back into the effect's input. + + + + + Frequency of the LFO. + + + + + Waveform shape of the LFO. + + + + + Number of milliseconds the input is delayed before it is played back. + + + + + Phase differential between left and right LFOs. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Flanger + + + + + Dispose code + + + + + DMO Gargle Effect + + + + + DMO Gargle Params + + + + + DSFXGARGLE_RATEHZ_MIN + + + + + DSFXGARGLE_RATEHZ_MAX + + + + + DSFXGARGLE_RATEHZ_DEFAULT + + + + + DSFXGARGLE_WAVE_DEFAULT + + + + + Rate of modulation in hz + + + + + Gargle Wave Shape + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Gargle + + + + + Dispose code + + + + + DMO I3DL2Reverb Effect + + + + + DMO I3DL2Reverb Params + + + + + DSFX_I3DL2REVERB_ROOM_MIN + + + + + DSFX_I3DL2REVERB_ROOM_MAX + + + + + DSFX_I3DL2REVERB_ROOM_DEFAULT + + + + + DSFX_I3DL2REVERB_ROOMHF_MIN + + + + + DSFX_I3DL2REVERB_ROOMHF_MAX + + + + + DSFX_I3DL2REVERB_ROOMHF_DEFAULT + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT + + + + + DSFX_I3DL2REVERB_DECAYTIME_MIN + + + + + DSFX_I3DL2REVERB_DECAYTIME_MAX + + + + + DSFX_I3DL2REVERB_DECAYTIME_DEFAULT + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_MIN + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_MAX + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT + + + + + DSFX_I3DL2REVERB_REFLECTIONS_MIN + + + + + DSFX_I3DL2REVERB_REFLECTIONS_MAX + + + + + DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT + + + + + DSFX_I3DL2REVERB_REVERB_MIN + + + + + DSFX_I3DL2REVERB_REVERB_MAX + + + + + DSFX_I3DL2REVERB_REVERB_DEFAULT + + + + + DSFX_I3DL2REVERB_REVERBDELAY_MIN + + + + + DSFX_I3DL2REVERB_REVERBDELAY_MAX + + + + + DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT + + + + + DSFX_I3DL2REVERB_DIFFUSION_MIN + + + + + DSFX_I3DL2REVERB_DIFFUSION_MAX + + + + + DSFX_I3DL2REVERB_DIFFUSION_DEFAULT + + + + + DSFX_I3DL2REVERB_DENSITY_MIN + + + + + DSFX_I3DL2REVERB_DENSITY_MAX + + + + + DSFX_I3DL2REVERB_DENSITY_DEFAULT + + + + + DSFX_I3DL2REVERB_HFREFERENCE_MIN + + + + + DSFX_I3DL2REVERB_HFREFERENCE_MAX + + + + + DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT + + + + + DSFX_I3DL2REVERB_QUALITY_MIN + + + + + DSFX_I3DL2REVERB_QUALITY_MAX + + + + + DSFX_I3DL2REVERB_QUALITY_DEFAULT + + + + + Attenuation of the room effect, in millibels (mB) + + + + + Attenuation of the room high-frequency effect, in mB. + + + + + Rolloff factor for the reflected signals. + + + + + Decay time, in seconds. + + + + + Ratio of the decay time at high frequencies to the decay time at low frequencies. + + + + + Attenuation of early reflections relative to lRoom, in mB. + + + + + Delay time of the first reflection relative to the direct path, in seconds. + + + + + Attenuation of late reverberation relative to lRoom, in mB. + + + + + Time limit between the early reflections and the late reverberation relative to the time of the first reflection. + + + + + Echo density in the late reverberation decay, in percent. + + + + + Modal density in the late reverberation decay, in percent. + + + + + Reference high frequency, in hertz. + + + + + the quality of the environmental reverberation effect. Higher values produce better quality at the expense of processing time. + + + + + Sets standard reverberation parameters of a buffer. + + I3DL2EnvironmentPreset + + + + retrieves an identifier for standard reverberation parameters of a buffer. + + I3DL2EnvironmentPreset + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO I3DL2Reverb + + + + + Dispose code + + + + + DMO Parametric Equalizer Effect + + + + + DMO ParamEq Params + + + + + DSFXPARAMEQ_CENTER_MIN + + + + + DSFXPARAMEQ_CENTER_MAX + + + + + DSFXPARAMEQ_CENTER_DEFAULT + + + + + DSFXPARAMEQ_BANDWIDTH_MIN + + + + + DSFXPARAMEQ_BANDWIDTH_MAX + + + + + DSFXPARAMEQ_BANDWIDTH_DEFAULT + + + + + DSFXPARAMEQ_GAIN_MIN + + + + + DSFXPARAMEQ_GAIN_MAX + + + + + DSFXPARAMEQ_GAIN_DEFAULT + + + + + Center frequency, in hertz + + + + + Bandwidth, in semitones. + + + + + Gain + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO ParamEq + + + + + Dispose code + + + + + DMO Reverb Effect + + + + + DMO Reverb Params + + + + + DSFX_WAVESREVERB_INGAIN_MIN + + + + + DSFX_WAVESREVERB_INGAIN_MAX + + + + + DSFX_WAVESREVERB_INGAIN_DEFAULT + + + + + DSFX_WAVESREVERB_REVERBMIX_MIN + + + + + DSFX_WAVESREVERB_REVERBMIX_MAX + + + + + DSFX_WAVESREVERB_REVERBMIX_DEFAULT + + + + + DSFX_WAVESREVERB_REVERBTIME_MIN + + + + + DSFX_WAVESREVERB_REVERBTIME_MAX + + + + + DSFX_WAVESREVERB_REVERBTIME_DEFAULT + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT + + + + + Input gain of signal, in decibels (dB). + + + + + Reverb mix, in dB. + + + + + Reverb time, in milliseconds. + + + + + High-frequency reverb time ratio. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO WavesReverb + + + + + Dispose code + + + + + DSFXECHO_PANDELAY + + + + + DSFXECHO_PANDELAY_MIN + + + + + DSFXECHO_PANDELAY_MAX + + + + + Flanger Phase + + + + + DSFXFLANGER_PHASE_NEG_180 + + + + + DSFXFLANGER_PHASE_NEG_90 + + + + + DSFXFLANGER_PHASE_ZERO + + + + + DSFXFLANGER_PHASE_90 + + + + + DSFXFLANGER_PHASE_180 + + + + + Flanger Wave Form + + + + + DSFXFLANGER_WAVE_TRIANGLE + + + + + DSFXFLANGER_WAVE_SIN + + + + + Gargle Wave Shape + + + + + DSFXGARGLE_WAVE_TRIANGLE + + + + + DSFXGARGLE_WAVE_SQUARE + + + + + I3DL2 Reverberation Presets + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CITY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE + + + + + Interface of DMO Effectors + + Parameters of the effect to be used + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + IMediaBuffer Interface + + + + + Set Length + + Length + HRESULT + + + + Get Max Length + + Max Length + HRESULT + + + + Get Buffer and Length + + Pointer to variable into which to write the Buffer Pointer + Pointer to variable into which to write the Valid Data Length + HRESULT + + + + defined in mediaobj.h + + + + + defined in mediaobj.h + + + + + defined in Medparam.h + + + + + Windows Media Resampler Props + wmcodecdsp.h + + + + + Range is 1 to 60 + + + + + Specifies the channel matrix. + + + + + Attempting to implement the COM IMediaBuffer interface as a .NET object + Not sure what will happen when I pass this to an unmanaged object + + + + + Creates a new Media Buffer + + Maximum length in bytes + + + + Dispose and free memory for buffer + + + + + Finalizer + + + + + Set length of valid data in the buffer + + length + HRESULT + + + + Gets the maximum length of the buffer + + Max length (output parameter) + HRESULT + + + + Gets buffer and / or length + + Pointer to variable into which buffer pointer should be written + Pointer to variable into which valid data length should be written + HRESULT + + + + Length of data in the media buffer + + + + + Loads data into this buffer + + Data to load + Number of bytes to load + + + + Retrieves the data in the output buffer + + buffer to retrieve into + offset within that buffer + + + + Media Object + + + + + Creates a new Media Object + + Media Object COM interface + + + + Number of input streams + + + + + Number of output streams + + + + + Gets the input media type for the specified input stream + + Input stream index + Input type index + DMO Media Type or null if there are no more input types + + + + Gets the DMO Media Output type + + The output stream + Output type index + DMO Media Type or null if no more available + + + + retrieves the media type that was set for an output stream, if any + + Output stream index + DMO Media Type or null if no more available + + + + Enumerates the supported input types + + Input stream index + Enumeration of input types + + + + Enumerates the output types + + Output stream index + Enumeration of supported output types + + + + Querys whether a specified input type is supported + + Input stream index + Media type to check + true if supports + + + + Sets the input type helper method + + Input stream index + Media type + Flags (can be used to test rather than set) + + + + Sets the input type + + Input stream index + Media Type + + + + Sets the input type to the specified Wave format + + Input stream index + Wave format + + + + Requests whether the specified Wave format is supported as an input + + Input stream index + Wave format + true if supported + + + + Helper function to make a DMO Media Type to represent a particular WaveFormat + + + + + Checks if a specified output type is supported + n.b. you may need to set the input type first + + Output stream index + Media type + True if supported + + + + Tests if the specified Wave Format is supported for output + n.b. may need to set the input type first + + Output stream index + Wave format + True if supported + + + + Helper method to call SetOutputType + + + + + Sets the output type + n.b. may need to set the input type first + + Output stream index + Media type to set + + + + Set output type to the specified wave format + n.b. may need to set input type first + + Output stream index + Wave format + + + + Get Input Size Info + + Input Stream Index + Input Size Info + + + + Get Output Size Info + + Output Stream Index + Output Size Info + + + + Process Input + + Input Stream index + Media Buffer + Flags + Timestamp + Duration + + + + Process Output + + Flags + Output buffer count + Output buffers + + + + Gives the DMO a chance to allocate any resources needed for streaming + + + + + Tells the DMO to free any resources needed for streaming + + + + + Gets maximum input latency + + input stream index + Maximum input latency as a ref-time + + + + Flushes all buffered data + + + + + Report a discontinuity on the specified input stream + + Input Stream index + + + + Is this input stream accepting data? + + Input Stream index + true if accepting data + + + + Experimental code, not currently being called + Not sure if it is necessary anyway + + + + + Media Object InPlace + + + + + Creates a new Media Object InPlace + + Media Object InPlace COM Interface + + + + Processes a block of data. + The application supplies a pointer to a block of input data. The DMO processes the data in place. + + Size of the data, in bytes. + offset into buffer + In/Out Data Buffer + Start time of the data. + DmoInplaceProcessFlags + Return value when Process is executed with IMediaObjectInPlace + + + + Creates a copy of the DMO in its current state. + + Copyed MediaObjectInPlace + + + + Retrieves the latency introduced by this DMO. + + The latency, in 100-nanosecond units + + + + Get Media Object + + Media Object + + + + Dispose code + + + + + Media Object Size Info + + + + + Minimum Buffer Size, in bytes + + + + + Max Lookahead + + + + + Alignment + + + + + Media Object Size Info + + + + + ToString + + + + + MP_PARAMINFO + + + + + MP_TYPE + + + + + MPT_INT + + + + + MPT_FLOAT + + + + + MPT_BOOL + + + + + MPT_ENUM + + + + + MPT_MAX + + + + + MP_CURVE_TYPE + + + + + uuids.h, ksuuids.h + + + + + From wmcodecsdp.h + Implements: + - IMediaObject + - IMFTransform (Media foundation - we will leave this for now as there is loads of MF stuff) + - IPropertyStore + - IWMResamplerProps + Can resample PCM or IEEE + + + + + DMO Resampler + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + implements IMediaObject (DirectX Media Object) + implements IMFTransform (Media Foundation Transform) + On Windows XP, it is always an MM (if present at all) + + + + + Windows Media MP3 Decoder (as a DMO) + WORK IN PROGRESS - DO NOT USE! + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + BiQuad filter + + + + + Passes a single sample through the filter + + Input sample + Output sample + + + + Set this up as a low pass filter + + Sample Rate + Cut-off Frequency + Bandwidth + + + + Set this up as a peaking EQ + + Sample Rate + Centre Frequency + Bandwidth (Q) + Gain in decibels + + + + Set this as a high pass filter + + + + + Create a low pass filter + + + + + Create a High pass filter + + + + + Create a bandpass filter with constant skirt gain + + + + + Create a bandpass filter with constant peak gain + + + + + Creates a notch filter + + + + + Creaes an all pass filter + + + + + Create a Peaking EQ + + + + + H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) + + + + a "shelf slope" parameter (for shelving EQ only). + When S = 1, the shelf slope is as steep as it can be and remain monotonically + increasing or decreasing gain with frequency. The shelf slope, in dB/octave, + remains proportional to S for all other values for a fixed f0/Fs and dBgain. + Gain in decibels + + + + H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) + + + + + + + + + + Type to represent complex number + + + + + Real Part + + + + + Imaginary Part + + + + + Envelope generator (ADSR) + + + + + Envelope State + + + + + Idle + + + + + Attack + + + + + Decay + + + + + Sustain + + + + + Release + + + + + Creates and Initializes an Envelope Generator + + + + + Attack Rate (seconds * SamplesPerSecond) + + + + + Decay Rate (seconds * SamplesPerSecond) + + + + + Release Rate (seconds * SamplesPerSecond) + + + + + Sustain Level (1 = 100%) + + + + + Sets the attack curve + + + + + Sets the decay release curve + + + + + Read the next volume multiplier from the envelope generator + + A volume multiplier + + + + Trigger the gate + + If true, enter attack phase, if false enter release phase (unless already idle) + + + + Current envelope state + + + + + Reset to idle state + + + + + Get the current output level + + + + + Summary description for FastFourierTransform. + + + + + This computes an in-place complex-to-complex FFT + x and y are the real and imaginary arrays of 2^m points. + + + + + Applies a Hamming Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hamming window + + + + Applies a Hann Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hann window + + + + Applies a Blackman-Harris Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Blackmann-Harris window + + + + Summary description for ImpulseResponseConvolution. + + + + + A very simple mono convolution algorithm + + + This will be very slow + + + + + This is actually a downwards normalize for data that will clip + + + + + SMB Pitch Shifter + + + + + Pitch Shift + + + + + Pitch Shift + + + + + Short Time Fourier Transform + + + + + Fully managed resampler, based on Cockos WDL Resampler + + + + + Creates a new Resampler + + + + + sets the mode + if sinc set, it overrides interp or filtercnt + + + + + Sets the filter parameters + used for filtercnt>0 but not sinc + + + + + Set feed mode + + if true, that means the first parameter to ResamplePrepare will specify however much input you have, not how much you want + + + + Reset + + + + + Prepare + note that it is safe to call ResamplePrepare without calling ResampleOut (the next call of ResamplePrepare will function as normal) + nb inbuffer was WDL_ResampleSample **, returning a place to put the in buffer, so we return a buffer and offset + + req_samples is output samples desired if !wantInputDriven, or if wantInputDriven is input samples that we have + + + + returns number of samples desired (put these into *inbuffer) + + + + Channel Mode + + + + + Stereo + + + + + Joint Stereo + + + + + Dual Channel + + + + + Mono + + + + + An ID3v2 Tag + + + + + Reads an ID3v2 tag from a stream + + + + + Creates a new ID3v2 tag from a collection of key-value pairs. + + A collection of key-value pairs containing the tags to include in the ID3v2 tag. + A new ID3v2 tag + + + + Convert the frame size to a byte array. + + The frame body size. + + + + + Creates an ID3v2 frame for the given key-value pair. + + + + + + + + Gets the Id3v2 Header size. The size is encoded so that only 7 bits per byte are actually used. + + + + + + + Creates the Id3v2 tag header and returns is as a byte array. + + The Id3v2 frames that will be included in the file. This is used to calculate the ID3v2 tag size. + + + + + Creates the Id3v2 tag for the given key-value pairs and returns it in the a stream. + + + + + + + Raw data from this tag + + + + + Interface for MP3 frame by frame decoder + + + + + Decompress a single MP3 frame + + Frame to decompress + Output buffer + Offset within output buffer + Bytes written to output buffer + + + + Tell the decoder that we have repositioned + + + + + PCM format that we are converting into + + + + + Represents an MP3 Frame + + + + + Reads an MP3 frame from a stream + + input stream + A valid MP3 frame, or null if none found + + + Reads an MP3Frame from a stream + http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm has some good info + also see http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx + + A valid MP3 frame, or null if none found + + + + Constructs an MP3 frame + + + + + checks if the four bytes represent a valid header, + if they are, will parse the values into Mp3Frame + + + + + Sample rate of this frame + + + + + Frame length in bytes + + + + + Bit Rate + + + + + Raw frame data (includes header bytes) + + + + + MPEG Version + + + + + MPEG Layer + + + + + Channel Mode + + + + + The number of samples in this frame + + + + + The channel extension bits + + + + + The bitrate index (directly from the header) + + + + + Whether the Copyright bit is set + + + + + Whether a CRC is present + + + + + Not part of the MP3 frame itself - indicates where in the stream we found this header + + + + + MP3 Frame Decompressor using ACM + + + + + Creates a new ACM frame decompressor + + The MP3 source format + + + + Output format (PCM) + + + + + Decompresses a frame + + The MP3 frame + destination buffer + Offset within destination buffer + Bytes written into destination buffer + + + + Resets the MP3 Frame Decompressor after a reposition operation + + + + + Disposes of this MP3 frame decompressor + + + + + Finalizer ensuring that resources get released properly + + + + + MPEG Layer flags + + + + + Reserved + + + + + Layer 3 + + + + + Layer 2 + + + + + Layer 1 + + + + + MPEG Version Flags + + + + + Version 2.5 + + + + + Reserved + + + + + Version 2 + + + + + Version 1 + + + + + Represents a Xing VBR header + + + + + Load Xing Header + + Frame + Xing Header + + + + Sees if a frame contains a Xing header + + + + + Number of frames + + + + + Number of bytes + + + + + VBR Scale property + + + + + The MP3 frame + + + + + ASIO 64 bit value + Unfortunately the ASIO API was implemented it before compiler supported consistently 64 bit + integer types. By using the structure the data layout on a little-endian system like the + Intel x86 architecture will result in a "non native" storage of the 64 bit data. The most + significant 32 bit are stored first in memory, the least significant bits are stored in the + higher memory space. However each 32 bit is stored in the native little-endian fashion + + + + + most significant bits (Bits 32..63) + + + + + least significant bits (Bits 0..31) + + + + + ASIO Callbacks + + + + + ASIO Buffer Switch Callback + + + + + ASIO Sample Rate Did Change Callback + + + + + ASIO Message Callback + + + + + ASIO Buffer Switch Time Info Callback + + + + + Buffer switch callback + void (*bufferSwitch) (long doubleBufferIndex, AsioBool directProcess); + + + + + Sample Rate Changed callback + void (*sampleRateDidChange) (AsioSampleRate sRate); + + + + + ASIO Message callback + long (*asioMessage) (long selector, long value, void* message, double* opt); + + + + + ASIO Buffer Switch Time Info Callback + AsioTime* (*bufferSwitchTimeInfo) (AsioTime* params, long doubleBufferIndex, AsioBool directProcess); + + + + + ASIO Channel Info + + + + + on input, channel index + + + + + Is Input + + + + + Is Active + + + + + Channel Info + + + + + ASIO Sample Type + + + + + Name + + + + + Main AsioDriver Class. To use this class, you need to query first the GetAsioDriverNames() and + then use the GetAsioDriverByName to instantiate the correct AsioDriver. + This is the first AsioDriver binding fully implemented in C#! + + Contributor: Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Gets the ASIO driver names installed. + + a list of driver names. Use this name to GetAsioDriverByName + + + + Instantiate a AsioDriver given its name. + + The name of the driver + an AsioDriver instance + + + + Instantiate the ASIO driver by GUID. + + The GUID. + an AsioDriver instance + + + + Inits the AsioDriver.. + + The sys handle. + + + + + Gets the name of the driver. + + + + + + Gets the driver version. + + + + + + Gets the error message. + + + + + + Starts this instance. + + + + + Stops this instance. + + + + + Gets the number of channels. + + The num input channels. + The num output channels. + + + + Gets the latencies (n.b. does not throw an exception) + + The input latency. + The output latency. + + + + Gets the size of the buffer. + + Size of the min. + Size of the max. + Size of the preferred. + The granularity. + + + + Determines whether this instance can use the specified sample rate. + + The sample rate. + + true if this instance [can sample rate] the specified sample rate; otherwise, false. + + + + + Gets the sample rate. + + + + + + Sets the sample rate. + + The sample rate. + + + + Gets the clock sources. + + The clocks. + The num sources. + + + + Sets the clock source. + + The reference. + + + + Gets the sample position. + + The sample pos. + The time stamp. + + + + Gets the channel info. + + The channel number. + if set to true [true for input info]. + Channel Info + + + + Creates the buffers. + + The buffer infos. + The num channels. + Size of the buffer. + The callbacks. + + + + Disposes the buffers. + + + + + Controls the panel. + + + + + Futures the specified selector. + + The selector. + The opt. + + + + Notifies OutputReady to the AsioDriver. + + + + + + Releases this instance. + + + + + Handles the exception. Throws an exception based on the error. + + The error to check. + Method name + + + + Inits the vTable method from GUID. This is a tricky part of this class. + + The ASIO GUID. + + + + Internal VTable structure to store all the delegates to the C++ COM method. + + + + + ASIODriverCapability holds all the information from the AsioDriver. + Use ASIODriverExt to get the Capabilities + + + + + Drive Name + + + + + Number of Input Channels + + + + + Number of Output Channels + + + + + Input Latency + + + + + Output Latency + + + + + Buffer Minimum Size + + + + + Buffer Maximum Size + + + + + Buffer Preferred Size + + + + + Buffer Granularity + + + + + Sample Rate + + + + + Input Channel Info + + + + + Output Channel Info + + + + + Callback used by the AsioDriverExt to get wave data + + + + + AsioDriverExt is a simplified version of the AsioDriver. It provides an easier + way to access the capabilities of the Driver and implement the callbacks necessary + for feeding the driver. + Implementation inspired from Rob Philpot's with a managed C++ ASIO wrapper BlueWave.Interop.Asio + http://www.codeproject.com/KB/mcpp/Asio.Net.aspx + + Contributor: Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Initializes a new instance of the class based on an already + instantiated AsioDriver instance. + + A AsioDriver already instantiated. + + + + Allows adjustment of which is the first output channel we write to + + Output Channel offset + Input Channel offset + + + + Gets the driver used. + + The ASIOdriver. + + + + Starts playing the buffers. + + + + + Stops playing the buffers. + + + + + Shows the control panel. + + + + + Releases this instance. + + + + + Determines whether the specified sample rate is supported. + + The sample rate. + + true if [is sample rate supported]; otherwise, false. + + + + + Sets the sample rate. + + The sample rate. + + + + Gets or sets the fill buffer callback. + + The fill buffer callback. + + + + Gets the capabilities of the AsioDriver. + + The capabilities. + + + + Creates the buffers for playing. + + The number of outputs channels. + The number of input channel. + if set to true [use max buffer size] else use Prefered size + + + + Builds the capabilities internally. + + + + + Callback called by the AsioDriver on fill buffer demand. Redirect call to external callback. + + Index of the double buffer. + if set to true [direct process]. + + + + Callback called by the AsioDriver on event "Samples rate changed". + + The sample rate. + + + + Asio message call back. + + The selector. + The value. + The message. + The opt. + + + + + Buffers switch time info call back. + + The asio time param. + Index of the double buffer. + if set to true [direct process]. + + + + + ASIO Error Codes + + + + + This value will be returned whenever the call succeeded + + + + + unique success return value for ASIOFuture calls + + + + + hardware input or output is not present or available + + + + + hardware is malfunctioning (can be returned by any ASIO function) + + + + + input parameter invalid + + + + + hardware is in a bad mode or used in a bad mode + + + + + hardware is not running when sample position is inquired + + + + + sample clock or rate cannot be determined or is not present + + + + + not enough memory for completing the request + + + + + ASIO Message Selector + + + + + selector in <value>, returns 1L if supported, + + + + + returns engine (host) asio implementation version, + + + + + request driver reset. if accepted, this + + + + + not yet supported, will currently always return 0L. + + + + + the driver went out of sync, such that + + + + + the drivers latencies have changed. The engine + + + + + if host returns true here, it will expect the + + + + + supports timecode + + + + + unused - value: number of commands, message points to mmc commands + + + + + kAsioSupportsXXX return 1 if host supports this + + + + + unused and undefined + + + + + unused and undefined + + + + + unused and undefined + + + + + unused and undefined + + + + + driver detected an overload + + + + + This class stores convertors for different interleaved WaveFormat to ASIOSampleType separate channel + format. + + + + + Selects the sample convertor based on the input WaveFormat and the output ASIOSampleTtype. + + The wave format. + The type. + + + + + Optimized convertor for 2 channels SHORT + + + + + Generic convertor for SHORT + + + + + Optimized convertor for 2 channels FLOAT + + + + + Generic convertor Float to INT + + + + + Optimized convertor for 2 channels INT to INT + + + + + Generic convertor INT to INT + + + + + Optimized convertor for 2 channels INT to SHORT + + + + + Generic convertor INT to SHORT + + + + + Generic convertor INT to FLOAT + + + + + Optimized convertor for 2 channels SHORT + + + + + Generic convertor for SHORT + + + + + Optimized convertor for 2 channels FLOAT + + + + + Generic convertor SHORT + + + + + Generic converter 24 LSB + + + + + Generic convertor for float + + + + + ASIO Sample Type + + + + + Int 16 MSB + + + + + Int 24 MSB (used for 20 bits as well) + + + + + Int 32 MSB + + + + + IEEE 754 32 bit float + + + + + IEEE 754 64 bit double float + + + + + 32 bit data with 16 bit alignment + + + + + 32 bit data with 18 bit alignment + + + + + 32 bit data with 20 bit alignment + + + + + 32 bit data with 24 bit alignment + + + + + Int 16 LSB + + + + + Int 24 LSB + used for 20 bits as well + + + + + Int 32 LSB + + + + + IEEE 754 32 bit float, as found on Intel x86 architecture + + + + + IEEE 754 64 bit double float, as found on Intel x86 architecture + + + + + 32 bit data with 16 bit alignment + + + + + 32 bit data with 18 bit alignment + + + + + 32 bit data with 20 bit alignment + + + + + 32 bit data with 24 bit alignment + + + + + DSD 1 bit data, 8 samples per byte. First sample in Least significant bit. + + + + + DSD 1 bit data, 8 samples per byte. First sample in Most significant bit. + + + + + DSD 8 bit data, 1 sample per byte. No Endianness required. + + + + + ASIO common Exception. + + + + + Gets the name of the error. + + The error. + the name of the error + + + + Represents an installed ACM Driver + + + + + Helper function to determine whether a particular codec is installed + + The short name of the function + Whether the codec is installed + + + + Attempts to add a new ACM driver from a file + + Full path of the .acm or dll file containing the driver + Handle to the driver + + + + Removes a driver previously added using AddLocalDriver + + Local driver to remove + + + + Show Format Choose Dialog + + Owner window handle, can be null + Window title + Enumeration flags. None to get everything + Enumeration format. Only needed with certain enumeration flags + The selected format + Textual description of the selected format + Textual description of the selected format tag + True if a format was selected + + + + Gets the maximum size needed to store a WaveFormat for ACM interop functions + + + + + Finds a Driver by its short name + + Short Name + The driver, or null if not found + + + + Gets a list of the ACM Drivers installed + + + + + The callback for acmDriverEnum + + + + + Creates a new ACM Driver object + + Driver handle + + + + The short name of this driver + + + + + The full name of this driver + + + + + The driver ID + + + + + ToString + + + + + The list of FormatTags for this ACM Driver + + + + + Gets all the supported formats for a given format tag + + Format tag + Supported formats + + + + Opens this driver + + + + + Closes this driver + + + + + Dispose + + + + + Flags for use with acmDriverAdd + + + + + ACM_DRIVERADDF_LOCAL + + + + + ACM_DRIVERADDF_GLOBAL + + + + + ACM_DRIVERADDF_FUNCTION + + + + + ACM_DRIVERADDF_NOTIFYHWND + + + + + Interop structure for ACM driver details (ACMDRIVERDETAILS) + http://msdn.microsoft.com/en-us/library/dd742889%28VS.85%29.aspx + + + + + DWORD cbStruct + + + + + FOURCC fccType + + + + + FOURCC fccComp + + + + + WORD wMid; + + + + + WORD wPid + + + + + DWORD vdwACM + + + + + DWORD vdwDriver + + + + + DWORD fdwSupport; + + + + + DWORD cFormatTags + + + + + DWORD cFilterTags + + + + + HICON hicon + + + + + TCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]; + + + + + TCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]; + + + + + TCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]; + + + + + TCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]; + + + + + TCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]; + + + + + ACMDRIVERDETAILS_SHORTNAME_CHARS + + + + + ACMDRIVERDETAILS_LONGNAME_CHARS + + + + + ACMDRIVERDETAILS_COPYRIGHT_CHARS + + + + + ACMDRIVERDETAILS_LICENSING_CHARS + + + + + ACMDRIVERDETAILS_FEATURES_CHARS + + + + + Flags indicating what support a particular ACM driver has + + + + ACMDRIVERDETAILS_SUPPORTF_CODEC - Codec + + + ACMDRIVERDETAILS_SUPPORTF_CONVERTER - Converter + + + ACMDRIVERDETAILS_SUPPORTF_FILTER - Filter + + + ACMDRIVERDETAILS_SUPPORTF_HARDWARE - Hardware + + + ACMDRIVERDETAILS_SUPPORTF_ASYNC - Async + + + ACMDRIVERDETAILS_SUPPORTF_LOCAL - Local + + + ACMDRIVERDETAILS_SUPPORTF_DISABLED - Disabled + + + + ACM_DRIVERENUMF_NOLOCAL, Only global drivers should be included in the enumeration + + + + + ACM_DRIVERENUMF_DISABLED, Disabled ACM drivers should be included in the enumeration + + + + + ACM Format + + + + + Format Index + + + + + Format Tag + + + + + Support Flags + + + + + WaveFormat + + + + + WaveFormat Size + + + + + Format Description + + + + + ACMFORMATCHOOSE + http://msdn.microsoft.com/en-us/library/dd742911%28VS.85%29.aspx + + + + + DWORD cbStruct; + + + + + DWORD fdwStyle; + + + + + HWND hwndOwner; + + + + + LPWAVEFORMATEX pwfx; + + + + + DWORD cbwfx; + + + + + LPCTSTR pszTitle; + + + + + TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; + + + + + TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; + + + + + LPTSTR pszName; + n.b. can be written into + + + + + DWORD cchName + Should be at least 128 unless name is zero + + + + + DWORD fdwEnum; + + + + + LPWAVEFORMATEX pwfxEnum; + + + + + HINSTANCE hInstance; + + + + + LPCTSTR pszTemplateName; + + + + + LPARAM lCustData; + + + + + ACMFORMATCHOOSEHOOKPROC pfnHook; + + + + + None + + + + + ACMFORMATCHOOSE_STYLEF_SHOWHELP + + + + + ACMFORMATCHOOSE_STYLEF_ENABLEHOOK + + + + + ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE + + + + + ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE + + + + + ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT + + + + + ACMFORMATCHOOSE_STYLEF_CONTEXTHELP + + + + + ACMFORMATDETAILS + http://msdn.microsoft.com/en-us/library/dd742913%28VS.85%29.aspx + + + + + DWORD cbStruct; + + + + + DWORD dwFormatIndex; + + + + + DWORD dwFormatTag; + + + + + DWORD fdwSupport; + + + + + LPWAVEFORMATEX pwfx; + + + + + DWORD cbwfx; + + + + + TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; + + + + + ACMFORMATDETAILS_FORMAT_CHARS + + + + + Format Enumeration Flags + + + + + None + + + + + ACM_FORMATENUMF_CONVERT + The WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will only enumerate destination formats that can be converted from the given pwfx format. + + + + + ACM_FORMATENUMF_HARDWARE + The enumerator should only enumerate formats that are supported as native input or output formats on one or more of the installed waveform-audio devices. This flag provides a way for an application to choose only formats native to an installed waveform-audio device. This flag must be used with one or both of the ACM_FORMATENUMF_INPUT and ACM_FORMATENUMF_OUTPUT flags. Specifying both ACM_FORMATENUMF_INPUT and ACM_FORMATENUMF_OUTPUT will enumerate only formats that can be opened for input or output. This is true regardless of whether this flag is specified. + + + + + ACM_FORMATENUMF_INPUT + Enumerator should enumerate only formats that are supported for input (recording). + + + + + ACM_FORMATENUMF_NCHANNELS + The nChannels member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_NSAMPLESPERSEC + The nSamplesPerSec member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_OUTPUT + Enumerator should enumerate only formats that are supported for output (playback). + + + + + ACM_FORMATENUMF_SUGGEST + The WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate all suggested destination formats for the given pwfx format. This mechanism can be used instead of the acmFormatSuggest function to allow an application to choose the best suggested format for conversion. The dwFormatIndex member will always be set to zero on return. + + + + + ACM_FORMATENUMF_WBITSPERSAMPLE + The wBitsPerSample member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_WFORMATTAG + The wFormatTag member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. The dwFormatTag member of the ACMFORMATDETAILS structure must be equal to the wFormatTag member. + + + + + ACM_FORMATSUGGESTF_WFORMATTAG + + + + + ACM_FORMATSUGGESTF_NCHANNELS + + + + + ACM_FORMATSUGGESTF_NSAMPLESPERSEC + + + + + ACM_FORMATSUGGESTF_WBITSPERSAMPLE + + + + + ACM_FORMATSUGGESTF_TYPEMASK + + + + + ACM Format Tag + + + + + Format Tag Index + + + + + Format Tag + + + + + Format Size + + + + + Support Flags + + + + + Standard Formats Count + + + + + Format Description + + + + + DWORD cbStruct; + + + + + DWORD dwFormatTagIndex; + + + + + DWORD dwFormatTag; + + + + + DWORD cbFormatSize; + + + + + DWORD fdwSupport; + + + + + DWORD cStandardFormats; + + + + + TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; + + + + + ACMFORMATTAGDETAILS_FORMATTAG_CHARS + + + + + Interop definitions for Windows ACM (Audio Compression Manager) API + + + + + http://msdn.microsoft.com/en-us/library/dd742910%28VS.85%29.aspx + UINT ACMFORMATCHOOSEHOOKPROC acmFormatChooseHookProc( + HWND hwnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + + + + + A version with pointers for troubleshooting + + + + + AcmStream encapsulates an Audio Compression Manager Stream + used to convert audio from one format to another + + + + + Creates a new ACM stream to convert one format to another. Note that + not all conversions can be done in one step + + The source audio format + The destination audio format + + + + Creates a new ACM stream to convert one format to another, using a + specified driver identifier and wave filter + + the driver identifier + the source format + the wave filter + + + + Returns the number of output bytes for a given number of input bytes + + Number of input bytes + Number of output bytes + + + + Returns the number of source bytes for a given number of destination bytes + + Number of destination bytes + Number of source bytes + + + + Suggests an appropriate PCM format that the compressed format can be converted + to in one step + + The compressed format + The PCM format + + + + Returns the Source Buffer. Fill this with data prior to calling convert + + + + + Returns the Destination buffer. This will contain the converted data + after a successful call to Convert + + + + + Report that we have repositioned in the source stream + + + + + Converts the contents of the SourceBuffer into the DestinationBuffer + + The number of bytes in the SourceBuffer + that need to be converted + The number of source bytes actually converted + The number of converted bytes in the DestinationBuffer + + + + Converts the contents of the SourceBuffer into the DestinationBuffer + + The number of bytes in the SourceBuffer + that need to be converted + The number of converted bytes in the DestinationBuffer + + + + Frees resources associated with this ACM Stream + + + + + Frees resources associated with this ACM Stream + + + + + Frees resources associated with this ACM Stream + + + + + ACMSTREAMHEADER_STATUSF_DONE + + + + + ACMSTREAMHEADER_STATUSF_PREPARED + + + + + ACMSTREAMHEADER_STATUSF_INQUEUE + + + + + Interop structure for ACM stream headers. + ACMSTREAMHEADER + http://msdn.microsoft.com/en-us/library/dd742926%28VS.85%29.aspx + + + + + ACM_STREAMOPENF_QUERY, ACM will be queried to determine whether it supports the given conversion. A conversion stream will not be opened, and no handle will be returned in the phas parameter. + + + + + ACM_STREAMOPENF_ASYNC, Stream conversion should be performed asynchronously. If this flag is specified, the application can use a callback function to be notified when the conversion stream is opened and closed and after each buffer is converted. In addition to using a callback function, an application can examine the fdwStatus member of the ACMSTREAMHEADER structure for the ACMSTREAMHEADER_STATUSF_DONE flag. + + + + + ACM_STREAMOPENF_NONREALTIME, ACM will not consider time constraints when converting the data. By default, the driver will attempt to convert the data in real time. For some formats, specifying this flag might improve the audio quality or other characteristics. + + + + + CALLBACK_TYPEMASK, callback type mask + + + + + CALLBACK_NULL, no callback + + + + + CALLBACK_WINDOW, dwCallback is a HWND + + + + + CALLBACK_TASK, dwCallback is a HTASK + + + + + CALLBACK_FUNCTION, dwCallback is a FARPROC + + + + + CALLBACK_THREAD, thread ID replaces 16 bit task + + + + + CALLBACK_EVENT, dwCallback is an EVENT Handle + + + + + ACM_STREAMSIZEF_SOURCE + + + + + ACM_STREAMSIZEF_DESTINATION + + + + + Summary description for WaveFilter. + + + + + cbStruct + + + + + dwFilterTag + + + + + fdwFilter + + + + + reserved + + + + ACM_METRIC_COUNT_DRIVERS + + + ACM_METRIC_COUNT_CODECS + + + ACM_METRIC_COUNT_CONVERTERS + + + ACM_METRIC_COUNT_FILTERS + + + ACM_METRIC_COUNT_DISABLED + + + ACM_METRIC_COUNT_HARDWARE + + + ACM_METRIC_COUNT_LOCAL_DRIVERS + + + ACM_METRIC_COUNT_LOCAL_CODECS + + + ACM_METRIC_COUNT_LOCAL_CONVERTERS + + + ACM_METRIC_COUNT_LOCAL_FILTERS + + + ACM_METRIC_COUNT_LOCAL_DISABLED + + + ACM_METRIC_HARDWARE_WAVE_INPUT + + + ACM_METRIC_HARDWARE_WAVE_OUTPUT + + + ACM_METRIC_MAX_SIZE_FORMAT + + + ACM_METRIC_MAX_SIZE_FILTER + + + ACM_METRIC_DRIVER_SUPPORT + + + ACM_METRIC_DRIVER_PRIORITY + + + + ACM_STREAMCONVERTF_BLOCKALIGN + + + + + ACM_STREAMCONVERTF_START + + + + + ACM_STREAMCONVERTF_END + + + + + Wave Callback Info + + + + + Callback Strategy + + + + + Window Handle (if applicable) + + + + + Sets up a new WaveCallbackInfo for function callbacks + + + + + Sets up a new WaveCallbackInfo to use a New Window + IMPORTANT: only use this on the GUI thread + + + + + Sets up a new WaveCallbackInfo to use an existing window + IMPORTANT: only use this on the GUI thread + + + + + Wave Callback Strategy + + + + + Use a function + + + + + Create a new window (should only be done if on GUI thread) + + + + + Use an existing window handle + + + + + Use an event handle + + + + + WaveHeader interop structure (WAVEHDR) + http://msdn.microsoft.com/en-us/library/dd743837%28VS.85%29.aspx + + + + pointer to locked data buffer (lpData) + + + length of data buffer (dwBufferLength) + + + used for input only (dwBytesRecorded) + + + for client's use (dwUser) + + + assorted flags (dwFlags) + + + loop control counter (dwLoops) + + + PWaveHdr, reserved for driver (lpNext) + + + reserved for driver + + + + Wave Header Flags enumeration + + + + + WHDR_BEGINLOOP + This buffer is the first buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_DONE + Set by the device driver to indicate that it is finished with the buffer and is returning it to the application. + + + + + WHDR_ENDLOOP + This buffer is the last buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_INQUEUE + Set by Windows to indicate that the buffer is queued for playback. + + + + + WHDR_PREPARED + Set by Windows to indicate that the buffer has been prepared with the waveInPrepareHeader or waveOutPrepareHeader function. + + + + + WaveInCapabilities structure (based on WAVEINCAPS2 from mmsystem.h) + http://msdn.microsoft.com/en-us/library/ms713726(VS.85).aspx + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Number of channels supported + + + + + The product name + + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + Event Args for WaveInStream event + + + + + Creates new WaveInEventArgs + + + + + Buffer containing recorded data. Note that it might not be completely + full. + + + + + The number of recorded bytes in Buffer. + + + + + MME Wave function interop + + + + + CALLBACK_NULL + No callback + + + + + CALLBACK_FUNCTION + dwCallback is a FARPROC + + + + + CALLBACK_EVENT + dwCallback is an EVENT handle + + + + + CALLBACK_WINDOW + dwCallback is a HWND + + + + + CALLBACK_THREAD + callback is a thread ID + + + + + WIM_OPEN + + + + + WIM_CLOSE + + + + + WIM_DATA + + + + + WOM_CLOSE + + + + + WOM_DONE + + + + + WOM_OPEN + + + + + WaveOutCapabilities structure (based on WAVEOUTCAPS2 from mmsystem.h) + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_waveoutcaps_str.asp + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Optional functionality supported by the device + + + + + Number of channels supported + + + + + Whether playback control is supported + + + + + The product name + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Supported wave formats for WaveOutCapabilities + + + + + 11.025 kHz, Mono, 8-bit + + + + + 11.025 kHz, Stereo, 8-bit + + + + + 11.025 kHz, Mono, 16-bit + + + + + 11.025 kHz, Stereo, 16-bit + + + + + 22.05 kHz, Mono, 8-bit + + + + + 22.05 kHz, Stereo, 8-bit + + + + + 22.05 kHz, Mono, 16-bit + + + + + 22.05 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 48 kHz, Mono, 8-bit + + + + + 48 kHz, Stereo, 8-bit + + + + + 48 kHz, Mono, 16-bit + + + + + 48 kHz, Stereo, 16-bit + + + + + 96 kHz, Mono, 8-bit + + + + + 96 kHz, Stereo, 8-bit + + + + + 96 kHz, Mono, 16-bit + + + + + 96 kHz, Stereo, 16-bit + + + + + Flags indicating what features this WaveOut device supports + + + + supports pitch control (WAVECAPS_PITCH) + + + supports playback rate control (WAVECAPS_PLAYBACKRATE) + + + supports volume control (WAVECAPS_VOLUME) + + + supports separate left-right volume control (WAVECAPS_LRVOLUME) + + + (WAVECAPS_SYNC) + + + (WAVECAPS_SAMPLEACCURATE) + + + + Sample provider interface to make WaveChannel32 extensible + Still a bit ugly, hence internal at the moment - and might even make these into + bit depth converting WaveProviders + + + + + ADSR sample provider allowing you to specify attack, decay, sustain and release values + + + + + Creates a new AdsrSampleProvider with default values + + + + + Attack time in seconds + + + + + Release time in seconds + + + + + Reads audio from this sample provider + + + + + Enters the Release phase + + + + + The output WaveFormat + + + + + Sample Provider to concatenate multiple sample providers together + + + + + Creates a new ConcatenatingSampleProvider + + The source providers to play one after the other. Must all share the same sample rate and channel count + + + + The WaveFormat of this Sample Provider + + + + + Read Samples from this sample provider + + + + + Sample Provider to allow fading in and out + + + + + Creates a new FadeInOutSampleProvider + + The source stream with the audio to be faded in or out + If true, we start faded out + + + + Requests that a fade-in begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Requests that a fade-out begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Reads samples from this sample provider + + Buffer to read into + Offset within buffer to write to + Number of samples desired + Number of samples read + + + + WaveFormat of this SampleProvider + + + + + Simple SampleProvider that passes through audio unchanged and raises + an event every n samples with the maximum sample value from the period + for metering purposes + + + + + Number of Samples per notification + + + + + Raised periodically to inform the user of the max volume + + + + + Initialises a new instance of MeteringSampleProvider that raises 10 stream volume + events per second + + Source sample provider + + + + Initialises a new instance of MeteringSampleProvider + + source sampler provider + Number of samples between notifications + + + + The WaveFormat of this sample provider + + + + + Reads samples from this Sample Provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Event args for aggregated stream volume + + + + + Max sample values array (one for each channel) + + + + + A sample provider mixer, allowing inputs to be added and removed + + + + + Creates a new MixingSampleProvider, with no inputs, but a specified WaveFormat + + The WaveFormat of this mixer. All inputs must be in this format + + + + Creates a new MixingSampleProvider, based on the given inputs + + Mixer inputs - must all have the same waveformat, and must + all be of the same WaveFormat. There must be at least one input + + + + Returns the mixer inputs (read-only - use AddMixerInput to add an input + + + + + When set to true, the Read method always returns the number + of samples requested, even if there are no inputs, or if the + current inputs reach their end. Setting this to true effectively + makes this a never-ending sample provider, so take care if you plan + to write it out to a file. + + + + + Adds a WaveProvider as a Mixer input. + Must be PCM or IEEE float already + + IWaveProvider mixer input + + + + Adds a new mixer input + + Mixer input + + + + Raised when a mixer input has been removed because it has ended + + + + + Removes a mixer input + + Mixer input to remove + + + + Removes all mixer inputs + + + + + The output WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + SampleProvider event args + + + + + Constructs a new SampleProviderEventArgs + + + + + The Sample Provider + + + + + No nonsense mono to stereo provider, no volume adjustment, + just copies input to left and right. + + + + + Initializes a new instance of MonoToStereoSampleProvider + + Source sample provider + + + + WaveFormat of this provider + + + + + Reads samples from this provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Multiplier for left channel (default is 1.0) + + + + + Multiplier for right channel (default is 1.0) + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing sample provider, allowing re-patching of input channels to different + output channels + + Input sample providers. Must all be of the same sample rate, but can have any number of channels + Desired number of output channels. + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads samples from this sample provider + + Buffer to be filled with sample data + Offset into buffer to start writing to, usually 0 + Number of samples required + Number of samples read + + + + The output WaveFormat for this SampleProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Simple class that raises an event on every sample + + + + + Initializes a new instance of NotifyingSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Sample notifier + + + + + Allows you to: + 1. insert a pre-delay of silence before the source begins + 2. skip over a certain amount of the beginning of the source + 3. only play a set amount from the source + 4. insert silence at the end after the source is complete + + + + + Number of samples of silence to insert before playing source + + + + + Amount of silence to insert before playing + + + + + Number of samples in source to discard + + + + + Amount of audio to skip over from the source before beginning playback + + + + + Number of samples to read from source (if 0, then read it all) + + + + + Amount of audio to take from the source (TimeSpan.Zero means play to end) + + + + + Number of samples of silence to insert after playing source + + + + + Amount of silence to insert after playing source + + + + + Creates a new instance of offsetSampleProvider + + The Source Sample Provider to read from + + + + The WaveFormat of this SampleProvider + + + + + Reads from this sample provider + + Sample buffer + Offset within sample buffer to read to + Number of samples required + Number of samples read + + + + Converts a mono sample provider to stereo, with a customisable pan strategy + + + + + Initialises a new instance of the PanningSampleProvider + + Source sample provider, must be mono + + + + Pan value, must be between -1 (left) and 1 (right) + + + + + The pan strategy currently in use + + + + + The WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Pair of floating point values, representing samples or multipliers + + + + + Left value + + + + + Right value + + + + + Required Interface for a Panning Strategy + + + + + Gets the left and right multipliers for a given pan value + + Pan value from -1 to 1 + Left and right multipliers in a stereo sample pair + + + + Simplistic "balance" control - treating the mono input as if it was stereo + In the centre, both channels full volume. Opposite channel decays linearly + as balance is turned to to one side + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Square Root Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Sinus Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Linear Pan + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Converts an IWaveProvider containing 16 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm16BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Samples required + Number of samples read + + + + Converts an IWaveProvider containing 24 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm24BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 32 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm32BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 8 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm8BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples to read + Number of samples read + + + + Utility class that takes an IWaveProvider input at any bit depth + and exposes it as an ISampleProvider. Can turn mono inputs into stereo, + and allows adjusting of volume + (The eventual successor to WaveChannel32) + This class also serves as an example of how you can link together several simple + Sample Providers to form a more useful class. + + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + force mono inputs to become stereo + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + The WaveFormat of this Sample Provider + + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Raised periodically to inform the user of the max volume + (before the volume meter) + + + + + Helper base class for classes converting to ISampleProvider + + + + + Source Wave Provider + + + + + Source buffer (to avoid constantly creating small buffers during playback) + + + + + Initialises a new instance of SampleProviderConverterBase + + Source Wave provider + + + + Wave format of this wave provider + + + + + Reads samples from the source wave provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Ensure the source buffer exists and is big enough + + Bytes required + + + + Utility class for converting to SampleProvider + + + + + Helper function to go from IWaveProvider to a SampleProvider + Must already be PCM or IEEE float + + The WaveProvider to convert + A sample provider + + + + Helper class for when you need to convert back to an IWaveProvider from + an ISampleProvider. Keeps it as IEEE float + + + + + Initializes a new instance of the WaveProviderFloatToWaveProvider class + + Source wave provider + + + + Reads from this provider + + + + + The waveformat of this WaveProvider (same as the source) + + + + + Converts a sample provider to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts a sample provider to 24 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream, clipping if necessary + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + The Format of this IWaveProvider + + + + + + Volume of this channel. 1.0 = full scale, 0.0 to mute + + + + + Signal Generator + Sin, Square, Triangle, SawTooth, White Noise, Pink Noise, Sweep. + + + Posibility to change ISampleProvider + Example : + --------- + WaveOut _waveOutGene = new WaveOut(); + WaveGenerator wg = new SignalGenerator(); + wg.Type = ... + wg.Frequency = ... + wg ... + _waveOutGene.Init(wg); + _waveOutGene.Play(); + + + + + Initializes a new instance for the Generator (Default :: 44.1Khz, 2 channels, Sinus, Frequency = 440, Gain = 1) + + + + + Initializes a new instance for the Generator (UserDef SampleRate & Channels) + + Desired sample rate + Number of channels + + + + The waveformat of this WaveProvider (same as the source) + + + + + Frequency for the Generator. (20.0 - 20000.0 Hz) + Sin, Square, Triangle, SawTooth, Sweep (Start Frequency). + + + + + Return Log of Frequency Start (Read only) + + + + + End Frequency for the Sweep Generator. (Start Frequency in Frequency) + + + + + Return Log of Frequency End (Read only) + + + + + Gain for the Generator. (0.0 to 1.0) + + + + + Channel PhaseReverse + + + + + Type of Generator. + + + + + Length Seconds for the Sweep Generator. + + + + + Reads from this provider. + + + + + Private :: Random for WhiteNoise & Pink Noise (Value form -1 to 1) + + Random value from -1 to +1 + + + + Signal Generator type + + + + + Pink noise + + + + + White noise + + + + + Sweep + + + + + Sine wave + + + + + Square wave + + + + + Triangle Wave + + + + + Sawtooth wave + + + + + Author: Freefall + Date: 05.08.16 + Based on: the port of Stephan M. Bernsee´s pitch shifting class + Port site: https://sites.google.com/site/mikescoderama/pitch-shifting + Test application and github site: https://github.com/Freefall63/NAudio-Pitchshifter + + NOTE: I strongly advice to add a Limiter for post-processing. + For my needs the FastAttackCompressor1175 provides acceptable results: + https://github.com/Jiyuu/SkypeFX/blob/master/JSNet/FastAttackCompressor1175.cs + + UPDATE: Added a simple Limiter based on the pydirac implementation. + https://github.com/echonest/remix/blob/master/external/pydirac225/source/Dirac_LE.cpp + + + + + + Creates a new SMB Pitch Shifting Sample Provider with default settings + + Source provider + + + + Creates a new SMB Pitch Shifting Sample Provider with custom settings + + Source provider + FFT Size (any power of two <= 4096: 4096, 2048, 1024, 512, ...) + Oversampling (number of overlapping windows) + Initial pitch (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + Read from this sample provider + + + + + WaveFormat + + + + + Pitch Factor (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + + Takes a stereo input and turns it to mono + + + + + Creates a new mono ISampleProvider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this SampleProvider + + + + + Very simple sample provider supporting adjustable gain + + + + + Initializes a new instance of VolumeSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Helper class turning an already 32 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Helper class turning an already 64 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Fully managed resampling sample provider, based on the WDL Resampler + + + + + Constructs a new resampler + + Source to resample + Desired output sample rate + + + + Reads from this sample provider + + + + + Output WaveFormat + + + + + Useful extension methods to make switching between WaveAndSampleProvider easier + + + + + Converts a WaveProvider into a SampleProvider (only works for PCM) + + WaveProvider to convert + + + + + Allows sending a SampleProvider directly to an IWavePlayer without needing to convert + back to an IWaveProvider + + The WavePlayer + + + + + + Turns WaveFormatExtensible into a standard waveformat if possible + + Input wave format + A standard PCM or IEEE waveformat, or the original waveformat + + + + Converts a ISampleProvider to a IWaveProvider but still 32 bit float + + SampleProvider to convert + An IWaveProvider + + + + Converts a ISampleProvider to a IWaveProvider but and convert to 16 bit + + SampleProvider to convert + A 16 bit IWaveProvider + + + + Concatenates one Sample Provider on the end of another + + The sample provider to play first + The sample provider to play next + A single sampleprovider to play one after the other + + + + Concatenates one Sample Provider on the end of another with silence inserted + + The sample provider to play first + Silence duration to insert between the two + The sample provider to play next + A single sample provider + + + + Skips over a specified amount of time (by consuming source stream) + + Source sample provider + Duration to skip over + A sample provider that skips over the specified amount of time + + + + Takes a specified amount of time from the source stream + + Source sample provider + Duration to take + A sample provider that reads up to the specified amount of time + + + + Converts a Stereo Sample Provider to mono, allowing mixing of channel volume + + Stereo Source Provider + Amount of left channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + Amount of right channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + A mono SampleProvider + + + + Converts a Mono ISampleProvider to stereo + + Mono Source Provider + Amount to mix to left channel (1.0 is full volume) + Amount to mix to right channel (1.0 is full volume) + + + + + Microsoft ADPCM + See http://icculus.org/SDL_sound/downloads/external_documentation/wavecomp.htm + + + + + Empty constructor needed for marshalling from a pointer + + + + + Samples per block + + + + + Number of coefficients + + + + + Coefficients + + + + + Microsoft ADPCM + + Sample Rate + Channels + + + + Serializes this wave format + + Binary writer + + + + String Description of this WaveFormat + + + + + GSM 610 + + + + + Creates a GSM 610 WaveFormat + For now hardcoded to 13kbps + + + + + Samples per block + + + + + Writes this structure to a BinaryWriter + + + + + IMA/DVI ADPCM Wave Format + Work in progress + + + + + parameterless constructor for Marshalling + + + + + Creates a new IMA / DVI ADPCM Wave Format + + Sample Rate + Number of channels + Bits Per Sample + + + + MP3 WaveFormat, MPEGLAYER3WAVEFORMAT from mmreg.h + + + + + Wave format ID (wID) + + + + + Padding flags (fdwFlags) + + + + + Block Size (nBlockSize) + + + + + Frames per block (nFramesPerBlock) + + + + + Codec Delay (nCodecDelay) + + + + + Creates a new MP3 WaveFormat + + + + + Wave Format Padding Flags + + + + + MPEGLAYER3_FLAG_PADDING_ISO + + + + + MPEGLAYER3_FLAG_PADDING_ON + + + + + MPEGLAYER3_FLAG_PADDING_OFF + + + + + Wave Format ID + + + + MPEGLAYER3_ID_UNKNOWN + + + MPEGLAYER3_ID_MPEG + + + MPEGLAYER3_ID_CONSTANTFRAMESIZE + + + + DSP Group TrueSpeech + + + + + DSP Group TrueSpeech WaveFormat + + + + + Writes this structure to a BinaryWriter + + + + + Represents a Wave file format + + + + format type + + + number of channels + + + sample rate + + + for buffer estimation + + + block size of data + + + number of bits per sample of mono data + + + number of following bytes + + + + Creates a new PCM 44.1Khz stereo 16 bit format + + + + + Creates a new 16 bit wave format with the specified sample + rate and channel count + + Sample Rate + Number of channels + + + + Gets the size of a wave buffer equivalent to the latency in milliseconds. + + The milliseconds. + + + + + Creates a WaveFormat with custom members + + The encoding + Sample Rate + Number of channels + Average Bytes Per Second + Block Align + Bits Per Sample + + + + + Creates an A-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a Mu-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a new PCM format with the specified sample rate, bit depth and channels + + + + + Creates a new 32 bit IEEE floating point wave format + + sample rate + number of channels + + + + Helper function to retrieve a WaveFormat structure from a pointer + + WaveFormat structure + + + + + Helper function to marshal WaveFormat to an IntPtr + + WaveFormat + IntPtr to WaveFormat structure (needs to be freed by callee) + + + + Reads in a WaveFormat (with extra data) from a fmt chunk (chunk identifier and + length should already have been read) + + Binary reader + Format chunk length + A WaveFormatExtraData + + + + Reads a new WaveFormat object from a stream + + A binary reader that wraps the stream + + + + Reports this WaveFormat as a string + + String describing the wave format + + + + Compares with another WaveFormat object + + Object to compare to + True if the objects are the same + + + + Provides a Hashcode for this WaveFormat + + A hashcode + + + + Returns the encoding type used + + + + + Writes this WaveFormat object to a stream + + the output stream + + + + Returns the number of channels (1=mono,2=stereo etc) + + + + + Returns the sample rate (samples per second) + + + + + Returns the average number of bytes used per second + + + + + Returns the block alignment + + + + + Returns the number of bits per sample (usually 16 or 32, sometimes 24 or 8) + Can be 0 for some codecs + + + + + Returns the number of extra bytes used by this waveformat. Often 0, + except for compressed formats which store extra data after the WAVEFORMATEX header + + + + + Summary description for WaveFormatEncoding. + + + + WAVE_FORMAT_UNKNOWN, Microsoft Corporation + + + WAVE_FORMAT_PCM Microsoft Corporation + + + WAVE_FORMAT_ADPCM Microsoft Corporation + + + WAVE_FORMAT_IEEE_FLOAT Microsoft Corporation + + + WAVE_FORMAT_VSELP Compaq Computer Corp. + + + WAVE_FORMAT_IBM_CVSD IBM Corporation + + + WAVE_FORMAT_ALAW Microsoft Corporation + + + WAVE_FORMAT_MULAW Microsoft Corporation + + + WAVE_FORMAT_DTS Microsoft Corporation + + + WAVE_FORMAT_DRM Microsoft Corporation + + + WAVE_FORMAT_WMAVOICE9 + + + WAVE_FORMAT_OKI_ADPCM OKI + + + WAVE_FORMAT_DVI_ADPCM Intel Corporation + + + WAVE_FORMAT_IMA_ADPCM Intel Corporation + + + WAVE_FORMAT_MEDIASPACE_ADPCM Videologic + + + WAVE_FORMAT_SIERRA_ADPCM Sierra Semiconductor Corp + + + WAVE_FORMAT_G723_ADPCM Antex Electronics Corporation + + + WAVE_FORMAT_DIGISTD DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIFIX DSP Solutions, Inc. + + + WAVE_FORMAT_DIALOGIC_OKI_ADPCM Dialogic Corporation + + + WAVE_FORMAT_MEDIAVISION_ADPCM Media Vision, Inc. + + + WAVE_FORMAT_CU_CODEC Hewlett-Packard Company + + + WAVE_FORMAT_YAMAHA_ADPCM Yamaha Corporation of America + + + WAVE_FORMAT_SONARC Speech Compression + + + WAVE_FORMAT_DSPGROUP_TRUESPEECH DSP Group, Inc + + + WAVE_FORMAT_ECHOSC1 Echo Speech Corporation + + + WAVE_FORMAT_AUDIOFILE_AF36, Virtual Music, Inc. + + + WAVE_FORMAT_APTX Audio Processing Technology + + + WAVE_FORMAT_AUDIOFILE_AF10, Virtual Music, Inc. + + + WAVE_FORMAT_PROSODY_1612, Aculab plc + + + WAVE_FORMAT_LRC, Merging Technologies S.A. + + + WAVE_FORMAT_DOLBY_AC2, Dolby Laboratories + + + WAVE_FORMAT_GSM610, Microsoft Corporation + + + WAVE_FORMAT_MSNAUDIO, Microsoft Corporation + + + WAVE_FORMAT_ANTEX_ADPCME, Antex Electronics Corporation + + + WAVE_FORMAT_CONTROL_RES_VQLPC, Control Resources Limited + + + WAVE_FORMAT_DIGIREAL, DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIADPCM, DSP Solutions, Inc. + + + WAVE_FORMAT_CONTROL_RES_CR10, Control Resources Limited + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_MPEG, Microsoft Corporation + + + + + + + + + WAVE_FORMAT_MPEGLAYER3, ISO/MPEG Layer3 Format Tag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_GSM + + + WAVE_FORMAT_G729 + + + WAVE_FORMAT_G723 + + + WAVE_FORMAT_ACELP + + + + WAVE_FORMAT_RAW_AAC1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Windows Media Audio, WAVE_FORMAT_WMAUDIO2, Microsoft Corporation + + + + + Windows Media Audio Professional WAVE_FORMAT_WMAUDIO3, Microsoft Corporation + + + + + Windows Media Audio Lossless, WAVE_FORMAT_WMAUDIO_LOSSLESS + + + + + Windows Media Audio Professional over SPDIF WAVE_FORMAT_WMASPDIF (0x0164) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Advanced Audio Coding (AAC) audio in Audio Data Transport Stream (ADTS) format. + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_ADTS_AAC. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral band replication (SBR) or parametric stereo (PS) tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + + Source wmCodec.h + + + + MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_LOAS. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral SBR or PS tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + NOKIA_MPEG_ADTS_AAC + Source wmCodec.h + + + NOKIA_MPEG_RAW_AAC + Source wmCodec.h + + + VODAFONE_MPEG_ADTS_AAC + Source wmCodec.h + + + VODAFONE_MPEG_RAW_AAC + Source wmCodec.h + + + + High-Efficiency Advanced Audio Coding (HE-AAC) stream. + The format block is an HEAACWAVEFORMAT structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + WAVE_FORMAT_DVM + + + WAVE_FORMAT_VORBIS1 "Og" Original stream compatible + + + WAVE_FORMAT_VORBIS2 "Pg" Have independent header + + + WAVE_FORMAT_VORBIS3 "Qg" Have no codebook header + + + WAVE_FORMAT_VORBIS1P "og" Original stream compatible + + + WAVE_FORMAT_VORBIS2P "pg" Have independent headere + + + WAVE_FORMAT_VORBIS3P "qg" Have no codebook header + + + WAVE_FORMAT_EXTENSIBLE + + + + + + + WaveFormatExtensible + http://www.microsoft.com/whdc/device/audio/multichaud.mspx + + + + + Parameterless constructor for marshalling + + + + + Creates a new WaveFormatExtensible for PCM or IEEE + + + + + WaveFormatExtensible for PCM or floating point can be awkward to work with + This creates a regular WaveFormat structure representing the same audio format + Returns the WaveFormat unchanged for non PCM or IEEE float + + + + + + SubFormat (may be one of AudioMediaSubtypes) + + + + + Serialize + + + + + + String representation + + + + + This class used for marshalling from unmanaged code + + + + + Allows the extra data to be read + + + + + parameterless constructor for marshalling + + + + + Reads this structure from a BinaryReader + + + + + Writes this structure to a BinaryWriter + + + + + The WMA wave format. + May not be much use because WMA codec is a DirectShow DMO not an ACM + + + + + Generic interface for wave recording + + + + + Recording WaveFormat + + + + + Start Recording + + + + + Stop Recording + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + WASAPI Loopback Capture + based on a contribution from "Pygmy" - http://naudio.codeplex.com/discussions/203605 + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Gets the default audio loopback capture device + + The default audio loopback capture device + + + + Capturing wave format + + + + + Specify loopback + + + + + Allows recording using the Windows waveIn APIs + Events are raised as recorded buffers are made available + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Prepares a Wave input device for recording + + + + + Creates a WaveIn device using the specified window handle for callbacks + + A valid window handle + + + + Prepares a Wave input device for recording + + + + + Returns the number of Wave In devices available in the system + + + + + Retrieves the capabilities of a waveIn device + + Device to test + The WaveIn device capabilities + + + + Milliseconds for the buffer. Recommended value is 100ms + + + + + Number of Buffers to use (usually 2 or 3) + + + + + The device number to use + + + + + Called when we get a new buffer of recorded data + + + + + Start recording + + + + + Stop recording + + + + + Gets the current position in bytes from the wave input device. + it calls directly into waveInGetPosition) + + Position in bytes + + + + WaveFormat we are recording in + + + + + Dispose pattern + + + + + Microphone Level + + + + + Dispose method + + + + + Recording using waveIn api with event callbacks. + Use this for recording in non-gui applications + Events are raised as recorded buffers are made available + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Prepares a Wave input device for recording + + + + + Returns the number of Wave In devices available in the system + + + + + Retrieves the capabilities of a waveIn device + + Device to test + The WaveIn device capabilities + + + + Milliseconds for the buffer. Recommended value is 100ms + + + + + Number of Buffers to use (usually 2 or 3) + + + + + The device number to use + + + + + Start recording + + + + + Stop recording + + + + + Gets the current position in bytes from the wave input device. + it calls directly into waveInGetPosition) + + Position in bytes + + + + WaveFormat we are recording in + + + + + Dispose pattern + + + + + Microphone Level + + + + + Dispose method + + + + + This class writes audio data to a .aif file on disk + + + + + Creates an Aiff file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Aiff File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + AiffFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new AiffFileWriter + + The filename to write to + The Wave Format of the output data + + + + The aiff file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + WaveFormat of this aiff file + + + + + Returns false: Cannot read from a AiffFileWriter + + + + + Returns true: Can write to a AiffFileWriter + + + + + Returns false: Cannot seek within a AiffFileWriter + + + + + Read is not supported for a AiffFileWriter + + + + + Seek is not supported for a AiffFileWriter + + + + + SetLength is not supported for AiffFileWriter + + + + + + Gets the Position in the AiffFile (i.e. number of bytes written so far) + + + + + Appends bytes to the AiffFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Aiff file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Aiff file + They will be converted to the appropriate bit depth depending on the WaveFormat of the AIF file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Aiff file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this AiffFileWriter + + + + + Raised when ASIO data has been recorded. + It is important to handle this as quickly as possible as it is in the buffer callback + + + + + Initialises a new instance of AsioAudioAvailableEventArgs + + Pointers to the ASIO buffers for each channel + Pointers to the ASIO buffers for each channel + Number of samples in each buffer + Audio format within each buffer + + + + Pointer to a buffer per input channel + + + + + Pointer to a buffer per output channel + Allows you to write directly to the output buffers + If you do so, set SamplesPerBuffer = true, + and make sure all buffers are written to with valid data + + + + + Set to true if you have written to the output buffers + If so, AsioOut will not read from its source + + + + + Number of samples in each buffer + + + + + Converts all the recorded audio into a buffer of 32 bit floating point samples, interleaved by channel + + The samples as 32 bit floating point, interleaved + + + + Audio format within each buffer + Most commonly this will be one of, Int32LSB, Int16LSB, Int24LSB or Float32LSB + + + + + Gets as interleaved samples, allocating a float array + + The samples as 32 bit floating point values + + + + ASIO Out Player. New implementation using an internal C# binding. + + This implementation is only supporting Short16Bit and Float32Bit formats and is optimized + for 2 outputs channels . + SampleRate is supported only if AsioDriver is supporting it + + This implementation is probably the first AsioDriver binding fully implemented in C#! + + Original Contributor: Mark Heath + New Contributor to C# binding : Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Playback Stopped + + + + + When recording, fires whenever recorded audio is available + + + + + Initializes a new instance of the class with the first + available ASIO Driver. + + + + + Initializes a new instance of the class with the driver name. + + Name of the device. + + + + Opens an ASIO output device + + Device number (zero based) + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Dispose + + + + + Gets the names of the installed ASIO Driver. + + an array of driver names + + + + Determines whether ASIO is supported. + + + true if ASIO is supported; otherwise, false. + + + + + Inits the driver from the asio driver name. + + Name of the driver. + + + + Shows the control panel + + + + + Starts playback + + + + + Stops playback + + + + + Pauses playback + + + + + Initialises to play + + Source wave provider + + + + Initialises to play, with optional recording + + Source wave provider - set to null for record only + Number of channels to record + Specify sample rate here if only recording, ignored otherwise + + + + driver buffer update callback to fill the wave buffer. + + The input channels. + The output channels. + + + + Gets the latency (in ms) of the playback driver + + + + + Automatically stop when the end of the input stream is reached + Disable this if auto-stop is causing hanging issues + + + + + A flag to let you know that we have reached the end of the input file + Useful if AutoStop is set to false + You can monitor this yourself and call Stop when it is true + + + + + Playback State + + + + + Driver Name + + + + + The number of output channels we are currently using for playback + (Must be less than or equal to DriverOutputChannelCount) + + + + + The number of input channels we are currently recording from + (Must be less than or equal to DriverInputChannelCount) + + + + + The maximum number of input channels this ASIO driver supports + + + + + The maximum number of output channels this ASIO driver supports + + + + + The number of samples per channel, per buffer. + + + + + By default the first channel on the input WaveProvider is sent to the first ASIO output. + This option sends it to the specified channel number. + Warning: make sure you don't set it higher than the number of available output channels - + the number of source channels. + n.b. Future NAudio may modify this + + + + + Input channel offset (used when recording), allowing you to choose to record from just one + specific input rather than them all + + + + + Sets the volume (1.0 is unity gain) + Not supported for ASIO Out. Set the volume on the input stream instead + + + + + Get the input channel name + + channel index (zero based) + channel name + + + + Get the output channel name + + channel index (zero based) + channel name + + + + https://tech.ebu.ch/docs/tech/tech3285.pdf + + + + + Constructs a new BextChunkInfo + + + + + Description (max 256 chars) + + + + + Originator (max 32 chars) + + + + + Originator Reference (max 32 chars) + + + + + Originator Date Time + + + + + Origination Date as string + + + + + Origination as time + + + + + Time reference (first sample count since midnight) + + + + + version 2 has loudness stuff which we don't know so using version 1 + + + + + 64 bytes http://en.wikipedia.org/wiki/UMID + + + + + for version 2 = 180 bytes (10 before are loudness values), using version 1 = 190 bytes + + + + + Coding history arbitrary length string at end of structure + http://www.ebu.ch/CMSimages/fr/tec_text_r98-1999_tcm7-4709.pdf + A=PCM,F=48000,W=16,M=stereo,T=original,CR/LF + + + + + Broadcast WAVE File Writer + + + + + Createa a new BwfWriter + + Rarget filename + WaveFormat + Chunk information + + + + Write audio data to this BWF + + + + + Flush writer, and fix up header sizes + + + + + Disposes this writer + + + + + A wave file writer that adds cue support + + + + + Writes a wave file, including a cues chunk + + + + + Adds a cue to the Wave file + + Sample position + Label text + + + + Updates the header, and writes the cues out + + + + + NativeDirectSoundOut using DirectSound COM interop. + Contact author: Alexandre Mutel - alexandre_mutel at yahoo.fr + Modified by: Graham "Gee" Plumb + + + + + Playback Stopped + + + + + Gets the DirectSound output devices in the system + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + (40ms seems to work under Vista). + + The latency. + Selected device + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream) + + Position in bytes + + + + Gets the current position from the wave output device. + + + + + Initialise playback + + The waveprovider to be played + + + + Current playback state + + + + + + The volume 1.0 is full scale + + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Determines whether the SecondaryBuffer is lost. + + + true if [is buffer lost]; otherwise, false. + + + + + Convert ms to bytes size according to WaveFormat + + The ms + number of byttes + + + + Processes the samples in a separate thread. + + + + + Stop playback + + + + + Clean up the SecondaryBuffer + + + + In DirectSound, when playback is started, + the rest of the sound that was played last time is played back as noise. + This happens even if the secondary buffer is completely silenced, + so it seems that the buffer in the primary buffer or higher is not cleared. + + + To solve this problem fill the secondary buffer with silence data when stop playback. + + + + + + Feeds the SecondaryBuffer with the WaveStream + + number of bytes to feed + + + + IDirectSound interface + + + + + IDirectSoundBuffer interface + + + + + IDirectSoundNotify interface + + + + + Instanciate DirectSound from the DLL + + The GUID. + The direct sound. + The p unk outer. + + + + DirectSound default playback device GUID + + + + + DirectSound default capture device GUID + + + + + DirectSound default device for voice playback + + + + + DirectSound default device for voice capture + + + + + The DSEnumCallback function is an application-defined callback function that enumerates the DirectSound drivers. + The system calls this function in response to the application's call to the DirectSoundEnumerate or DirectSoundCaptureEnumerate function. + + Address of the GUID that identifies the device being enumerated, or NULL for the primary device. This value can be passed to the DirectSoundCreate8 or DirectSoundCaptureCreate8 function to create a device object for that driver. + Address of a null-terminated string that provides a textual description of the DirectSound device. + Address of a null-terminated string that specifies the module name of the DirectSound driver corresponding to this device. + Address of application-defined data. This is the pointer passed to DirectSoundEnumerate or DirectSoundCaptureEnumerate as the lpContext parameter. + Returns TRUE to continue enumerating drivers, or FALSE to stop. + + + + The DirectSoundEnumerate function enumerates the DirectSound drivers installed in the system. + + callback function + User context + + + + Gets the HANDLE of the desktop window. + + HANDLE of the Desktop window + + + + Class for enumerating DirectSound devices + + + + + The device identifier + + + + + Device description + + + + + Device module name + + + + + IWaveBuffer interface use to store wave datas. + Data can be manipulated with arrays (,, + , ) that are pointing to the same memory buffer. + This is a requirement for all subclasses. + + Use the associated Count property based on the type of buffer to get the number of data in the + buffer. + + for the standard implementation using C# unions. + + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets the byte buffer count. + + The byte buffer count. + + + + Gets the float buffer count. + + The float buffer count. + + + + Gets the short buffer count. + + The short buffer count. + + + + Gets the int buffer count. + + The int buffer count. + + + + Represents the interface to a device that can play a WaveFile + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Initialise playback + + The waveprovider to be played + + + + The volume + 1.0f is full scale + Note that not all implementations necessarily support volume changes + + + + + Current playback state + + + + + Indicates that playback has gone into a stopped state due to + reaching the end of the input stream or an error has been encountered during playback + + + + + Interface for IWavePlayers that can report position + + + + + Position (in terms of bytes played - does not necessarily translate directly to the position within the source audio file) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Generic interface for all WaveProviders. + + + + + Gets the WaveFormat of this WaveProvider. + + The wave format. + + + + Fill the specified buffer with wave data. + + The buffer to fill of wave data. + Offset into buffer + The number of bytes to read + the number of bytes written to the buffer. + + + + Like IWaveProvider, but makes it much simpler to put together a 32 bit floating + point mixing engine + + + + + Gets the WaveFormat of this Sample Provider. + + The wave format. + + + + Fill the specified buffer with 32 bit floating point samples + + The buffer to fill with samples. + Offset into buffer + The number of samples to read + the number of samples written to the buffer. + + + + Media Foundation Encoder class allows you to use Media Foundation to encode an IWaveProvider + to any supported encoding format + + + + + Queries the available bitrates for a given encoding output type, sample rate and number of channels + + Audio subtype - a value from the AudioSubtypes class + The sample rate of the PCM to encode + The number of channels of the PCM to encode + An array of available bitrates in average bits per second + + + + Gets all the available media types for a particular + + Audio subtype - a value from the AudioSubtypes class + An array of available media types that can be encoded with this subtype + + + + Helper function to simplify encoding Window Media Audio + Should be supported on Vista and above (not tested) + + Input provider, must be PCM + Output file path, should end with .wma + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Helper function to simplify encoding to MP3 + By default, will only be available on Windows 8 and above + + Input provider, must be PCM + Output file path, should end with .mp3 + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Helper function to simplify encoding to AAC + By default, will only be available on Windows 7 and above + + Input provider, must be PCM + Output file path, should end with .mp4 (or .aac on Windows 8) + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Tries to find the encoding media type with the closest bitrate to that specified + + Audio subtype, a value from AudioSubtypes + Your encoder input format (used to check sample rate and channel count) + Your desired bitrate + The closest media type, or null if none available + + + + Creates a new encoder that encodes to the specified output media type + + Desired output media type + + + + Encodes a file + + Output filename (container type is deduced from the filename) + Input provider (should be PCM, some encoders will also allow IEEE float) + + + + Disposes this instance + + + + + + Disposes this instance + + + + + Finalizer + + + + + Playback State + + + + + Stopped + + + + + Playing + + + + + Paused + + + + + Stopped Event Args + + + + + Initializes a new instance of StoppedEventArgs + + An exception to report (null if no exception) + + + + An exception. Will be null if the playback or record operation stopped due to + the user requesting stop or reached the end of the input audio + + + + + Support for playback using Wasapi + + + + + Playback Stopped + + + + + WASAPI Out shared mode, default + + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + Desired latency in milliseconds + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + true if sync is done with event. false use sleep. + Desired latency in milliseconds + + + + Creates a new WASAPI Output + + Device to use + + true if sync is done with event. false use sleep. + Desired latency in milliseconds + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Begin Playback + + + + + Stop playback and flush buffers + + + + + Stop playback without flushing buffers + + + + + Initialize for playing the specified wave stream + + IWaveProvider to play + + + + Playback State + + + + + Volume + + + + + Retrieve the AudioStreamVolume object for this audio stream + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Dispose + + + + + WaveBuffer class use to store wave datas. Data can be manipulated with arrays + (,,, ) that are pointing to the + same memory buffer. Use the associated Count property based on the type of buffer to get the number of + data in the buffer. + Implicit casting is now supported to float[], byte[], int[], short[]. + You must not use Length on returned arrays. + + n.b. FieldOffset is 8 now to allow it to work natively on 64 bit + + + + + Number of Bytes + + + + + Initializes a new instance of the class. + + The number of bytes. The size of the final buffer will be aligned on 4 Bytes (upper bound) + + + + Initializes a new instance of the class binded to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Binds this WaveBuffer instance to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets or sets the byte buffer count. + + The byte buffer count. + + + + Gets or sets the float buffer count. + + The float buffer count. + + + + Gets or sets the short buffer count. + + The short buffer count. + + + + Gets or sets the int buffer count. + + The int buffer count. + + + + Clears the associated buffer. + + + + + Copy this WaveBuffer to a destination buffer up to ByteBufferCount bytes. + + + + + Checks the validity of the count parameters. + + Name of the arg. + The value. + The size of value. + + + + This class writes WAV data to a .wav file on disk + + + + + Creates a 16 bit Wave File from an ISampleProvider + BEWARE: the source provider must not return data indefinitely + + The filename to write to + The source sample provider + + + + Creates a Wave file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + Writes to a stream by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The stream the method will output to + The source WaveProvider + + + + WaveFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new WaveFileWriter + + The filename to write to + The Wave Format of the output data + + + + The wave file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + Total time (calculated from Length and average bytes per second) + + + + + WaveFormat of this wave file + + + + + Returns false: Cannot read from a WaveFileWriter + + + + + Returns true: Can write to a WaveFileWriter + + + + + Returns false: Cannot seek within a WaveFileWriter + + + + + Read is not supported for a WaveFileWriter + + + + + Seek is not supported for a WaveFileWriter + + + + + SetLength is not supported for WaveFileWriter + + + + + + Gets the Position in the WaveFile (i.e. number of bytes written so far) + + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Wave file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Wave file + They will be converted to the appropriate bit depth depending on the WaveFormat of the WAV file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + Also updates header, so that WAV file will be valid up to the point currently written + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this WaveFileWriter + + + + + Represents a wave out device + + + + + Indicates playback has stopped automatically + + + + + Retrieves the capabilities of a waveOut device + + Device to test + The WaveOut device capabilities + + + + Returns the number of Wave Out devices available in the system + + + + + Gets or sets the desired latency in milliseconds + Should be set before a call to Init + + + + + Gets or sets the number of buffers used + Should be set before a call to Init + + + + + Gets or sets the device number + Should be set before a call to Init + This must be between -1 and DeviceCount - 1. + -1 means stick to default device even default device is changed + + + + + Creates a default WaveOut device + Will use window callbacks if called from a GUI thread, otherwise function + callbacks + + + + + Creates a WaveOut device using the specified window handle for callbacks + + A valid window handle + + + + Opens a WaveOut device + + + + + Initialises the WaveOut device + + WaveProvider to play + + + + Start playing the audio from the WaveStream + + + + + Pause the audio + + + + + Resume playing after a pause from the same position + + + + + Stop and reset the WaveOut device + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream - it calls directly into waveOutGetPosition) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Playback State + + + + + Volume for this device 1.0 is full scale + + + + + Closes this WaveOut device + + + + + Closes the WaveOut device and disposes of buffers + + True if called from Dispose + + + + Finalizer. Only called when user forgets to call Dispose + + + + + Alternative WaveOut class, making use of the Event callback + + + + + Indicates playback has stopped automatically + + + + + Gets or sets the desired latency in milliseconds + Should be set before a call to Init + + + + + Gets or sets the number of buffers used + Should be set before a call to Init + + + + + Gets or sets the device number + Should be set before a call to Init + This must be between -1 and DeviceCount - 1. + -1 means stick to default device even default device is changed + + + + + Opens a WaveOut device + + + + + Initialises the WaveOut device + + WaveProvider to play + + + + Start playing the audio from the WaveStream + + + + + Pause the audio + + + + + Resume playing after a pause from the same position + + + + + Stop and reset the WaveOut device + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream - it calls directly into waveOutGetPosition) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Playback State + + + + + Volume for this device 1.0 is full scale + + + + + Closes this WaveOut device + + + + + Closes the WaveOut device and disposes of buffers + + True if called from Dispose + + + + Finalizer. Only called when user forgets to call Dispose + + + + + Provides a buffered store of samples + Read method will return queued samples or fill buffer with zeroes + Now backed by a circular buffer + + + + + Creates a new buffered WaveProvider + + WaveFormat + + + + If true, always read the amount of data requested, padding with zeroes if necessary + By default is set to true + + + + + Buffer length in bytes + + + + + Buffer duration + + + + + If true, when the buffer is full, start throwing away data + if false, AddSamples will throw an exception when buffer is full + + + + + The number of buffered bytes + + + + + Buffered Duration + + + + + Gets the WaveFormat + + + + + Adds samples. Takes a copy of buffer, so that buffer can be reused if necessary + + + + + Reads from this WaveProvider + Will always return count bytes, since we will zero-fill the buffer if not enough available + + + + + Discards all audio from the buffer + + + + + Provide WaveProvider that can apply effects in real time using DMO. + + If the audio thread is running on the STA thread, please generate and operate from the same thread. + If the audio thread is running on the MTA thread, please operate on any MTA thread. + + Types of DMO effectors to use + Parameters of the effect to be used + + + + Create a new DmoEffectWaveProvider + + Input Stream + + + + Stream Wave Format + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Get Effector Parameters + + + + + Dispose + + + + + The Media Foundation Resampler Transform + + + + + Creates the Media Foundation Resampler, allowing modifying of sample rate, bit depth and channel count + + Source provider, must be PCM + Output format, must also be PCM + + + + Creates a resampler with a specified target output sample rate + + Source provider + Output sample rate + + + + Creates and configures the actual Resampler transform + + A newly created and configured resampler MFT + + + + Gets or sets the Resampler quality. n.b. set the quality before starting to resample. + 1 is lowest quality (linear interpolation) and 60 is best quality + + + + + Disposes this resampler + + + + + WaveProvider that can mix together multiple 32 bit floating point input provider + All channels must have the same number of inputs and same sample rate + n.b. Work in Progress - not tested yet + + + + + Creates a new MixingWaveProvider32 + + + + + Creates a new 32 bit MixingWaveProvider32 + + inputs - must all have the same format. + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove an input from the mixer + + waveProvider to remove + + + + The number of inputs to this mixer + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Converts from mono to stereo, allowing freedom to route all, some, or none of the incoming signal to left or right channels + + + + + Creates a new stereo waveprovider based on a mono input + + Mono 16 bit PCM input + + + + 1.0 to copy the mono stream to the left channel without adjusting volume + + + + + 1.0 to copy the mono stream to the right channel without adjusting volume + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels. Number of outputs is equal to total number of channels in inputs + + Input wave providers. Must all be of the same format, but can have any number of channels + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels + + Input wave providers. Must all be of the same format, but can have any number of channels + Desired number of output channels. (-1 means use total number of input channels) + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads data from this WaveProvider + + Buffer to be filled with sample data + Offset to write to within buffer, usually 0 + Number of bytes required + Number of bytes read + + + + The WaveFormat of this WaveProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Silence producing wave provider + Useful for playing silence when doing a WASAPI Loopback Capture + + + + + Creates a new silence producing wave provider + + Desired WaveFormat (should be PCM / IEE float + + + + Read silence from into the buffer + + + + + WaveFormat of this silence producing wave provider + + + + + Takes a stereo 16 bit input and turns it mono, allowing you to select left or right channel only or mix them together + + + + + Creates a new mono waveprovider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Helper class allowing us to modify the volume of a 16 bit stream without converting to IEEE float + + + + + Constructs a new VolumeWaveProvider16 + + Source provider, must be 16 bit PCM + + + + Gets or sets volume. + 1.0 is full scale, 0.0 is silence, anything over 1.0 will amplify but potentially clip + + + + + WaveFormat of this WaveProvider + + + + + Read bytes from this WaveProvider + + Buffer to read into + Offset within buffer to read to + Bytes desired + Bytes read + + + + Converts 16 bit PCM to IEEE float, optionally adjusting volume along the way + + + + + Creates a new Wave16toFloatProvider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts IEEE float to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Creates a new WaveFloatTo16Provider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Buffered WaveProvider taking source data from WaveIn + + + + + Creates a new WaveInProvider + n.b. Should make sure the WaveFormat is set correctly on IWaveIn before calling + + The source of wave data + + + + Reads data from the WaveInProvider + + + + + The WaveFormat + + + + + Base class for creating a 16 bit wave provider + + + + + Initializes a new instance of the WaveProvider16 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider16 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a short array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Base class for creating a 32 bit floating point wave provider + Can also be used as a base class for an ISampleProvider that can + be plugged straight into anything requiring an IWaveProvider + + + + + Initializes a new instance of the WaveProvider32 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider32 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a float array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Utility class to intercept audio from an IWaveProvider and + save it to disk + + + + + Constructs a new WaveRecorder + + The location to write the WAV file to + The Source Wave Provider + + + + Read simply returns what the source returns, but writes to disk along the way + + + + + The WaveFormat + + + + + Closes the WAV file + + + + A read-only stream of AIFF data based on an aiff file + with an associated WaveFormat + originally contributed to NAudio by Giawa + + + + Supports opening a AIF file + The AIF is of similar nastiness to the WAV format. + This supports basic reading of uncompressed PCM AIF files, + with 8, 16, 24 and 32 bit PCM data. + + + + + Creates an Aiff File Reader based on an input stream + + The input stream containing a AIF file including header + + + + Ensures valid AIFF header and then finds data offset. + + The stream, positioned at the start of audio data + The format found + The position of the data chunk + The length of the data chunk + Additional chunks found + + + + Cleans up the resources associated with this AiffFileReader + + + + + + + + + + + + + + + Number of Samples (if possible to calculate) + + + + + Position in the AIFF file + + + + + + Reads bytes from the AIFF File + + + + + + AIFF Chunk + + + + + Chunk Name + + + + + Chunk Length + + + + + Chunk start + + + + + Creates a new AIFF Chunk + + + + + AudioFileReader simplifies opening an audio file in NAudio + Simply pass in the filename, and it will attempt to open the + file and set up a conversion path that turns into PCM IEEE float. + ACM codecs will be used for conversion. + It provides a volume property and implements both WaveStream and + ISampleProvider, making it possibly the only stage in your audio + pipeline necessary for simple playback scenarios + + + + + Initializes a new instance of AudioFileReader + + The file to open + + + + Creates the reader stream, supporting all filetypes in the core NAudio library, + and ensuring we are in PCM format + + File Name + + + + File Name + + + + + WaveFormat of this stream + + + + + Length of this stream (in bytes) + + + + + Position of this stream (in bytes) + + + + + Reads from this wave stream + + Audio buffer + Offset into buffer + Number of bytes required + Number of bytes read + + + + Reads audio from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Gets or Sets the Volume of this AudioFileReader. 1.0f is full volume + + + + + Helper to convert source to dest bytes + + + + + Helper to convert dest to source bytes + + + + + Disposes this AudioFileReader + + True if called from Dispose + + + + Helper stream that lets us read from compressed audio files with large block alignment + as though we could read any amount and reposition anywhere + + + + + Creates a new BlockAlignReductionStream + + the input stream + + + + Block alignment of this stream + + + + + Wave Format + + + + + Length of this Stream + + + + + Current position within stream + + + + + Disposes this WaveStream + + + + + Reads data from this stream + + + + + + + + + Implementation of Com IStream + + + + + Holds information on a cue: a labeled position within a Wave file + + + + + Cue position in samples + + + + + Label of the cue + + + + + Creates a Cue based on a sample position and label + + + + + + + Holds a list of cues + + + The specs for reading and writing cues from the cue and list RIFF chunks + are from http://www.sonicspot.com/guide/wavefiles.html and http://www.wotsit.org/ + ------------------------------ + The cues are stored like this: + ------------------------------ + struct CuePoint + { + Int32 dwIdentifier; + Int32 dwPosition; + Int32 fccChunk; + Int32 dwChunkStart; + Int32 dwBlockStart; + Int32 dwSampleOffset; + } + + struct CueChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwCuePoints; + CuePoint[] points; + } + ------------------------------ + Labels look like this: + ------------------------------ + struct ListHeader + { + Int32 listID; /* 'list' */ + Int32 chunkSize; /* includes the Type ID below */ + Int32 typeID; /* 'adtl' */ + } + + struct LabelChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwIdentifier; + Char[] dwText; /* Encoded with extended ASCII */ + } LabelChunk; + + + + + Creates an empty cue list + + + + + Adds an item to the list + + Cue + + + + Gets sample positions for the embedded cues + + Array containing the cue positions + + + + Gets labels for the embedded cues + + Array containing the labels + + + + Creates a cue list from the cue RIFF chunk and the list RIFF chunk + + The data contained in the cue chunk + The data contained in the list chunk + + + + Gets the cues as the concatenated cue and list RIFF chunks. + + RIFF chunks containing the cue data + + + + Number of cues + + + + + Accesses the cue at the specified index + + + + + + + Checks if the cue and list chunks exist and if so, creates a cue list + + + + + A wave file reader supporting cue reading + + + + + Loads a wavefile and supports reading cues + + + + + + Loads a wave from a stream and supports reading cues + + + + + + Cue List (can be null if cues not present) + + + + + An interface for WaveStreams which can report notification of individual samples + + + + + A sample has been detected + + + + + Sample event arguments + + + + + Left sample + + + + + Right sample + + + + + Constructor + + + + + Class for reading any file that Media Foundation can play + Will only work in Windows Vista and above + Automatically converts to PCM + If it is a video file with multiple audio streams, it will pick out the first audio stream + + + + + Allows customisation of this reader class + + + + + Sets up the default settings for MediaFoundationReader + + + + + Allows us to request IEEE float output (n.b. no guarantee this will be accepted) + + + + + If true, the reader object created in the constructor is used in Read + Should only be set to true if you are working entirely on an STA thread, or + entirely with MTA threads. + + + + + If true, the reposition does not happen immediately, but waits until the + next call to read to be processed. + + + + + Default constructor + + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename (can also be a URL e.g. http:// mms:// file://) + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename + Advanced settings + + + + Initializes + + + + + Creates the reader (overridable by ) + + + + + Reads from this wave stream + + Buffer to read into + Offset in buffer + Bytes required + Number of bytes read; 0 indicates end of stream + + + + WaveFormat of this stream (n.b. this is after converting to PCM) + + + + + The bytesRequired of this stream in bytes (n.b may not be accurate) + + + + + Current position within this stream + + + + + Cleans up after finishing with this reader + + true if called from Dispose + + + + WaveFormat has changed + + + + + Class for reading from MP3 files + + + + + The MP3 wave format (n.b. NOT the output format of this stream - see the WaveFormat property) + + + + Supports opening a MP3 file + + + Supports opening a MP3 file + MP3 File name + Factory method to build a frame decompressor + + + + Opens MP3 from a stream rather than a file + Will not dispose of this stream itself + + The incoming stream containing MP3 data + + + + Opens MP3 from a stream rather than a file + Will not dispose of this stream itself + + The incoming stream containing MP3 data + Factory method to build a frame decompressor + + + + Function that can create an MP3 Frame decompressor + + A WaveFormat object describing the MP3 file format + An MP3 Frame decompressor + + + + Creates an ACM MP3 Frame decompressor. This is the default with NAudio + + A WaveFormat object based + + + + + Gets the total length of this file in milliseconds. + + + + + ID3v2 tag if present + + + + + ID3v1 tag if present + + + + + Reads the next mp3 frame + + Next mp3 frame, or null if EOF + + + + Reads the next mp3 frame + + Next mp3 frame, or null if EOF + + + + This is the length in bytes of data available to be read out from the Read method + (i.e. the decompressed MP3 length) + n.b. this may return 0 for files whose length is unknown + + + + + + + + + + + + + + + Reads decompressed PCM data from our MP3 file. + + + + + Xing header if present + + + + + Disposes this WaveStream + + + + + WaveStream that simply passes on data from its source stream + (e.g. a MemoryStream) + + + + + Initialises a new instance of RawSourceWaveStream + + The source stream containing raw audio + The waveformat of the audio in the source stream + + + + Initialises a new instance of RawSourceWaveStream + + The buffer containing raw audio + Offset in the source buffer to read from + Number of bytes to read in the buffer + The waveformat of the audio in the source stream + + + + The WaveFormat of this stream + + + + + The length in bytes of this stream (if supported) + + + + + The current position in this stream + + + + + Reads data from the stream + + + + + Wave Stream for converting between sample rates + + + + + WaveStream to resample using the DMO Resampler + + Input Stream + Desired Output Format + + + + Stream Wave Format + + + + + Stream length in bytes + + + + + Stream position in bytes + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Dispose + + True if disposing (not from finalizer) + + + + Holds information about a RIFF file chunk + + + + + Creates a RiffChunk object + + + + + The chunk identifier + + + + + The chunk identifier converted to a string + + + + + The chunk length + + + + + The stream position this chunk is located at + + + + + A simple compressor + + + + + Create a new simple compressor stream + + Source stream + + + + Make-up Gain + + + + + Threshold + + + + + Ratio + + + + + Attack time + + + + + Release time + + + + + Turns gain on or off + + + + + Gets the WaveFormat of this stream + + + + + Reads bytes from this stream + + Buffer to read into + Offset in array to read into + Number of bytes to read + Number of bytes read + + + + MediaFoundationReader supporting reading from a stream + + + + + Constructs a new media foundation reader from a stream + + + + + Creates the reader + + + + + WaveStream that converts 32 bit audio back down to 16 bit, clipping if necessary + + + + + The method reuses the same buffer to prevent + unnecessary allocations. + + + + + Creates a new Wave32To16Stream + + the source stream + + + + Sets the volume for this stream. 1.0f is full scale + + + + + + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + Destination buffer + Offset into destination buffer + + Number of bytes read. + + + + Conversion to 16 bit and clipping + + + + + + + + + + Clip indicator. Can be reset. + + + + + Disposes this WaveStream + + + + + Represents Channel for the WaveMixerStream + 32 bit output and 16 bit input + It's output is always stereo + The input stream can be panned + + + + + Creates a new WaveChannel32 + + the source stream + stream volume (1 is 0dB) + pan control (-1 to 1) + + + + Creates a WaveChannel32 with default settings + + The source stream + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + If true, Read always returns the number of bytes requested + + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Pan of this channel (from -1 to 1) + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + Sample + + + + + Raise the sample event (no check for null because it has already been done) + + + + This class supports the reading of WAV files, + providing a repositionable WaveStream that returns the raw data + contained in the WAV file + + + + Supports opening a WAV file + The WAV file format is a real mess, but we will only + support the basic WAV file format which actually covers the vast + majority of WAV files out there. For more WAV file format information + visit www.wotsit.org. If you have a WAV file that can't be read by + this class, email it to the NAudio project and we will probably + fix this reader to support it + + + + + Creates a Wave File Reader based on an input stream + + The input stream containing a WAV file including header + + + + Gets a list of the additional chunks found in this file + + + + + Gets the data for the specified chunk + + + + + Cleans up the resources associated with this WaveFileReader + + + + + + + + + + This is the length of audio data contained in this WAV file, in bytes + (i.e. the byte length of the data chunk, not the length of the WAV file itself) + + + + + + Number of Sample Frames (if possible to calculate) + This currently does not take into account number of channels + Multiply number of channels if you want the total number of samples + + + + + Position in the WAV data chunk. + + + + + + Reads bytes from the Wave File + + + + + + Attempts to read the next sample or group of samples as floating point normalised into the range -1.0f to 1.0f + + An array of samples, 1 for mono, 2 for stereo etc. Null indicates end of file reached + + + + + Attempts to read a sample into a float. n.b. only applicable for uncompressed formats + Will normalise the value read into the range -1.0f to 1.0f if it comes from a PCM encoding + + False if the end of the WAV data chunk was reached + + + + IWaveProvider that passes through an ACM Codec + + + + + Create a new WaveFormat conversion stream + + Desired output format + Source Provider + + + + Gets the WaveFormat of this stream + + + + + Indicates that a reposition has taken place, and internal buffers should be reset + + + + + Reads bytes from this stream + + Buffer to read into + Offset in buffer to read into + Number of bytes to read + Number of bytes read + + + + Disposes this stream + + true if the user called this + + + + Disposes this resource + + + + + Finalizer + + + + + WaveStream that passes through an ACM Codec + + + + + Create a new WaveFormat conversion stream + + Desired output format + Source stream + + + + Creates a stream that can convert to PCM + + The source stream + A PCM stream + + + + Gets or sets the current position in the stream + + + + + Converts source bytes to destination bytes + + + + + Converts destination bytes to source bytes + + + + + Returns the stream length + + + + + Gets the WaveFormat of this stream + + + + + + + Buffer to read into + Offset within buffer to write to + Number of bytes to read + Bytes read + + + + Disposes this stream + + true if the user called this + + + + A buffer of Wave samples + + + + + creates a new wavebuffer + + WaveIn device to write to + Buffer size in bytes + + + + Place this buffer back to record more audio + + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + + Provides access to the actual record buffer (for reading only) + + + + + Indicates whether the Done flag is set on this buffer + + + + + Indicates whether the InQueue flag is set on this buffer + + + + + Number of bytes recorded + + + + + The buffer size in bytes + + + + + WaveStream that can mix together multiple 32 bit input streams + (Normally used with stereo input channels) + All channels must have the same number of inputs + + + + + Creates a new 32 bit WaveMixerStream + + + + + Creates a new 32 bit WaveMixerStream + + An Array of WaveStreams - must all have the same format. + Use WaveChannel is designed for this purpose. + Automatically stop when all inputs have been read + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove a WaveStream from the mixer + + waveStream to remove + + + + The number of inputs to this mixer + + + + + Automatically stop when all inputs have been read + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Length of this Wave Stream (in bytes) + + + + + + Position within this Wave Stream (in bytes) + + + + + + + + + + + Disposes this WaveStream + + + + + Simply shifts the input stream in time, optionally + clipping its start and end. + (n.b. may include looping in the future) + + + + + Creates a new WaveOffsetStream + + the source stream + the time at which we should start reading from the source stream + amount to trim off the front of the source stream + length of time to play from source stream + + + + Creates a WaveOffsetStream with default settings (no offset or pre-delay, + and whole length of source stream) + + The source stream + + + + The length of time before which no audio will be played + + + + + An offset into the source stream from which to start playing + + + + + Length of time to read from the source stream + + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + A buffer of Wave samples for streaming to a Wave Output device + + + + + creates a new wavebuffer + + WaveOut device to write to + Buffer size in bytes + Stream to provide more data + Lock to protect WaveOut API's from being called on >1 thread + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + this is called by the WAVE callback and should be used to refill the buffer + + + + Whether the header's in queue flag is set + + + + + The buffer size in bytes + + + + + Base class for all WaveStream classes. Derives from stream. + + + + + Retrieves the WaveFormat for this stream + + + + + We can read from this stream + + + + + We can seek within this stream + + + + + We can't write to this stream + + + + + Flush does not need to do anything + See + + + + + An alternative way of repositioning. + See + + + + + Sets the length of the WaveStream. Not Supported. + + + + + + Writes to the WaveStream. Not Supported. + + + + + The block alignment for this wavestream. Do not modify the Position + to anything that is not a whole multiple of this value + + + + + Moves forward or backwards the specified number of seconds in the stream + + Number of seconds to move, can be negative + + + + The current position in the stream in Time format + + + + + Total length in real-time of the stream (may be an estimate for compressed files) + + + + + Whether the WaveStream has non-zero sample data at the current position for the + specified count + + Number of bytes to read + + + + MP3 Frame decompressor using the Windows Media MP3 Decoder DMO object + + + + + Initializes a new instance of the DMO MP3 Frame decompressor + + + + + + Converted PCM WaveFormat + + + + + Decompress a single frame of MP3 + + + + + Alerts us that a reposition has occured so the MP3 decoder needs to reset its state + + + + + Dispose of this obejct and clean up resources + + + + + http://tech.ebu.ch/docs/tech/tech3306-2009.pdf + + + + + WaveFormat + + + + + Data Chunk Position + + + + + Data Chunk Length + + + + + Riff Chunks + + + + + Soundfont generator + + + + + Gets the generator type + + + + + Generator amount as an unsigned short + + + + + Generator amount as a signed short + + + + + Low byte amount + + + + + High byte amount + + + + + Instrument + + + + + Sample Header + + + + + + + + + + Generator types + + + + Start address offset + + + End address offset + + + Start loop address offset + + + End loop address offset + + + Start address coarse offset + + + Modulation LFO to pitch + + + Vibrato LFO to pitch + + + Modulation envelope to pitch + + + Initial filter cutoff frequency + + + Initial filter Q + + + Modulation LFO to filter Cutoff frequency + + + Modulation envelope to filter cutoff frequency + + + End address coarse offset + + + Modulation LFO to volume + + + Unused + + + Chorus effects send + + + Reverb effects send + + + Pan + + + Unused + + + Unused + + + Unused + + + Delay modulation LFO + + + Frequency modulation LFO + + + Delay vibrato LFO + + + Frequency vibrato LFO + + + Delay modulation envelope + + + Attack modulation envelope + + + Hold modulation envelope + + + Decay modulation envelope + + + Sustain modulation envelop + + + Release modulation envelope + + + Key number to modulation envelope hold + + + Key number to modulation envelope decay + + + Delay volume envelope + + + Attack volume envelope + + + Hold volume envelope + + + Decay volume envelope + + + Sustain volume envelope + + + Release volume envelope + + + Key number to volume envelope hold + + + Key number to volume envelope decay + + + Instrument + + + Reserved + + + Key range + + + Velocity range + + + Start loop address coarse offset + + + Key number + + + Velocity + + + Initial attenuation + + + Reserved + + + End loop address coarse offset + + + Coarse tune + + + Fine tune + + + Sample ID + + + Sample modes + + + Reserved + + + Scale tuning + + + Exclusive class + + + Overriding root key + + + Unused + + + Unused + + + + A soundfont info chunk + + + + + SoundFont Version + + + + + WaveTable sound engine + + + + + Bank name + + + + + Data ROM + + + + + Creation Date + + + + + Author + + + + + Target Product + + + + + Copyright + + + + + Comments + + + + + Tools + + + + + ROM Version + + + + + + + + + + SoundFont instrument + + + + + instrument name + + + + + Zones + + + + + + + + + + Instrument Builder + + + + + Transform Types + + + + + Linear + + + + + Modulator + + + + + Source Modulation data type + + + + + Destination generator type + + + + + Amount + + + + + Source Modulation Amount Type + + + + + Source Transform Type + + + + + + + + + + Controller Sources + + + + + No Controller + + + + + Note On Velocity + + + + + Note On Key Number + + + + + Poly Pressure + + + + + Channel Pressure + + + + + Pitch Wheel + + + + + Pitch Wheel Sensitivity + + + + + Source Types + + + + + Linear + + + + + Concave + + + + + Convex + + + + + Switch + + + + + Modulator Type + + + + + + + + + + + A SoundFont Preset + + + + + Preset name + + + + + Patch Number + + + + + Bank number + 0 - 127, GM percussion bank is 128 + + + + + Zones + + + + + + + + + + Class to read the SoundFont file presets chunk + + + + + The Presets contained in this chunk + + + + + The instruments contained in this chunk + + + + + The sample headers contained in this chunk + + + + + + + + + + just reads a chunk ID at the current position + + chunk ID + + + + reads a chunk at the current position + + + + + creates a new riffchunk from current position checking that we're not + at the end of this chunk first + + the new chunk + + + + useful for chunks that just contain a string + + chunk as string + + + + A SoundFont Sample Header + + + + + The sample name + + + + + Start offset + + + + + End offset + + + + + Start loop point + + + + + End loop point + + + + + Sample Rate + + + + + Original pitch + + + + + Pitch correction + + + + + Sample Link + + + + + SoundFont Sample Link Type + + + + + + + + + + SoundFont sample modes + + + + + No loop + + + + + Loop Continuously + + + + + Reserved no loop + + + + + Loop and continue + + + + + Sample Link Type + + + + + Mono Sample + + + + + Right Sample + + + + + Left Sample + + + + + Linked Sample + + + + + ROM Mono Sample + + + + + ROM Right Sample + + + + + ROM Left Sample + + + + + ROM Linked Sample + + + + + SoundFont Version Structure + + + + + Major Version + + + + + Minor Version + + + + + Builds a SoundFont version + + + + + Reads a SoundFont Version structure + + + + + Writes a SoundFont Version structure + + + + + Gets the length of this structure + + + + + Represents a SoundFont + + + + + Loads a SoundFont from a file + + Filename of the SoundFont + + + + Loads a SoundFont from a stream + + stream + + + + The File Info Chunk + + + + + The Presets + + + + + The Instruments + + + + + The Sample Headers + + + + + The Sample Data + + + + + + + + + + base class for structures that can read themselves + + + + + A SoundFont zone + + + + + + + + + + Modulators for this Zone + + + + + Generators for this Zone + + + + + Summary description for Fader. + + + + + Required designer variable. + + + + + Creates a new Fader control + + + + + Clean up any resources being used. + + + + + + + + + + + + + + + + + + + + + + + + + Minimum value of this fader + + + + + Maximum value of this fader + + + + + Current value of this fader + + + + + Fader orientation + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Pan slider control + + + + + Required designer variable. + + + + + True when pan value changed + + + + + Creates a new PanSlider control + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + + The current Pan setting + + + + + Control that represents a potentiometer + TODO list: + Optional Log scale + Optional reverse scale + Keyboard control + Optional bitmap mode + Optional complete draw mode + Tooltip support + + + + + Value changed event + + + + + Creates a new pot control + + + + + Minimum Value of the Pot + + + + + Maximum Value of the Pot + + + + + The current value of the pot + + + + + Draws the control + + + + + Handles the mouse down event to allow changing value by dragging + + + + + Handles the mouse up event to allow changing value by dragging + + + + + Handles the mouse down event to allow changing value by dragging + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Implements a rudimentary volume meter + + + + + Basic volume meter + + + + + On Fore Color Changed + + + + + Current Value + + + + + Minimum decibels + + + + + Maximum decibels + + + + + Meter orientation + + + + + Paints the volume meter + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + VolumeSlider control + + + + + Required designer variable. + + + + + Volume changed event + + + + + Creates a new VolumeSlider control + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + The volume for this control + + + + + Windows Forms control for painting audio waveforms + + + + + Constructs a new instance of the WaveFormPainter class + + + + + On Resize + + + + + On ForeColor Changed + + + + + + Add Max Value + + + + + + On Paint + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Control for viewing waveforms + + + + + Required designer variable. + + + + + Creates a new WaveViewer control + + + + + sets the associated wavestream + + + + + The zoom level, in samples per pixel + + + + + Start position (currently in bytes) + + + + + Clean up any resources being used. + + + + + + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Audio Subtype GUIDs + http://msdn.microsoft.com/en-us/library/windows/desktop/aa372553%28v=vs.85%29.aspx + + + + + Advanced Audio Coding (AAC). + + + + + Not used + + + + + Dolby AC-3 audio over Sony/Philips Digital Interface (S/PDIF). + + + + + Encrypted audio data used with secure audio path. + + + + + Digital Theater Systems (DTS) audio. + + + + + Uncompressed IEEE floating-point audio. + + + + + MPEG Audio Layer-3 (MP3). + + + + + MPEG-1 audio payload. + + + + + Windows Media Audio 9 Voice codec. + + + + + Uncompressed PCM audio. + + + + + Windows Media Audio 9 Professional codec over S/PDIF. + + + + + Windows Media Audio 9 Lossless codec or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 8 codec, Windows Media Audio 9 codec, or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 9 Professional codec or Windows Media Audio 9.1 Professional codec. + + + + + Dolby Digital (AC-3). + + + + + MPEG-4 and AAC Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + μ-law coding + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Adaptive delta pulse code modulation (ADPCM) + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Dolby Digital Plus formatted for HDMI output. + http://msdn.microsoft.com/en-us/library/windows/hardware/ff538392(v=vs.85).aspx + Reference : internet + + + + + MSAudio1 - unknown meaning + Reference : wmcodecdsp.h + + + + + IMA ADPCM ACM Wrapper + + + + + WMSP2 - unknown meaning + Reference: wmsdkidl.h + + + + + IMFActivate, defined in mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Creates the object associated with this activation object. + + + + + Shuts down the created object. + + + + + Detaches the created object from the activation object. + + + + + Provides a generic way to store key/value pairs on an object. + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms704598%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + IMFByteStream + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms698720%28v=vs.85%29.aspx + + + + + Retrieves the characteristics of the byte stream. + virtual HRESULT STDMETHODCALLTYPE GetCapabilities(/*[out]*/ __RPC__out DWORD *pdwCapabilities) = 0; + + + + + Retrieves the length of the stream. + virtual HRESULT STDMETHODCALLTYPE GetLength(/*[out]*/ __RPC__out QWORD *pqwLength) = 0; + + + + + Sets the length of the stream. + virtual HRESULT STDMETHODCALLTYPE SetLength(/*[in]*/ QWORD qwLength) = 0; + + + + + Retrieves the current read or write position in the stream. + virtual HRESULT STDMETHODCALLTYPE GetCurrentPosition(/*[out]*/ __RPC__out QWORD *pqwPosition) = 0; + + + + + Sets the current read or write position. + virtual HRESULT STDMETHODCALLTYPE SetCurrentPosition(/*[in]*/ QWORD qwPosition) = 0; + + + + + Queries whether the current position has reached the end of the stream. + virtual HRESULT STDMETHODCALLTYPE IsEndOfStream(/*[out]*/ __RPC__out BOOL *pfEndOfStream) = 0; + + + + + Reads data from the stream. + virtual HRESULT STDMETHODCALLTYPE Read(/*[size_is][out]*/ __RPC__out_ecount_full(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbRead) = 0; + + + + + Begins an asynchronous read operation from the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginRead(/*[out]*/ _Out_writes_bytes_(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous read operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndRead(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbRead) = 0; + + + + + Writes data to the stream. + virtual HRESULT STDMETHODCALLTYPE Write(/*[size_is][in]*/ __RPC__in_ecount_full(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbWritten) = 0; + + + + + Begins an asynchronous write operation to the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginWrite(/*[in]*/ _In_reads_bytes_(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous write operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndWrite(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbWritten) = 0; + + + + + Moves the current position in the stream by a specified offset. + virtual HRESULT STDMETHODCALLTYPE Seek(/*[in]*/ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, /*[in]*/ LONGLONG llSeekOffset, /*[in]*/ DWORD dwSeekFlags, /*[out]*/ __RPC__out QWORD *pqwCurrentPosition) = 0; + + + + + Clears any internal buffers used by the stream. + virtual HRESULT STDMETHODCALLTYPE Flush( void) = 0; + + + + + Closes the stream and releases any resources associated with the stream. + virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; + + + + + Represents a generic collection of IUnknown pointers. + + + + + Retrieves the number of objects in the collection. + + + + + Retrieves an object in the collection. + + + + + Adds an object to the collection. + + + + + Removes an object from the collection. + + + + + Removes an object from the collection. + + + + + Removes all items from the collection. + + + + + IMFMediaBuffer + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms696261%28v=vs.85%29.aspx + + + + + Gives the caller access to the memory in the buffer. + + + + + Unlocks a buffer that was previously locked. + + + + + Retrieves the length of the valid data in the buffer. + + + + + Sets the length of the valid data in the buffer. + + + + + Retrieves the allocated size of the buffer. + + + + + IMFMediaEvent - Represents an event generated by a Media Foundation object. Use this interface to get information about the event. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms702249%28v=vs.85%29.aspx + Mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the event type. + + + virtual HRESULT STDMETHODCALLTYPE GetType( + /* [out] */ __RPC__out MediaEventType *pmet) = 0; + + + + + Retrieves the extended type of the event. + + + virtual HRESULT STDMETHODCALLTYPE GetExtendedType( + /* [out] */ __RPC__out GUID *pguidExtendedType) = 0; + + + + + Retrieves an HRESULT that specifies the event status. + + + virtual HRESULT STDMETHODCALLTYPE GetStatus( + /* [out] */ __RPC__out HRESULT *phrStatus) = 0; + + + + + Retrieves the value associated with the event, if any. + + + virtual HRESULT STDMETHODCALLTYPE GetValue( + /* [out] */ __RPC__out PROPVARIANT *pvValue) = 0; + + + + + Represents a description of a media format. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms704850%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the major type of the format. + + + + + Queries whether the media type is a compressed format. + + + + + Compares two media types and determines whether they are identical. + + + + + Retrieves an alternative representation of the media type. + + + + + Frees memory that was allocated by the GetRepresentation method. + + + + + Creates an instance of either the sink writer or the source reader. + + + + + Creates an instance of the sink writer or source reader, given a URL. + + + + + Creates an instance of the sink writer or source reader, given an IUnknown pointer. + + + + + CLSID_MFReadWriteClassFactory + + + + + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms702192%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves flags associated with the sample. + + + + + Sets flags associated with the sample. + + + + + Retrieves the presentation time of the sample. + + + + + Sets the presentation time of the sample. + + + + + Retrieves the duration of the sample. + + + + + Sets the duration of the sample. + + + + + Retrieves the number of buffers in the sample. + + + + + Retrieves a buffer from the sample. + + + + + Converts a sample with multiple buffers into a sample with a single buffer. + + + + + Adds a buffer to the end of the list of buffers in the sample. + + + + + Removes a buffer at a specified index from the sample. + + + + + Removes all buffers from the sample. + + + + + Retrieves the total length of the valid data in all of the buffers in the sample. + + + + + Copies the sample data to a buffer. + + + + + Implemented by the Microsoft Media Foundation sink writer object. + + + + + Adds a stream to the sink writer. + + + + + Sets the input format for a stream on the sink writer. + + + + + Initializes the sink writer for writing. + + + + + Delivers a sample to the sink writer. + + + + + Indicates a gap in an input stream. + + + + + Places a marker in the specified stream. + + + + + Notifies the media sink that a stream has reached the end of a segment. + + + + + Flushes one or more streams. + + + + + (Finalize) Completes all writing operations on the sink writer. + + + + + Queries the underlying media sink or encoder for an interface. + + + + + Gets statistics about the performance of the sink writer. + + + + + IMFSourceReader interface + http://msdn.microsoft.com/en-us/library/windows/desktop/dd374655%28v=vs.85%29.aspx + + + + + Queries whether a stream is selected. + + + + + Selects or deselects one or more streams. + + + + + Gets a format that is supported natively by the media source. + + + + + Gets the current media type for a stream. + + + + + Sets the media type for a stream. + + + + + Seeks to a new position in the media source. + + + + + Reads the next sample from the media source. + + + + + Flushes one or more streams. + + + + + Queries the underlying media source or decoder for an interface. + + + + + Gets an attribute from the underlying media source. + + + + + Contains flags that indicate the status of the IMFSourceReader::ReadSample method + http://msdn.microsoft.com/en-us/library/windows/desktop/dd375773(v=vs.85).aspx + + + + + No Error + + + + + An error occurred. If you receive this flag, do not make any further calls to IMFSourceReader methods. + + + + + The source reader reached the end of the stream. + + + + + One or more new streams were created + + + + + The native format has changed for one or more streams. The native format is the format delivered by the media source before any decoders are inserted. + + + + + The current media has type changed for one or more streams. To get the current media type, call the IMFSourceReader::GetCurrentMediaType method. + + + + + There is a gap in the stream. This flag corresponds to an MEStreamTick event from the media source. + + + + + All transforms inserted by the application have been removed for a particular stream. + + + + + IMFTransform, defined in mftransform.h + + + + + Retrieves the minimum and maximum number of input and output streams. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamLimits( + /* [out] */ __RPC__out DWORD *pdwInputMinimum, + /* [out] */ __RPC__out DWORD *pdwInputMaximum, + /* [out] */ __RPC__out DWORD *pdwOutputMinimum, + /* [out] */ __RPC__out DWORD *pdwOutputMaximum) = 0; + + + + + Retrieves the current number of input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamCount( + /* [out] */ __RPC__out DWORD *pcInputStreams, + /* [out] */ __RPC__out DWORD *pcOutputStreams) = 0; + + + + + Retrieves the stream identifiers for the input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamIDs( + DWORD dwInputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwInputIDArraySize) DWORD *pdwInputIDs, + DWORD dwOutputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwOutputIDArraySize) DWORD *pdwOutputIDs) = 0; + + + + + Gets the buffer requirements and other information for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamInfo( + DWORD dwInputStreamID, + /* [out] */ __RPC__out MFT_INPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the buffer requirements and other information for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamInfo( + DWORD dwOutputStreamID, + /* [out] */ __RPC__out MFT_OUTPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the global attribute store for this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetAttributes( + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an input stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamAttributes( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamAttributes( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Removes an input stream from this MFT. + + + virtual HRESULT STDMETHODCALLTYPE DeleteInputStream( + DWORD dwStreamID) = 0; + + + + + Adds one or more new input streams to this MFT. + + + virtual HRESULT STDMETHODCALLTYPE AddInputStreams( + DWORD cStreams, + /* [in] */ __RPC__in DWORD *adwStreamIDs) = 0; + + + + + Gets an available media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputAvailableType( + DWORD dwInputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Retrieves an available media type for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputAvailableType( + DWORD dwOutputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Sets, tests, or clears the media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetInputType( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Sets, tests, or clears the media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetOutputType( + DWORD dwOutputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Gets the current media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputCurrentType( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Gets the current media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputCurrentType( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Queries whether an input stream on this Media Foundation transform (MFT) can accept more data. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStatus( + DWORD dwInputStreamID, + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Queries whether the Media Foundation transform (MFT) is ready to produce output data. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStatus( + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Sets the range of time stamps the client needs for output. + + + virtual HRESULT STDMETHODCALLTYPE SetOutputBounds( + LONGLONG hnsLowerBound, + LONGLONG hnsUpperBound) = 0; + + + + + Sends an event to an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessEvent( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaEvent *pEvent) = 0; + + + + + Sends a message to the Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessMessage( + MFT_MESSAGE_TYPE eMessage, + ULONG_PTR ulParam) = 0; + + + + + Delivers data to an input stream on this Media Foundation transform (MFT). + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessInput( + DWORD dwInputStreamID, + IMFSample *pSample, + DWORD dwFlags) = 0; + + + + + Generates output from the current input data. + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessOutput( + DWORD dwFlags, + DWORD cOutputBufferCount, + /* [size_is][out][in] */ MFT_OUTPUT_DATA_BUFFER *pOutputSamples, + /* [out] */ DWORD *pdwStatus) = 0; + + + + + See mfobjects.h + + + + + Unknown event type. + + + + + Signals a serious error. + + + + + Custom event type. + + + + + A non-fatal error occurred during streaming. + + + + + Session Unknown + + + + + Raised after the IMFMediaSession::SetTopology method completes asynchronously + + + + + Raised by the Media Session when the IMFMediaSession::ClearTopologies method completes asynchronously. + + + + + Raised when the IMFMediaSession::Start method completes asynchronously. + + + + + Raised when the IMFMediaSession::Pause method completes asynchronously. + + + + + Raised when the IMFMediaSession::Stop method completes asynchronously. + + + + + Raised when the IMFMediaSession::Close method completes asynchronously. + + + + + Raised by the Media Session when it has finished playing the last presentation in the playback queue. + + + + + Raised by the Media Session when the playback rate changes. + + + + + Raised by the Media Session when it completes a scrubbing request. + + + + + Raised by the Media Session when the session capabilities change. + + + + + Raised by the Media Session when the status of a topology changes. + + + + + Raised by the Media Session when a new presentation starts. + + + + + Raised by a media source a new presentation is ready. + + + + + License acquisition is about to begin. + + + + + License acquisition is complete. + + + + + Individualization is about to begin. + + + + + Individualization is complete. + + + + + Signals the progress of a content enabler object. + + + + + A content enabler object's action is complete. + + + + + Raised by a trusted output if an error occurs while enforcing the output policy. + + + + + Contains status information about the enforcement of an output policy. + + + + + A media source started to buffer data. + + + + + A media source stopped buffering data. + + + + + The network source started opening a URL. + + + + + The network source finished opening a URL. + + + + + Raised by a media source at the start of a reconnection attempt. + + + + + Raised by a media source at the end of a reconnection attempt. + + + + + Raised by the enhanced video renderer (EVR) when it receives a user event from the presenter. + + + + + Raised by the Media Session when the format changes on a media sink. + + + + + Source Unknown + + + + + Raised when a media source starts without seeking. + + + + + Raised by a media stream when the source starts without seeking. + + + + + Raised when a media source seeks to a new position. + + + + + Raised by a media stream after a call to IMFMediaSource::Start causes a seek in the stream. + + + + + Raised by a media source when it starts a new stream. + + + + + Raised by a media source when it restarts or seeks a stream that is already active. + + + + + Raised by a media source when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media source when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media source when a presentation ends. + + + + + Raised by a media stream when the stream ends. + + + + + Raised when a media stream delivers a new sample. + + + + + Signals that a media stream does not have data available at a specified time. + + + + + Raised by a media stream when it starts or stops thinning the stream. + + + + + Raised by a media stream when the media type of the stream changes. + + + + + Raised by a media source when the playback rate changes. + + + + + Raised by the sequencer source when a segment is completed and is followed by another segment. + + + + + Raised by a media source when the source's characteristics change. + + + + + Raised by a media source to request a new playback rate. + + + + + Raised by a media source when it updates its metadata. + + + + + Raised by the sequencer source when the IMFSequencerSource::UpdateTopology method completes asynchronously. + + + + + Sink Unknown + + + + + Raised by a stream sink when it completes the transition to the running state. + + + + + Raised by a stream sink when it completes the transition to the stopped state. + + + + + Raised by a stream sink when it completes the transition to the paused state. + + + + + Raised by a stream sink when the rate has changed. + + + + + Raised by a stream sink to request a new media sample from the pipeline. + + + + + Raised by a stream sink after the IMFStreamSink::PlaceMarker method is called. + + + + + Raised by a stream sink when the stream has received enough preroll data to begin rendering. + + + + + Raised by a stream sink when it completes a scrubbing request. + + + + + Raised by a stream sink when the sink's media type is no longer valid. + + + + + Raised by the stream sinks of the EVR if the video device changes. + + + + + Provides feedback about playback quality to the quality manager. + + + + + Raised when a media sink becomes invalid. + + + + + The audio session display name changed. + + + + + The volume or mute state of the audio session changed + + + + + The audio device was removed. + + + + + The Windows audio server system was shut down. + + + + + The grouping parameters changed for the audio session. + + + + + The audio session icon changed. + + + + + The default audio format for the audio device changed. + + + + + The audio session was disconnected from a Windows Terminal Services session + + + + + The audio session was preempted by an exclusive-mode connection. + + + + + Trust Unknown + + + + + The output policy for a stream changed. + + + + + Content protection message + + + + + The IMFOutputTrustAuthority::SetPolicy method completed. + + + + + DRM License Backup Completed + + + + + DRM License Backup Progress + + + + + DRM License Restore Completed + + + + + DRM License Restore Progress + + + + + DRM License Acquisition Completed + + + + + DRM Individualization Completed + + + + + DRM Individualization Progress + + + + + DRM Proximity Completed + + + + + DRM License Store Cleaned + + + + + DRM Revocation Download Completed + + + + + Transform Unknown + + + + + Sent by an asynchronous MFT to request a new input sample. + + + + + Sent by an asynchronous MFT when new output data is available from the MFT. + + + + + Sent by an asynchronous Media Foundation transform (MFT) when a drain operation is complete. + + + + + Sent by an asynchronous MFT in response to an MFT_MESSAGE_COMMAND_MARKER message. + + + + + Media Foundation attribute guids + http://msdn.microsoft.com/en-us/library/windows/desktop/ms696989%28v=vs.85%29.aspx + + + + + Specifies whether an MFT performs asynchronous processing. + + + + + Enables the use of an asynchronous MFT. + + + + + Contains flags for an MFT activation object. + + + + + Specifies the category for an MFT. + + + + + Contains the class identifier (CLSID) of an MFT. + + + + + Contains the registered input types for a Media Foundation transform (MFT). + + + + + Contains the registered output types for a Media Foundation transform (MFT). + + + + + Contains the symbolic link for a hardware-based MFT. + + + + + Contains the display name for a hardware-based MFT. + + + + + Contains a pointer to the stream attributes of the connected stream on a hardware-based MFT. + + + + + Specifies whether a hardware-based MFT is connected to another hardware-based MFT. + + + + + Specifies the preferred output format for an encoder. + + + + + Specifies whether an MFT is registered only in the application's process. + + + + + Contains configuration properties for an encoder. + + + + + Specifies whether a hardware device source uses the system time for time stamps. + + + + + Contains an IMFFieldOfUseMFTUnlock pointer, which can be used to unlock the MFT. + + + + + Contains the merit value of a hardware codec. + + + + + Specifies whether a decoder is optimized for transcoding rather than for playback. + + + + + Contains a pointer to the proxy object for the application's presentation descriptor. + + + + + Contains a pointer to the presentation descriptor from the protected media path (PMP). + + + + + Specifies the duration of a presentation, in 100-nanosecond units. + + + + + Specifies the total size of the source file, in bytes. + + + + + Specifies the audio encoding bit rate for the presentation, in bits per second. + + + + + Specifies the video encoding bit rate for the presentation, in bits per second. + + + + + Specifies the MIME type of the content. + + + + + Specifies when a presentation was last modified. + + + + + The identifier of the playlist element in the presentation. + + + + + Contains the preferred RFC 1766 language of the media source. + + + + + The time at which the presentation must begin, relative to the start of the media source. + + + + + Specifies whether the audio streams in the presentation have a variable bit rate. + + + + + Media type Major Type + + + + + Media Type subtype + + + + + Audio block alignment + + + + + Audio average bytes per second + + + + + Audio number of channels + + + + + Audio samples per second + + + + + Audio bits per sample + + + + + Enables the source reader or sink writer to use hardware-based Media Foundation transforms (MFTs). + + + + + Contains additional format data for a media type. + + + + + Specifies for a media type whether each sample is independent of the other samples in the stream. + + + + + Specifies for a media type whether the samples have a fixed size. + + + + + Contains a DirectShow format GUID for a media type. + + + + + Specifies the preferred legacy format structure to use when converting an audio media type. + + + + + Specifies for a media type whether the media data is compressed. + + + + + Approximate data rate of the video stream, in bits per second, for a video media type. + + + + + Specifies the payload type of an Advanced Audio Coding (AAC) stream. + 0 - The stream contains raw_data_block elements only + 1 - Audio Data Transport Stream (ADTS). The stream contains an adts_sequence, as defined by MPEG-2. + 2 - Audio Data Interchange Format (ADIF). The stream contains an adif_sequence, as defined by MPEG-2. + 3 - The stream contains an MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + + + + + Specifies the audio profile and level of an Advanced Audio Coding (AAC) stream, as defined by ISO/IEC 14496-3. + + + + + Media Foundation Errors + + + + RANGES + 14000 - 14999 = General Media Foundation errors + 15000 - 15999 = ASF parsing errors + 16000 - 16999 = Media Source errors + 17000 - 17999 = MEDIAFOUNDATION Network Error Events + 18000 - 18999 = MEDIAFOUNDATION WMContainer Error Events + 19000 - 19999 = MEDIAFOUNDATION Media Sink Error Events + 20000 - 20999 = Renderer errors + 21000 - 21999 = Topology Errors + 25000 - 25999 = Timeline Errors + 26000 - 26999 = Unused + 28000 - 28999 = Transform errors + 29000 - 29999 = Content Protection errors + 40000 - 40999 = Clock errors + 41000 - 41999 = MF Quality Management Errors + 42000 - 42999 = MF Transcode API Errors + + + + + MessageId: MF_E_PLATFORM_NOT_INITIALIZED + + MessageText: + + Platform not initialized. Please call MFStartup().%0 + + + + + MessageId: MF_E_BUFFERTOOSMALL + + MessageText: + + The buffer was too small to carry out the requested action.%0 + + + + + MessageId: MF_E_INVALIDREQUEST + + MessageText: + + The request is invalid in the current state.%0 + + + + + MessageId: MF_E_INVALIDSTREAMNUMBER + + MessageText: + + The stream number provided was invalid.%0 + + + + + MessageId: MF_E_INVALIDMEDIATYPE + + MessageText: + + The data specified for the media type is invalid, inconsistent, or not supported by this object.%0 + + + + + MessageId: MF_E_NOTACCEPTING + + MessageText: + + The callee is currently not accepting further input.%0 + + + + + MessageId: MF_E_NOT_INITIALIZED + + MessageText: + + This object needs to be initialized before the requested operation can be carried out.%0 + + + + + MessageId: MF_E_UNSUPPORTED_REPRESENTATION + + MessageText: + + The requested representation is not supported by this object.%0 + + + + + MessageId: MF_E_NO_MORE_TYPES + + MessageText: + + An object ran out of media types to suggest therefore the requested chain of streaming objects cannot be completed.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SERVICE + + MessageText: + + The object does not support the specified service.%0 + + + + + MessageId: MF_E_UNEXPECTED + + MessageText: + + An unexpected error has occurred in the operation requested.%0 + + + + + MessageId: MF_E_INVALIDNAME + + MessageText: + + Invalid name.%0 + + + + + MessageId: MF_E_INVALIDTYPE + + MessageText: + + Invalid type.%0 + + + + + MessageId: MF_E_INVALID_FILE_FORMAT + + MessageText: + + The file does not conform to the relevant file format specification. + + + + + MessageId: MF_E_INVALIDINDEX + + MessageText: + + Invalid index.%0 + + + + + MessageId: MF_E_INVALID_TIMESTAMP + + MessageText: + + An invalid timestamp was given.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SCHEME + + MessageText: + + The scheme of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_BYTESTREAM_TYPE + + MessageText: + + The byte stream type of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_TIME_FORMAT + + MessageText: + + The given time format is unsupported.%0 + + + + + MessageId: MF_E_NO_SAMPLE_TIMESTAMP + + MessageText: + + The Media Sample does not have a timestamp.%0 + + + + + MessageId: MF_E_NO_SAMPLE_DURATION + + MessageText: + + The Media Sample does not have a duration.%0 + + + + + MessageId: MF_E_INVALID_STREAM_DATA + + MessageText: + + The request failed because the data in the stream is corrupt.%0\n. + + + + + MessageId: MF_E_RT_UNAVAILABLE + + MessageText: + + Real time services are not available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE + + MessageText: + + The specified rate is not supported.%0 + + + + + MessageId: MF_E_THINNING_UNSUPPORTED + + MessageText: + + This component does not support stream-thinning.%0 + + + + + MessageId: MF_E_REVERSE_UNSUPPORTED + + MessageText: + + The call failed because no reverse playback rates are available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE_TRANSITION + + MessageText: + + The requested rate transition cannot occur in the current state.%0 + + + + + MessageId: MF_E_RATE_CHANGE_PREEMPTED + + MessageText: + + The requested rate change has been pre-empted and will not occur.%0 + + + + + MessageId: MF_E_NOT_FOUND + + MessageText: + + The specified object or value does not exist.%0 + + + + + MessageId: MF_E_NOT_AVAILABLE + + MessageText: + + The requested value is not available.%0 + + + + + MessageId: MF_E_NO_CLOCK + + MessageText: + + The specified operation requires a clock and no clock is available.%0 + + + + + MessageId: MF_S_MULTIPLE_BEGIN + + MessageText: + + This callback and state had already been passed in to this event generator earlier.%0 + + + + + MessageId: MF_E_MULTIPLE_BEGIN + + MessageText: + + This callback has already been passed in to this event generator.%0 + + + + + MessageId: MF_E_MULTIPLE_SUBSCRIBERS + + MessageText: + + Some component is already listening to events on this event generator.%0 + + + + + MessageId: MF_E_TIMER_ORPHANED + + MessageText: + + This timer was orphaned before its callback time arrived.%0 + + + + + MessageId: MF_E_STATE_TRANSITION_PENDING + + MessageText: + + A state transition is already pending.%0 + + + + + MessageId: MF_E_UNSUPPORTED_STATE_TRANSITION + + MessageText: + + The requested state transition is unsupported.%0 + + + + + MessageId: MF_E_UNRECOVERABLE_ERROR_OCCURRED + + MessageText: + + An unrecoverable error has occurred.%0 + + + + + MessageId: MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS + + MessageText: + + The provided sample has too many buffers.%0 + + + + + MessageId: MF_E_SAMPLE_NOT_WRITABLE + + MessageText: + + The provided sample is not writable.%0 + + + + + MessageId: MF_E_INVALID_KEY + + MessageText: + + The specified key is not valid. + + + + + MessageId: MF_E_BAD_STARTUP_VERSION + + MessageText: + + You are calling MFStartup with the wrong MF_VERSION. Mismatched bits? + + + + + MessageId: MF_E_UNSUPPORTED_CAPTION + + MessageText: + + The caption of the given URL is unsupported.%0 + + + + + MessageId: MF_E_INVALID_POSITION + + MessageText: + + The operation on the current offset is not permitted.%0 + + + + + MessageId: MF_E_ATTRIBUTENOTFOUND + + MessageText: + + The requested attribute was not found.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_ALLOWED + + MessageText: + + The specified property type is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_SUPPORTED + + MessageText: + + The specified property type is not supported.%0 + + + + + MessageId: MF_E_PROPERTY_EMPTY + + MessageText: + + The specified property is empty.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_EMPTY + + MessageText: + + The specified property is not empty.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_NOT_ALLOWED + + MessageText: + + The vector property specified is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_REQUIRED + + MessageText: + + A vector property is required in this context.%0 + + + + + MessageId: MF_E_OPERATION_CANCELLED + + MessageText: + + The operation is cancelled.%0 + + + + + MessageId: MF_E_BYTESTREAM_NOT_SEEKABLE + + MessageText: + + The provided bytestream was expected to be seekable and it is not.%0 + + + + + MessageId: MF_E_DISABLED_IN_SAFEMODE + + MessageText: + + The Media Foundation platform is disabled when the system is running in Safe Mode.%0 + + + + + MessageId: MF_E_CANNOT_PARSE_BYTESTREAM + + MessageText: + + The Media Source could not parse the byte stream.%0 + + + + + MessageId: MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS + + MessageText: + + Mutually exclusive flags have been specified to source resolver. This flag combination is invalid.%0 + + + + + MessageId: MF_E_MEDIAPROC_WRONGSTATE + + MessageText: + + MediaProc is in the wrong state%0 + + + + + MessageId: MF_E_RT_THROUGHPUT_NOT_AVAILABLE + + MessageText: + + Real time I/O service can not provide requested throughput.%0 + + + + + MessageId: MF_E_RT_TOO_MANY_CLASSES + + MessageText: + + The workqueue cannot be registered with more classes.%0 + + + + + MessageId: MF_E_RT_WOULDBLOCK + + MessageText: + + This operation cannot succeed because another thread owns this object.%0 + + + + + MessageId: MF_E_NO_BITPUMP + + MessageText: + + Internal. Bitpump not found.%0 + + + + + MessageId: MF_E_RT_OUTOFMEMORY + + MessageText: + + No more RT memory available.%0 + + + + + MessageId: MF_E_RT_WORKQUEUE_CLASS_NOT_SPECIFIED + + MessageText: + + An MMCSS class has not been set for this work queue.%0 + + + + + MessageId: MF_E_INSUFFICIENT_BUFFER + + MessageText: + + Insufficient memory for response.%0 + + + + + MessageId: MF_E_CANNOT_CREATE_SINK + + MessageText: + + Activate failed to create mediasink. Call OutputNode::GetUINT32(MF_TOPONODE_MAJORTYPE) for more information. %0 + + + + + MessageId: MF_E_BYTESTREAM_UNKNOWN_LENGTH + + MessageText: + + The length of the provided bytestream is unknown.%0 + + + + + MessageId: MF_E_SESSION_PAUSEWHILESTOPPED + + MessageText: + + The media session cannot pause from a stopped state.%0 + + + + + MessageId: MF_S_ACTIVATE_REPLACED + + MessageText: + + The activate could not be created in the remote process for some reason it was replaced with empty one.%0 + + + + + MessageId: MF_E_FORMAT_CHANGE_NOT_SUPPORTED + + MessageText: + + The data specified for the media type is supported, but would require a format change, which is not supported by this object.%0 + + + + + MessageId: MF_E_INVALID_WORKQUEUE + + MessageText: + + The operation failed because an invalid combination of workqueue ID and flags was specified.%0 + + + + + MessageId: MF_E_DRM_UNSUPPORTED + + MessageText: + + No DRM support is available.%0 + + + + + MessageId: MF_E_UNAUTHORIZED + + MessageText: + + This operation is not authorized.%0 + + + + + MessageId: MF_E_OUT_OF_RANGE + + MessageText: + + The value is not in the specified or valid range.%0 + + + + + MessageId: MF_E_INVALID_CODEC_MERIT + + MessageText: + + The registered codec merit is not valid.%0 + + + + + MessageId: MF_E_HW_MFT_FAILED_START_STREAMING + + MessageText: + + Hardware MFT failed to start streaming due to lack of hardware resources.%0 + + + + + MessageId: MF_S_ASF_PARSEINPROGRESS + + MessageText: + + Parsing is still in progress and is not yet complete.%0 + + + + + MessageId: MF_E_ASF_PARSINGINCOMPLETE + + MessageText: + + Not enough data have been parsed to carry out the requested action.%0 + + + + + MessageId: MF_E_ASF_MISSINGDATA + + MessageText: + + There is a gap in the ASF data provided.%0 + + + + + MessageId: MF_E_ASF_INVALIDDATA + + MessageText: + + The data provided are not valid ASF.%0 + + + + + MessageId: MF_E_ASF_OPAQUEPACKET + + MessageText: + + The packet is opaque, so the requested information cannot be returned.%0 + + + + + MessageId: MF_E_ASF_NOINDEX + + MessageText: + + The requested operation failed since there is no appropriate ASF index.%0 + + + + + MessageId: MF_E_ASF_OUTOFRANGE + + MessageText: + + The value supplied is out of range for this operation.%0 + + + + + MessageId: MF_E_ASF_INDEXNOTLOADED + + MessageText: + + The index entry requested needs to be loaded before it can be available.%0 + + + + + MessageId: MF_E_ASF_TOO_MANY_PAYLOADS + + MessageText: + + The packet has reached the maximum number of payloads.%0 + + + + + MessageId: MF_E_ASF_UNSUPPORTED_STREAM_TYPE + + MessageText: + + Stream type is not supported.%0 + + + + + MessageId: MF_E_ASF_DROPPED_PACKET + + MessageText: + + One or more ASF packets were dropped.%0 + + + + + MessageId: MF_E_NO_EVENTS_AVAILABLE + + MessageText: + + There are no events available in the queue.%0 + + + + + MessageId: MF_E_INVALID_STATE_TRANSITION + + MessageText: + + A media source cannot go from the stopped state to the paused state.%0 + + + + + MessageId: MF_E_END_OF_STREAM + + MessageText: + + The media stream cannot process any more samples because there are no more samples in the stream.%0 + + + + + MessageId: MF_E_SHUTDOWN + + MessageText: + + The request is invalid because Shutdown() has been called.%0 + + + + + MessageId: MF_E_MP3_NOTFOUND + + MessageText: + + The MP3 object was not found.%0 + + + + + MessageId: MF_E_MP3_OUTOFDATA + + MessageText: + + The MP3 parser ran out of data before finding the MP3 object.%0 + + + + + MessageId: MF_E_MP3_NOTMP3 + + MessageText: + + The file is not really a MP3 file.%0 + + + + + MessageId: MF_E_MP3_NOTSUPPORTED + + MessageText: + + The MP3 file is not supported.%0 + + + + + MessageId: MF_E_NO_DURATION + + MessageText: + + The Media stream has no duration.%0 + + + + + MessageId: MF_E_INVALID_FORMAT + + MessageText: + + The Media format is recognized but is invalid.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_FOUND + + MessageText: + + The property requested was not found.%0 + + + + + MessageId: MF_E_PROPERTY_READ_ONLY + + MessageText: + + The property is read only.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_ALLOWED + + MessageText: + + The specified property is not allowed in this context.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NOT_STARTED + + MessageText: + + The media source is not started.%0 + + + + + MessageId: MF_E_UNSUPPORTED_FORMAT + + MessageText: + + The Media format is recognized but not supported.%0 + + + + + MessageId: MF_E_MP3_BAD_CRC + + MessageText: + + The MPEG frame has bad CRC.%0 + + + + + MessageId: MF_E_NOT_PROTECTED + + MessageText: + + The file is not protected.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_WRONGSTATE + + MessageText: + + The media source is in the wrong state%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED + + MessageText: + + No streams are selected in source presentation descriptor.%0 + + + + + MessageId: MF_E_CANNOT_FIND_KEYFRAME_SAMPLE + + MessageText: + + No key frame sample was found.%0 + + + + + MessageId: MF_E_NETWORK_RESOURCE_FAILURE + + MessageText: + + An attempt to acquire a network resource failed.%0 + + + + + MessageId: MF_E_NET_WRITE + + MessageText: + + Error writing to the network.%0 + + + + + MessageId: MF_E_NET_READ + + MessageText: + + Error reading from the network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_NETWORK + + MessageText: + + Internal. Entry cannot complete operation without network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_ASYNC + + MessageText: + + Internal. Async op is required.%0 + + + + + MessageId: MF_E_NET_BWLEVEL_NOT_SUPPORTED + + MessageText: + + Internal. Bandwidth levels are not supported.%0 + + + + + MessageId: MF_E_NET_STREAMGROUPS_NOT_SUPPORTED + + MessageText: + + Internal. Stream groups are not supported.%0 + + + + + MessageId: MF_E_NET_MANUALSS_NOT_SUPPORTED + + MessageText: + + Manual stream selection is not supported.%0 + + + + + MessageId: MF_E_NET_INVALID_PRESENTATION_DESCRIPTOR + + MessageText: + + Invalid presentation descriptor.%0 + + + + + MessageId: MF_E_NET_CACHESTREAM_NOT_FOUND + + MessageText: + + Cannot find cache stream.%0 + + + + + MessageId: MF_I_MANUAL_PROXY + + MessageText: + + The proxy setting is manual.%0 + + + + duplicate removed + MessageId=17011 Severity=Informational Facility=MEDIAFOUNDATION SymbolicName=MF_E_INVALID_REQUEST + Language=English + The request is invalid in the current state.%0 + . + + MessageId: MF_E_NET_REQUIRE_INPUT + + MessageText: + + Internal. Entry cannot complete operation without input.%0 + + + + + MessageId: MF_E_NET_REDIRECT + + MessageText: + + The client redirected to another server.%0 + + + + + MessageId: MF_E_NET_REDIRECT_TO_PROXY + + MessageText: + + The client is redirected to a proxy server.%0 + + + + + MessageId: MF_E_NET_TOO_MANY_REDIRECTS + + MessageText: + + The client reached maximum redirection limit.%0 + + + + + MessageId: MF_E_NET_TIMEOUT + + MessageText: + + The server, a computer set up to offer multimedia content to other computers, could not handle your request for multimedia content in a timely manner. Please try again later.%0 + + + + + MessageId: MF_E_NET_CLIENT_CLOSE + + MessageText: + + The control socket is closed by the client.%0 + + + + + MessageId: MF_E_NET_BAD_CONTROL_DATA + + MessageText: + + The server received invalid data from the client on the control connection.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_SERVER + + MessageText: + + The server is not a compatible streaming media server.%0 + + + + + MessageId: MF_E_NET_UNSAFE_URL + + MessageText: + + Url.%0 + + + + + MessageId: MF_E_NET_CACHE_NO_DATA + + MessageText: + + Data is not available.%0 + + + + + MessageId: MF_E_NET_EOL + + MessageText: + + End of line.%0 + + + + + MessageId: MF_E_NET_BAD_REQUEST + + MessageText: + + The request could not be understood by the server.%0 + + + + + MessageId: MF_E_NET_INTERNAL_SERVER_ERROR + + MessageText: + + The server encountered an unexpected condition which prevented it from fulfilling the request.%0 + + + + + MessageId: MF_E_NET_SESSION_NOT_FOUND + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_NET_NOCONNECTION + + MessageText: + + There is no connection established with the Windows Media server. The operation failed.%0 + + + + + MessageId: MF_E_NET_CONNECTION_FAILURE + + MessageText: + + The network connection has failed.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_PUSHSERVER + + MessageText: + + The Server service that received the HTTP push request is not a compatible version of Windows Media Services (WMS). This error may indicate the push request was received by IIS instead of WMS. Ensure WMS is started and has the HTTP Server control protocol properly enabled and try again.%0 + + + + + MessageId: MF_E_NET_SERVER_ACCESSDENIED + + MessageText: + + The Windows Media server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_PROXY_ACCESSDENIED + + MessageText: + + The proxy server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_CANNOTCONNECT + + MessageText: + + Unable to establish a connection to the server.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_TEMPLATE + + MessageText: + + The specified push template is invalid.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_PUBLISHING_POINT + + MessageText: + + The specified push publishing point is invalid.%0 + + + + + MessageId: MF_E_NET_BUSY + + MessageText: + + The requested resource is in use.%0 + + + + + MessageId: MF_E_NET_RESOURCE_GONE + + MessageText: + + The Publishing Point or file on the Windows Media Server is no longer available.%0 + + + + + MessageId: MF_E_NET_ERROR_FROM_PROXY + + MessageText: + + The proxy experienced an error while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_PROXY_TIMEOUT + + MessageText: + + The proxy did not receive a timely response while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_SERVER_UNAVAILABLE + + MessageText: + + The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.%0 + + + + + MessageId: MF_E_NET_TOO_MUCH_DATA + + MessageText: + + The encoding process was unable to keep up with the amount of supplied data.%0 + + + + + MessageId: MF_E_NET_SESSION_INVALID + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_OFFLINE_MODE + + MessageText: + + The requested URL is not available in offline mode.%0 + + + + + MessageId: MF_E_NET_UDP_BLOCKED + + MessageText: + + A device in the network is blocking UDP traffic.%0 + + + + + MessageId: MF_E_NET_UNSUPPORTED_CONFIGURATION + + MessageText: + + The specified configuration value is not supported.%0 + + + + + MessageId: MF_E_NET_PROTOCOL_DISABLED + + MessageText: + + The networking protocol is disabled.%0 + + + + + MessageId: MF_E_ALREADY_INITIALIZED + + MessageText: + + This object has already been initialized and cannot be re-initialized at this time.%0 + + + + + MessageId: MF_E_BANDWIDTH_OVERRUN + + MessageText: + + The amount of data passed in exceeds the given bitrate and buffer window.%0 + + + + + MessageId: MF_E_LATE_SAMPLE + + MessageText: + + The sample was passed in too late to be correctly processed.%0 + + + + + MessageId: MF_E_FLUSH_NEEDED + + MessageText: + + The requested action cannot be carried out until the object is flushed and the queue is emptied.%0 + + + + + MessageId: MF_E_INVALID_PROFILE + + MessageText: + + The profile is invalid.%0 + + + + + MessageId: MF_E_INDEX_NOT_COMMITTED + + MessageText: + + The index that is being generated needs to be committed before the requested action can be carried out.%0 + + + + + MessageId: MF_E_NO_INDEX + + MessageText: + + The index that is necessary for the requested action is not found.%0 + + + + + MessageId: MF_E_CANNOT_INDEX_IN_PLACE + + MessageText: + + The requested index cannot be added in-place to the specified ASF content.%0 + + + + + MessageId: MF_E_MISSING_ASF_LEAKYBUCKET + + MessageText: + + The ASF leaky bucket parameters must be specified in order to carry out this request.%0 + + + + + MessageId: MF_E_INVALID_ASF_STREAMID + + MessageText: + + The stream id is invalid. The valid range for ASF stream id is from 1 to 127.%0 + + + + + MessageId: MF_E_STREAMSINK_REMOVED + + MessageText: + + The requested Stream Sink has been removed and cannot be used.%0 + + + + + MessageId: MF_E_STREAMSINKS_OUT_OF_SYNC + + MessageText: + + The various Stream Sinks in this Media Sink are too far out of sync for the requested action to take place.%0 + + + + + MessageId: MF_E_STREAMSINKS_FIXED + + MessageText: + + Stream Sinks cannot be added to or removed from this Media Sink because its set of streams is fixed.%0 + + + + + MessageId: MF_E_STREAMSINK_EXISTS + + MessageText: + + The given Stream Sink already exists.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_CANCELED + + MessageText: + + Sample allocations have been canceled.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_EMPTY + + MessageText: + + The sample allocator is currently empty, due to outstanding requests.%0 + + + + + MessageId: MF_E_SINK_ALREADYSTOPPED + + MessageText: + + When we try to sopt a stream sink, it is already stopped %0 + + + + + MessageId: MF_E_ASF_FILESINK_BITRATE_UNKNOWN + + MessageText: + + The ASF file sink could not reserve AVIO because the bitrate is unknown.%0 + + + + + MessageId: MF_E_SINK_NO_STREAMS + + MessageText: + + No streams are selected in sink presentation descriptor.%0 + + + + + MessageId: MF_S_SINK_NOT_FINALIZED + + MessageText: + + The sink has not been finalized before shut down. This may cause sink generate a corrupted content.%0 + + + + + MessageId: MF_E_METADATA_TOO_LONG + + MessageText: + + A metadata item was too long to write to the output container.%0 + + + + + MessageId: MF_E_SINK_NO_SAMPLES_PROCESSED + + MessageText: + + The operation failed because no samples were processed by the sink.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_PROCAMP_HW + + MessageText: + + There is no available procamp hardware with which to perform color correction.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_DEINTERLACE_HW + + MessageText: + + There is no available deinterlacing hardware with which to deinterlace the video stream.%0 + + + + + MessageId: MF_E_VIDEO_REN_COPYPROT_FAILED + + MessageText: + + A video stream requires copy protection to be enabled, but there was a failure in attempting to enable copy protection.%0 + + + + + MessageId: MF_E_VIDEO_REN_SURFACE_NOT_SHARED + + MessageText: + + A component is attempting to access a surface for sharing that is not shared.%0 + + + + + MessageId: MF_E_VIDEO_DEVICE_LOCKED + + MessageText: + + A component is attempting to access a shared device that is already locked by another component.%0 + + + + + MessageId: MF_E_NEW_VIDEO_DEVICE + + MessageText: + + The device is no longer available. The handle should be closed and a new one opened.%0 + + + + + MessageId: MF_E_NO_VIDEO_SAMPLE_AVAILABLE + + MessageText: + + A video sample is not currently queued on a stream that is required for mixing.%0 + + + + + MessageId: MF_E_NO_AUDIO_PLAYBACK_DEVICE + + MessageText: + + No audio playback device was found.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_IN_USE + + MessageText: + + The requested audio playback device is currently in use.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_INVALIDATED + + MessageText: + + The audio playback device is no longer present.%0 + + + + + MessageId: MF_E_AUDIO_SERVICE_NOT_RUNNING + + MessageText: + + The audio service is not running.%0 + + + + + MessageId: MF_E_TOPO_INVALID_OPTIONAL_NODE + + MessageText: + + The topology contains an invalid optional node. Possible reasons are incorrect number of outputs and inputs or optional node is at the beginning or end of a segment. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_FIND_DECRYPTOR + + MessageText: + + No suitable transform was found to decrypt the content. %0 + + + + + MessageId: MF_E_TOPO_CODEC_NOT_FOUND + + MessageText: + + No suitable transform was found to encode or decode the content. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_CONNECT + + MessageText: + + Unable to find a way to connect nodes%0 + + + + + MessageId: MF_E_TOPO_UNSUPPORTED + + MessageText: + + Unsupported operations in topoloader%0 + + + + + MessageId: MF_E_TOPO_INVALID_TIME_ATTRIBUTES + + MessageText: + + The topology or its nodes contain incorrectly set time attributes%0 + + + + + MessageId: MF_E_TOPO_LOOPS_IN_TOPOLOGY + + MessageText: + + The topology contains loops, which are unsupported in media foundation topologies%0 + + + + + MessageId: MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_STREAM_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a stream descriptor%0 + + + + + MessageId: MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED + + MessageText: + + A stream descriptor was set on a source stream node but it was not selected on the presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_SOURCE + + MessageText: + + A source stream node in the topology does not have a source%0 + + + + + MessageId: MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED + + MessageText: + + The topology loader does not support sink activates on output nodes.%0 + + + + + MessageId: MF_E_SEQUENCER_UNKNOWN_SEGMENT_ID + + MessageText: + + The sequencer cannot find a segment with the given ID.%0\n. + + + + + MessageId: MF_S_SEQUENCER_CONTEXT_CANCELED + + MessageText: + + The context was canceled.%0\n. + + + + + MessageId: MF_E_NO_SOURCE_IN_CACHE + + MessageText: + + Cannot find source in source cache.%0\n. + + + + + MessageId: MF_S_SEQUENCER_SEGMENT_AT_END_OF_STREAM + + MessageText: + + Cannot update topology flags.%0\n. + + + + + MessageId: MF_E_TRANSFORM_TYPE_NOT_SET + + MessageText: + + A valid type has not been set for this stream or a stream that it depends on.%0 + + + + + MessageId: MF_E_TRANSFORM_STREAM_CHANGE + + MessageText: + + A stream change has occurred. Output cannot be produced until the streams have been renegotiated.%0 + + + + + MessageId: MF_E_TRANSFORM_INPUT_REMAINING + + MessageText: + + The transform cannot take the requested action until all of the input data it currently holds is processed or flushed.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_MISSING + + MessageText: + + The transform requires a profile but no profile was supplied or found.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_INVALID_OR_CORRUPT + + MessageText: + + The transform requires a profile but the supplied profile was invalid or corrupt.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_TRUNCATED + + MessageText: + + The transform requires a profile but the supplied profile ended unexpectedly while parsing.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_PID_NOT_RECOGNIZED + + MessageText: + + The property ID does not match any property supported by the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VARIANT_TYPE_WRONG + + MessageText: + + The variant does not have the type expected for this property ID.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_NOT_WRITEABLE + + MessageText: + + An attempt was made to set the value on a read-only property.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_ARRAY_VALUE_WRONG_NUM_DIM + + MessageText: + + The array property value has an unexpected number of dimensions.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_SIZE_WRONG + + MessageText: + + The array or blob property value has an unexpected size.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_OUT_OF_RANGE + + MessageText: + + The property value is out of range for this transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_INCOMPATIBLE + + MessageText: + + The property value is incompatible with some other property or mediatype set on the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_OUTPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set output mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_INPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set input mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION + + MessageText: + + The requested operation is not supported for the currently set combination of mediatypes.%0 + + + + + MessageId: MF_E_TRANSFORM_CONFLICTS_WITH_OTHER_CURRENTLY_ENABLED_FEATURES + + MessageText: + + The requested feature is not supported in combination with some other currently enabled feature.%0 + + + + + MessageId: MF_E_TRANSFORM_NEED_MORE_INPUT + + MessageText: + + The transform cannot produce output until it gets more input samples.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_SPKR_CONFIG + + MessageText: + + The requested operation is not supported for the current speaker configuration.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING + + MessageText: + + The transform cannot accept mediatype changes in the middle of processing.%0 + + + + + MessageId: MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT + + MessageText: + + The caller should not propagate this event to downstream components.%0 + + + + + MessageId: MF_E_UNSUPPORTED_D3D_TYPE + + MessageText: + + The input type is not supported for D3D device.%0 + + + + + MessageId: MF_E_TRANSFORM_ASYNC_LOCKED + + MessageText: + + The caller does not appear to support this transform's asynchronous capabilities.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_INITIALIZE_ACM_DRIVER + + MessageText: + + An audio compression manager driver could not be initialized by the transform.%0 + + + + + MessageId: MF_E_LICENSE_INCORRECT_RIGHTS + + MessageText: + + You are not allowed to open this file. Contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_OUTOFDATE + + MessageText: + + The license for this media file has expired. Get a new license or contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_REQUIRED + + MessageText: + + You need a license to perform the requested operation on this media file.%0 + + + + + MessageId: MF_E_DRM_HARDWARE_INCONSISTENT + + MessageText: + + The licenses for your media files are corrupted. Contact Microsoft product support.%0 + + + + + MessageId: MF_E_NO_CONTENT_PROTECTION_MANAGER + + MessageText: + + The APP needs to provide IMFContentProtectionManager callback to access the protected media file.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NO_RIGHTS + + MessageText: + + Client does not have rights to restore licenses.%0 + + + + + MessageId: MF_E_BACKUP_RESTRICTED_LICENSE + + MessageText: + + Licenses are restricted and hence can not be backed up.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NEEDS_INDIVIDUALIZATION + + MessageText: + + License restore requires machine to be individualized.%0 + + + + + MessageId: MF_S_PROTECTION_NOT_REQUIRED + + MessageText: + + Protection for stream is not required.%0 + + + + + MessageId: MF_E_COMPONENT_REVOKED + + MessageText: + + Component is revoked.%0 + + + + + MessageId: MF_E_TRUST_DISABLED + + MessageText: + + Trusted functionality is currently disabled on this component.%0 + + + + + MessageId: MF_E_WMDRMOTA_NO_ACTION + + MessageText: + + No Action is set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_ALREADY_SET + + MessageText: + + Action is already set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_HEADER_NOT_AVAILABLE + + MessageText: + + DRM Heaader is not available.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_ENCRYPTION_SCHEME_NOT_SUPPORTED + + MessageText: + + Current encryption scheme is not supported.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_MISMATCH + + MessageText: + + Action does not match with current configuration.%0 + + + + + MessageId: MF_E_WMDRMOTA_INVALID_POLICY + + MessageText: + + Invalid policy for WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_POLICY_UNSUPPORTED + + MessageText: + + The policies that the Input Trust Authority requires to be enforced are unsupported by the outputs.%0 + + + + + MessageId: MF_E_OPL_NOT_SUPPORTED + + MessageText: + + The OPL that the license requires to be enforced are not supported by the Input Trust Authority.%0 + + + + + MessageId: MF_E_TOPOLOGY_VERIFICATION_FAILED + + MessageText: + + The topology could not be successfully verified.%0 + + + + + MessageId: MF_E_SIGNATURE_VERIFICATION_FAILED + + MessageText: + + Signature verification could not be completed successfully for this component.%0 + + + + + MessageId: MF_E_DEBUGGING_NOT_ALLOWED + + MessageText: + + Running this process under a debugger while using protected content is not allowed.%0 + + + + + MessageId: MF_E_CODE_EXPIRED + + MessageText: + + MF component has expired.%0 + + + + + MessageId: MF_E_GRL_VERSION_TOO_LOW + + MessageText: + + The current GRL on the machine does not meet the minimum version requirements.%0 + + + + + MessageId: MF_E_GRL_RENEWAL_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any renewal entries for the specified revocation.%0 + + + + + MessageId: MF_E_GRL_EXTENSIBLE_ENTRY_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any extensible entries for the specified extension GUID.%0 + + + + + MessageId: MF_E_KERNEL_UNTRUSTED + + MessageText: + + The kernel isn't secure for high security level content.%0 + + + + + MessageId: MF_E_PEAUTH_UNTRUSTED + + MessageText: + + The response from protected environment driver isn't valid.%0 + + + + + MessageId: MF_E_NON_PE_PROCESS + + MessageText: + + A non-PE process tried to talk to PEAuth.%0 + + + + + MessageId: MF_E_REBOOT_REQUIRED + + MessageText: + + We need to reboot the machine.%0 + + + + + MessageId: MF_S_WAIT_FOR_POLICY_SET + + MessageText: + + Protection for this stream is not guaranteed to be enforced until the MEPolicySet event is fired.%0 + + + + + MessageId: MF_S_VIDEO_DISABLED_WITH_UNKNOWN_SOFTWARE_OUTPUT + + MessageText: + + This video stream is disabled because it is being sent to an unknown software output.%0 + + + + + MessageId: MF_E_GRL_INVALID_FORMAT + + MessageText: + + The GRL file is not correctly formed, it may have been corrupted or overwritten.%0 + + + + + MessageId: MF_E_GRL_UNRECOGNIZED_FORMAT + + MessageText: + + The GRL file is in a format newer than those recognized by this GRL Reader.%0 + + + + + MessageId: MF_E_ALL_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and required all processes that can run protected media to restart.%0 + + + + + MessageId: MF_E_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and the current process needs to restart.%0 + + + + + MessageId: MF_E_USERMODE_UNTRUSTED + + MessageText: + + The user space is untrusted for protected content play.%0 + + + + + MessageId: MF_E_PEAUTH_SESSION_NOT_STARTED + + MessageText: + + PEAuth communication session hasn't been started.%0 + + + + + MessageId: MF_E_PEAUTH_PUBLICKEY_REVOKED + + MessageText: + + PEAuth's public key is revoked.%0 + + + + + MessageId: MF_E_GRL_ABSENT + + MessageText: + + The GRL is absent.%0 + + + + + MessageId: MF_S_PE_TRUSTED + + MessageText: + + The Protected Environment is trusted.%0 + + + + + MessageId: MF_E_PE_UNTRUSTED + + MessageText: + + The Protected Environment is untrusted.%0 + + + + + MessageId: MF_E_PEAUTH_NOT_STARTED + + MessageText: + + The Protected Environment Authorization service (PEAUTH) has not been started.%0 + + + + + MessageId: MF_E_INCOMPATIBLE_SAMPLE_PROTECTION + + MessageText: + + The sample protection algorithms supported by components are not compatible.%0 + + + + + MessageId: MF_E_PE_SESSIONS_MAXED + + MessageText: + + No more protected environment sessions can be supported.%0 + + + + + MessageId: MF_E_HIGH_SECURITY_LEVEL_CONTENT_NOT_ALLOWED + + MessageText: + + WMDRM ITA does not allow protected content with high security level for this release.%0 + + + + + MessageId: MF_E_TEST_SIGNED_COMPONENTS_NOT_ALLOWED + + MessageText: + + WMDRM ITA cannot allow the requested action for the content as one or more components is not properly signed.%0 + + + + + MessageId: MF_E_ITA_UNSUPPORTED_ACTION + + MessageText: + + WMDRM ITA does not support the requested action.%0 + + + + + MessageId: MF_E_ITA_ERROR_PARSING_SAP_PARAMETERS + + MessageText: + + WMDRM ITA encountered an error in parsing the Secure Audio Path parameters.%0 + + + + + MessageId: MF_E_POLICY_MGR_ACTION_OUTOFBOUNDS + + MessageText: + + The Policy Manager action passed in is invalid.%0 + + + + + MessageId: MF_E_BAD_OPL_STRUCTURE_FORMAT + + MessageText: + + The structure specifying Output Protection Level is not the correct format.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_PROTECTION_GUID + + MessageText: + + WMDRM ITA does not recognize the Explicite Analog Video Output Protection guid specified in the license.%0 + + + + + MessageId: MF_E_NO_PMP_HOST + + MessageText: + + IMFPMPHost object not available.%0 + + + + + MessageId: MF_E_ITA_OPL_DATA_NOT_INITIALIZED + + MessageText: + + WMDRM ITA could not initialize the Output Protection Level data.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Analog Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_DIGITAL_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Digital Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_CLOCK_INVALID_CONTINUITY_KEY + + MessageText: + + The continuity key supplied is not currently valid.%0 + + + + + MessageId: MF_E_CLOCK_NO_TIME_SOURCE + + MessageText: + + No Presentation Time Source has been specified.%0 + + + + + MessageId: MF_E_CLOCK_STATE_ALREADY_SET + + MessageText: + + The clock is already in the requested state.%0 + + + + + MessageId: MF_E_CLOCK_NOT_SIMPLE + + MessageText: + + The clock has too many advanced features to carry out the request.%0 + + + + + MessageId: MF_S_CLOCK_STOPPED + + MessageText: + + Timer::SetTimer returns this success code if called happened while timer is stopped. Timer is not going to be dispatched until clock is running%0 + + + + + MessageId: MF_E_NO_MORE_DROP_MODES + + MessageText: + + The component does not support any more drop modes.%0 + + + + + MessageId: MF_E_NO_MORE_QUALITY_LEVELS + + MessageText: + + The component does not support any more quality levels.%0 + + + + + MessageId: MF_E_DROPTIME_NOT_SUPPORTED + + MessageText: + + The component does not support drop time functionality.%0 + + + + + MessageId: MF_E_QUALITYKNOB_WAIT_LONGER + + MessageText: + + Quality Manager needs to wait longer before bumping the Quality Level up.%0 + + + + + MessageId: MF_E_QM_INVALIDSTATE + + MessageText: + + Quality Manager is in an invalid state. Quality Management is off at this moment.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_CONTAINERTYPE + + MessageText: + + No transcode output container type is specified.%0 + + + + + MessageId: MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS + + MessageText: + + The profile does not have a media type configuration for any selected source streams.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_MATCHING_ENCODER + + MessageText: + + Cannot find an encoder MFT that accepts the user preferred output type.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_INITIALIZED + + MessageText: + + Memory allocator is not initialized.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_COMMITED + + MessageText: + + Memory allocator is not committed yet.%0 + + + + + MessageId: MF_E_ALLOCATOR_ALREADY_COMMITED + + MessageText: + + Memory allocator has already been committed.%0 + + + + + MessageId: MF_E_STREAM_ERROR + + MessageText: + + An error occurred in media stream.%0 + + + + + MessageId: MF_E_INVALID_STREAM_STATE + + MessageText: + + Stream is not in a state to handle the request.%0 + + + + + MessageId: MF_E_HW_STREAM_NOT_CONNECTED + + MessageText: + + Hardware stream is not connected yet.%0 + + + + + Main interface for using Media Foundation with NAudio + + + + + initializes MediaFoundation - only needs to be called once per process + + + + + Enumerate the installed MediaFoundation transforms in the specified category + + A category from MediaFoundationTransformCategories + + + + + uninitializes MediaFoundation + + + + + Creates a Media type + + + + + Creates a media type from a WaveFormat + + + + + Creates a memory buffer of the specified size + + Memory buffer size in bytes + The memory buffer + + + + Creates a sample object + + The sample object + + + + Creates a new attributes store + + Initial size + The attributes store + + + + Creates a media foundation byte stream based on a stream object + (usable with WinRT streams) + + The input stream + A media foundation byte stream + + + + Creates a source reader based on a byte stream + + The byte stream + A media foundation source reader + + + + Interop definitions for MediaFoundation + thanks to Lucian Wischik for the initial work on many of these definitions (also various interfaces) + n.b. the goal is to make as much of this internal as possible, and provide + better .NET APIs using the MediaFoundationApi class instead + + + + + Initializes Microsoft Media Foundation. + + + + + Shuts down the Microsoft Media Foundation platform + + + + + Creates an empty media type. + + + + + Initializes a media type from a WAVEFORMATEX structure. + + + + + Converts a Media Foundation audio media type to a WAVEFORMATEX structure. + + TODO: try making second parameter out WaveFormatExtraData + + + + Creates the source reader from a URL. + + + + + Creates the source reader from a byte stream. + + + + + Creates the sink writer from a URL or byte stream. + + + + + Creates a Microsoft Media Foundation byte stream that wraps an IRandomAccessStream object. + + + + + Gets a list of Microsoft Media Foundation transforms (MFTs) that match specified search criteria. + + + + + Creates an empty media sample. + + + + + Allocates system memory and creates a media buffer to manage it. + + + + + Creates an empty attribute store. + + + + + Gets a list of output formats from an audio encoder. + + + + + All streams + + + + + First audio stream + + + + + First video stream + + + + + Media source + + + + + Media Foundation SDK Version + + + + + Media Foundation API Version + + + + + Media Foundation Version + + + + + An abstract base class for simplifying working with Media Foundation Transforms + You need to override the method that actually creates and configures the transform + + + + + The Source Provider + + + + + The Output WaveFormat + + + + + Constructs a new MediaFoundationTransform wrapper + Will read one second at a time + + The source provider for input data to the transform + The desired output format + + + + To be implemented by overriding classes. Create the transform object, set up its input and output types, + and configure any custom properties in here + + An object implementing IMFTrasform + + + + Disposes this MediaFoundation transform + + + + + Disposes this Media Foundation Transform + + + + + Destructor + + + + + The output WaveFormat of this Media Foundation Transform + + + + + Reads data out of the source, passing it through the transform + + Output buffer + Offset within buffer to write to + Desired byte count + Number of bytes read + + + + Attempts to read from the transform + Some useful info here: + http://msdn.microsoft.com/en-gb/library/windows/desktop/aa965264%28v=vs.85%29.aspx#process_data + + + + + + Indicate that the source has been repositioned and completely drain out the transforms buffers + + + + + Media Foundation Transform Categories + + + + + MFT_CATEGORY_VIDEO_DECODER + + + + + MFT_CATEGORY_VIDEO_ENCODER + + + + + MFT_CATEGORY_VIDEO_EFFECT + + + + + MFT_CATEGORY_MULTIPLEXER + + + + + MFT_CATEGORY_DEMULTIPLEXER + + + + + MFT_CATEGORY_AUDIO_DECODER + + + + + MFT_CATEGORY_AUDIO_ENCODER + + + + + MFT_CATEGORY_AUDIO_EFFECT + + + + + MFT_CATEGORY_VIDEO_PROCESSOR + + + + + MFT_CATEGORY_OTHER + + + + + Media Type helper class, simplifying working with IMFMediaType + (will probably change in the future, to inherit from an attributes class) + Currently does not release the COM object, so you must do that yourself + + + + + Wraps an existing IMFMediaType object + + The IMFMediaType object + + + + Creates and wraps a new IMFMediaType object + + + + + Creates and wraps a new IMFMediaType object based on a WaveFormat + + WaveFormat + + + + Tries to get a UINT32 value, returning a default value if it doesn't exist + + Attribute key + Default value + Value or default if key doesn't exist + + + + The Sample Rate (valid for audio media types) + + + + + The number of Channels (valid for audio media types) + + + + + The number of bits per sample (n.b. not always valid for compressed audio types) + + + + + The average bytes per second (valid for audio media types) + + + + + The Media Subtype. For audio, is a value from the AudioSubtypes class + + + + + The Major type, e.g. audio or video (from the MediaTypes class) + + + + + Access to the actual IMFMediaType object + Use to pass to MF APIs or Marshal.ReleaseComObject when you are finished with it + + + + + Major Media Types + http://msdn.microsoft.com/en-us/library/windows/desktop/aa367377%28v=vs.85%29.aspx + + + + + Default + + + + + Audio + + + + + Video + + + + + Protected Media + + + + + Synchronized Accessible Media Interchange (SAMI) captions. + + + + + Script stream + + + + + Still image stream. + + + + + HTML stream. + + + + + Binary stream. + + + + + A stream that contains data files. + + + + + Contains information about an input stream on a Media Foundation transform (MFT) + + + + + Maximum amount of time between an input sample and the corresponding output sample, in 100-nanosecond units. + + + + + Bitwise OR of zero or more flags from the _MFT_INPUT_STREAM_INFO_FLAGS enumeration. + + + + + The minimum size of each input buffer, in bytes. + + + + + Maximum amount of input data, in bytes, that the MFT holds to perform lookahead. + + + + + The memory alignment required for input buffers. If the MFT does not require a specific alignment, the value is zero. + + + + + Defines messages for a Media Foundation transform (MFT). + + + + + Requests the MFT to flush all stored data. + + + + + Requests the MFT to drain any stored data. + + + + + Sets or clears the Direct3D Device Manager for DirectX Video Accereration (DXVA). + + + + + Drop samples - requires Windows 7 + + + + + Command Tick - requires Windows 8 + + + + + Notifies the MFT that streaming is about to begin. + + + + + Notifies the MFT that streaming is about to end. + + + + + Notifies the MFT that an input stream has ended. + + + + + Notifies the MFT that the first sample is about to be processed. + + + + + Marks a point in the stream. This message applies only to asynchronous MFTs. Requires Windows 7 + + + + + Contains information about an output buffer for a Media Foundation transform. + + + + + Output stream identifier. + + + + + Pointer to the IMFSample interface. + + + + + Before calling ProcessOutput, set this member to zero. + + + + + Before calling ProcessOutput, set this member to NULL. + + + + + Contains information about an output stream on a Media Foundation transform (MFT). + + + + + Bitwise OR of zero or more flags from the _MFT_OUTPUT_STREAM_INFO_FLAGS enumeration. + + + + + Minimum size of each output buffer, in bytes. + + + + + The memory alignment required for output buffers. + + + + + Contains media type information for registering a Media Foundation transform (MFT). + + + + + The major media type. + + + + + The Media Subtype + + + + + Contains statistics about the performance of the sink writer. + + + + + The size of the structure, in bytes. + + + + + The time stamp of the most recent sample given to the sink writer. + + + + + The time stamp of the most recent sample to be encoded. + + + + + The time stamp of the most recent sample given to the media sink. + + + + + The time stamp of the most recent stream tick. + + + + + The system time of the most recent sample request from the media sink. + + + + + The number of samples received. + + + + + The number of samples encoded. + + + + + The number of samples given to the media sink. + + + + + The number of stream ticks received. + + + + + The amount of data, in bytes, currently waiting to be processed. + + + + + The total amount of data, in bytes, that has been sent to the media sink. + + + + + The number of pending sample requests. + + + + + The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer. + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink. + + + + + Contains flags for registering and enumeration Media Foundation transforms (MFTs). + + + + + None + + + + + The MFT performs synchronous data processing in software. + + + + + The MFT performs asynchronous data processing in software. + + + + + The MFT performs hardware-based data processing, using either the AVStream driver or a GPU-based proxy MFT. + + + + + The MFT that must be unlocked by the application before use. + + + + + For enumeration, include MFTs that were registered in the caller's process. + + + + + The MFT is optimized for transcoding rather than playback. + + + + + For enumeration, sort and filter the results. + + + + + Bitwise OR of all the flags, excluding MFT_ENUM_FLAG_SORTANDFILTER. + + + + + Indicates the status of an input stream on a Media Foundation transform (MFT). + + + + + None + + + + + The input stream can receive more data at this time. + + + + + Describes an input stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of input data must contain complete, unbroken units of data. + + + + + Each media sample that the client provides as input must contain exactly one unit of data, as defined for the MFT_INPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All input samples must be the same size. + + + + + MTF Input Stream Holds buffers + + + + + The MFT does not hold input samples after the IMFTransform::ProcessInput method returns. + + + + + This input stream can be removed by calling IMFTransform::DeleteInputStream. + + + + + This input stream is optional. + + + + + The MFT can perform in-place processing. + + + + + Defines flags for the IMFTransform::ProcessOutput method. + + + + + None + + + + + The MFT can still generate output from this stream without receiving any more input. + + + + + The format has changed on this output stream, or there is a new preferred format for this stream. + + + + + The MFT has removed this output stream. + + + + + There is no sample ready for this stream. + + + + + Indicates whether a Media Foundation transform (MFT) can produce output data. + + + + + None + + + + + There is a sample available for at least one output stream. + + + + + Describes an output stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of output data from the MFT contains complete, unbroken units of data. + + + + + Each output sample contains exactly one unit of data, as defined for the MFT_OUTPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All output samples are the same size. + + + + + The MFT can discard the output data from this output stream, if requested by the client. + + + + + This output stream is optional. + + + + + The MFT provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. + + + + + The MFT can either provide output samples for this stream or it can use samples that the client allocates. + + + + + The MFT does not require the client to process the output for this stream. + + + + + The MFT might remove this output stream during streaming. + + + + + Defines flags for processing output samples in a Media Foundation transform (MFT). + + + + + None + + + + + Do not produce output for streams in which the pSample member of the MFT_OUTPUT_DATA_BUFFER structure is NULL. + + + + + Regenerates the last output sample. + + + + + Process Output Status flags + + + + + None + + + + + The Media Foundation transform (MFT) has created one or more new output streams. + + + + + Defines flags for the setting or testing the media type on a Media Foundation transform (MFT). + + + + + None + + + + + Test the proposed media type, but do not set it. + + + + + Represents a MIDI Channel AfterTouch Event. + + + + + Creates a new ChannelAfterTouchEvent from raw MIDI data + + A binary reader + + + + Creates a new Channel After-Touch Event + + Absolute time + Channel + After-touch pressure + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The aftertouch pressure value + + + + + Represents a MIDI control change event + + + + + Reads a control change event from a MIDI stream + + Binary reader on the MIDI stream + + + + Creates a control change event + + Time + MIDI Channel Number + The MIDI Controller + Controller value + + + + Describes this control change event + + A string describing this event + + + + + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The controller number + + + + + The controller value + + + + + Represents a MIDI key signature event event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new Key signature event with the specified data + + + + + Creates a deep clone of this MIDI event. + + + + + Number of sharps or flats + + + + + Major or Minor key + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event + + + + + Gets the type of this meta event + + + + + Empty constructor + + + + + Custom constructor for use by derived types, who will manage the data themselves + + Meta event type + Meta data length + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Reads a meta-event from a stream + + A binary reader based on the stream of MIDI data + A new MetaEvent object + + + + Describes this meta event + + + + + + + + + + MIDI MetaEvent Type + + + + Track sequence number + + + Text event + + + Copyright + + + Sequence track name + + + Track instrument name + + + Lyric + + + Marker + + + Cue point + + + Program (patch) name + + + Device (port) name + + + MIDI Channel (not official?) + + + MIDI Port (not official?) + + + End track + + + Set tempo + + + SMPTE offset + + + Time signature + + + Key signature + + + Sequencer specific + + + + MIDI command codes + + + + Note Off + + + Note On + + + Key After-touch + + + Control change + + + Patch change + + + Channel after-touch + + + Pitch wheel change + + + Sysex message + + + Eox (comes at end of a sysex message) + + + Timing clock (used when synchronization is required) + + + Start sequence + + + Continue sequence + + + Stop sequence + + + Auto-Sensing + + + Meta-event + + + + MidiController enumeration + http://www.midi.org/techspecs/midimessages.php#3 + + + + Bank Select (MSB) + + + Modulation (MSB) + + + Breath Controller + + + Foot controller (MSB) + + + Main volume + + + Pan + + + Expression + + + Bank Select LSB + + + Sustain + + + Portamento On/Off + + + Sostenuto On/Off + + + Soft Pedal On/Off + + + Legato Footswitch + + + Reset all controllers + + + All notes off + + + + Represents an individual MIDI event + + + + The MIDI command code + + + + Creates a MidiEvent from a raw message received using + the MME MIDI In APIs + + The short MIDI message + A new MIDI Event + + + + Constructs a MidiEvent from a BinaryStream + + The binary stream of MIDI data + The previous MIDI event (pass null for first event) + A new MidiEvent + + + + Converts this MIDI event to a short message (32 bit integer) that + can be sent by the Windows MIDI out short message APIs + Cannot be implemented for all MIDI messages + + A short message + + + + Default constructor + + + + + Creates a MIDI event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + + + + Creates a deep clone of this MIDI event. + + + + + The MIDI Channel Number for this event (1-16) + + + + + The Delta time for this event + + + + + The absolute time for this event + + + + + The command code for this event + + + + + Whether this is a note off event + + + + + Whether this is a note on event + + + + + Determines if this is an end track event + + + + + Displays a summary of the MIDI event + + A string containing a brief description of this MIDI event + + + + Utility function that can read a variable length integer from a binary stream + + The binary stream + The integer read + + + + Writes a variable length integer to a binary stream + + Binary stream + The value to write + + + + Exports this MIDI event's data + Overriden in derived classes, but they should call this version + + Absolute time used to calculate delta. + Is updated ready for the next delta calculation + Stream to write to + + + + A helper class to manage collection of MIDI events + It has the ability to organise them in tracks + + + + + Creates a new Midi Event collection + + Initial file type + Delta Ticks Per Quarter Note + + + + The number of tracks + + + + + The absolute time that should be considered as time zero + Not directly used here, but useful for timeshifting applications + + + + + The number of ticks per quarter note + + + + + Gets events on a specified track + + Track number + The list of events + + + + Gets events on a specific track + + Track number + The list of events + + + + Adds a new track + + The new track event list + + + + Adds a new track + + Initial events to add to the new track + The new track event list + + + + Removes a track + + Track number to remove + + + + Clears all events + + + + + The MIDI file type + + + + + Adds an event to the appropriate track depending on file type + + The event to be added + The original (or desired) track number + When adding events in type 0 mode, the originalTrack parameter + is ignored. If in type 1 mode, it will use the original track number to + store the new events. If the original track was 0 and this is a channel based + event, it will create new tracks if necessary and put it on the track corresponding + to its channel number + + + + Sorts, removes empty tracks and adds end track markers + + + + + Gets an enumerator for the lists of track events + + + + + Gets an enumerator for the lists of track events + + + + + Utility class for comparing MidiEvent objects + + + + + Compares two MidiEvents + Sorts by time, with EndTrack always sorted to the end + + + + + Class able to read a MIDI file + + + + + Opens a MIDI file for reading + + Name of MIDI file + + + + MIDI File format + + + + + Opens a MIDI file for reading + + Name of MIDI file + If true will error on non-paired note events + + + + Opens a MIDI file stream for reading + + The input stream containing a MIDI file + If true will error on non-paired note events + + + + The collection of events in this MIDI file + + + + + Number of tracks in this MIDI file + + + + + Delta Ticks Per Quarter Note + + + + + Describes the MIDI file + + A string describing the MIDI file and its events + + + + Exports a MIDI file + + Filename to export to + Events to export + + + + Represents a MIDI in device + + + + + Called when a MIDI message is received + + + + + An invalid MIDI message + + + + + Gets the number of MIDI input devices available in the system + + + + + Opens a specified MIDI in device + + The device number + + + + Closes this MIDI in device + + + + + Closes this MIDI in device + + + + + Start the MIDI in device + + + + + Stop the MIDI in device + + + + + Reset the MIDI in device + + + + + Gets the MIDI in device info + + + + + Closes the MIDI out device + + True if called from Dispose + + + + Cleanup + + + + + MIDI In Device Capabilities + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name + + + + + Support - Reserved + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + MIDI In Message Information + + + + + Create a new MIDI In Message EventArgs + + + + + + + The Raw message received from the MIDI In API + + + + + The raw message interpreted as a MidiEvent + + + + + The timestamp in milliseconds for this message + + + + + MIM_OPEN + + + + + MIM_CLOSE + + + + + MIM_DATA + + + + + MIM_LONGDATA + + + + + MIM_ERROR + + + + + MIM_LONGERROR + + + + + MIM_MOREDATA + + + + + MOM_OPEN + + + + + MOM_CLOSE + + + + + MOM_DONE + + + + + Represents a MIDI message + + + + + Creates a new MIDI message + + Status + Data parameter 1 + Data parameter 2 + + + + Creates a new MIDI message from a raw message + + A packed MIDI message from an MMIO function + + + + Creates a Note On message + + Note number (0 to 127) + Volume (0 to 127) + MIDI channel (1 to 16) + A new MidiMessage object + + + + Creates a Note Off message + + Note number + Volume + MIDI channel (1-16) + A new MidiMessage object + + + + Creates a patch change message + + The patch number + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Creates a Control Change message + + The controller number to change + The value to set the controller to + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Returns the raw MIDI message data + + + + + Represents a MIDI out device + + + + + Gets the number of MIDI devices available in the system + + + + + Gets the MIDI Out device info + + + + + Opens a specified MIDI out device + + The device number + + + + Closes this MIDI out device + + + + + Closes this MIDI out device + + + + + Gets or sets the volume for this MIDI out device + + + + + Resets the MIDI out device + + + + + Sends a MIDI out message + + Message + Parameter 1 + Parameter 2 + + + + Sends a MIDI message to the MIDI out device + + The message to send + + + + Closes the MIDI out device + + True if called from Dispose + + + + Send a long message, for example sysex. + + The bytes to send. + + + + Cleanup + + + + + class representing the capabilities of a MIDI out device + MIDIOUTCAPS: http://msdn.microsoft.com/en-us/library/dd798467%28VS.85%29.aspx + + + + + MIDICAPS_VOLUME + + + + + separate left-right volume control + MIDICAPS_LRVOLUME + + + + + MIDICAPS_CACHE + + + + + MIDICAPS_STREAM + driver supports midiStreamOut directly + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + Returns the number of supported voices + + + + + Gets the polyphony of the device + + + + + Returns true if the device supports all channels + + + + + Queries whether a particular channel is supported + + Channel number to test + True if the channel is supported + + + + Returns true if the device supports patch caching + + + + + Returns true if the device supports separate left and right volume + + + + + Returns true if the device supports MIDI stream out + + + + + Returns true if the device supports volume control + + + + + Returns the type of technology used by this MIDI out device + + + + + Represents the different types of technology used by a MIDI out device + + from mmsystem.h + + + The device is a MIDI port + + + The device is a MIDI synth + + + The device is a square wave synth + + + The device is an FM synth + + + The device is a MIDI mapper + + + The device is a WaveTable synth + + + The device is a software synth + + + + Represents a note MIDI event + + + + + Reads a NoteEvent from a stream of MIDI data + + Binary Reader for the stream + + + + Creates a MIDI Note Event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + MIDI Note Number + MIDI Note Velocity + + + + + + + + + The MIDI note number + + + + + The note velocity + + + + + The note name + + + + + Describes the Note Event + + Note event as a string + + + + + + + + + Represents a MIDI note on event + + + + + Reads a new Note On event from a stream of MIDI data + + Binary reader on the MIDI data stream + + + + Creates a NoteOn event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI note number + MIDI note velocity + MIDI note duration + + + + Creates a deep clone of this MIDI event. + + + + + The associated Note off event + + + + + Get or set the Note Number, updating the off event at the same time + + + + + Get or set the channel, updating the off event at the same time + + + + + The duration of this note + + + There must be a note off event + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI patch change event + + + + + Gets the default MIDI instrument names + + + + + Reads a new patch change event from a MIDI stream + + Binary reader for the MIDI stream + + + + Creates a new patch change event + + Time of the event + Channel number + Patch number + + + + The Patch Number + + + + + Describes this patch change event + + String describing the patch change event + + + + Gets as a short message for sending with the midiOutShortMsg API + + short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI pitch wheel change event + + + + + Reads a pitch wheel change event from a MIDI stream + + The MIDI stream to read from + + + + Creates a new pitch wheel change event + + Absolute event time + Channel + Pitch wheel value + + + + Describes this pitch wheel change event + + String describing this pitch wheel change event + + + + Pitch Wheel Value 0 is minimum, 0x2000 (8192) is default, 0x3FFF (16383) is maximum + + + + + Gets a short message + + Integer to sent as short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event with raw data + + + + + Raw data contained in the meta event + + + + + Creates a meta event with raw data + + + + + Creates a deep clone of this MIDI event. + + + + + Describes this meta event + + + + + + + + + + Represents a Sequencer Specific event + + + + + Reads a new sequencer specific event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new Sequencer Specific event + + The sequencer specific data + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this sequencer specific + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + SMPTE Offset Event + + + + + Creates a new time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a deep clone of this MIDI event. + + + + + Hours + + + + + Minutes + + + + + Seconds + + + + + Frames + + + + + SubFrames + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI sysex message + + + + + Reads a sysex message from a MIDI stream + + Stream of MIDI data + a new sysex message + + + + Creates a deep clone of this MIDI event. + + + + + Describes this sysex message + + A string describing the sysex message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI tempo event + + + + + Reads a new tempo event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new tempo event with specified settings + + Microseconds per quarter note + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Describes this tempo event + + String describing the tempo event + + + + Microseconds per quarter note + + + + + Tempo + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI text event + + + + + Reads a new text event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TextEvent + + The text in this type + MetaEvent type (must be one that is + associated with text data) + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this text event + + + + + The raw contents of this text event + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TimeSignatureEvent + + Time at which to create this event + Numerator + Denominator + Ticks in Metronome Click + No of 32nd Notes in Quarter Click + + + + Creates a deep clone of this MIDI event. + + + + + Numerator (number of beats in a bar) + + + + + Denominator (Beat unit), + 1 means 2, 2 means 4 (crochet), 3 means 8 (quaver), 4 means 16 and 5 means 32 + + + + + Ticks in a metronome click + + + + + Number of 32nd notes in a quarter note + + + + + The time signature + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI track sequence number event event + + + + + Creates a new track sequence number event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a deep clone of this MIDI event. + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Boolean mixer control + + + + + Gets the details for this control + + memory pointer + + + + The current value of the control + + + + + Custom Mixer control + + + + + Get the data for this custom control + + pointer to memory to receive data + + + + List text mixer control + + + + + Get the details for this control + + Memory location to read to + + + Represents a Windows mixer device + + + The number of mixer devices available + + + Connects to the specified mixer + The index of the mixer to use. + This should be between zero and NumberOfDevices - 1 + + + The number of destinations this mixer supports + + + The name of this mixer device + + + The manufacturer code for this mixer device + + + The product identifier code for this mixer device + + + Retrieve the specified MixerDestination object + The ID of the destination to use. + Should be between 0 and DestinationCount - 1 + + + + A way to enumerate the destinations + + + + + A way to enumerate all available devices + + + + + Represents a mixer control + + + + + Mixer Handle + + + + + Number of Channels + + + + + Mixer Handle Type + + + + + Gets all the mixer controls + + Mixer Handle + Mixer Line + Mixer Handle Type + + + + + Gets a specified Mixer Control + + Mixer Handle + Line ID + Control ID + Number of Channels + Flags to use (indicates the meaning of mixerHandle) + + + + + Gets the control details + + + + + Gets the control details + + + + + + Mixer control name + + + + + Mixer control type + + + + + Returns true if this is a boolean control + + Control type + + + + Is this a boolean control + + + + + Determines whether a specified mixer control type is a list text control + + + + + True if this is a list text control + + + + + True if this is a signed control + + + + + True if this is an unsigned control + + + + + True if this is a custom control + + + + + String representation for debug purposes + + + + + Mixer control types + + + + Custom + + + Boolean meter + + + Signed meter + + + Peak meter + + + Unsigned meter + + + Boolean + + + On Off + + + Mute + + + Mono + + + Loudness + + + Stereo Enhance + + + Button + + + Decibels + + + Signed + + + Unsigned + + + Percent + + + Slider + + + Pan + + + Q-sound pan + + + Fader + + + Volume + + + Bass + + + Treble + + + Equaliser + + + Single Select + + + Mux + + + Multiple select + + + Mixer + + + Micro time + + + Milli time + + + + Mixer Interop Flags + + + + + MIXER_OBJECTF_HANDLE = 0x80000000; + + + + + MIXER_OBJECTF_MIXER = 0x00000000; + + + + + MIXER_OBJECTF_HMIXER + + + + + MIXER_OBJECTF_WAVEOUT + + + + + MIXER_OBJECTF_HWAVEOUT + + + + + MIXER_OBJECTF_WAVEIN + + + + + MIXER_OBJECTF_HWAVEIN + + + + + MIXER_OBJECTF_MIDIOUT + + + + + MIXER_OBJECTF_HMIDIOUT + + + + + MIXER_OBJECTF_MIDIIN + + + + + MIXER_OBJECTF_HMIDIIN + + + + + MIXER_OBJECTF_AUX + + + + + MIXER_GETCONTROLDETAILSF_VALUE = 0x00000000; + MIXER_SETCONTROLDETAILSF_VALUE = 0x00000000; + + + + + MIXER_GETCONTROLDETAILSF_LISTTEXT = 0x00000001; + MIXER_SETCONTROLDETAILSF_LISTTEXT = 0x00000001; + + + + + MIXER_GETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_SETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_GETLINECONTROLSF_QUERYMASK = 0x0000000F; + + + + + MIXER_GETLINECONTROLSF_ALL = 0x00000000; + + + + + MIXER_GETLINECONTROLSF_ONEBYID = 0x00000001; + + + + + MIXER_GETLINECONTROLSF_ONEBYTYPE = 0x00000002; + + + + + MIXER_GETLINEINFOF_DESTINATION = 0x00000000; + + + + + MIXER_GETLINEINFOF_SOURCE = 0x00000001; + + + + + MIXER_GETLINEINFOF_LINEID = 0x00000002; + + + + + MIXER_GETLINEINFOF_COMPONENTTYPE = 0x00000003; + + + + + MIXER_GETLINEINFOF_TARGETTYPE = 0x00000004; + + + + + MIXER_GETLINEINFOF_QUERYMASK = 0x0000000F; + + + + + Mixer Line Flags + + + + + Audio line is active. An active line indicates that a signal is probably passing + through the line. + + + + + Audio line is disconnected. A disconnected line's associated controls can still be + modified, but the changes have no effect until the line is connected. + + + + + Audio line is an audio source line associated with a single audio destination line. + If this flag is not set, this line is an audio destination line associated with zero + or more audio source lines. + + + + + BOUNDS structure + + + + + dwMinimum / lMinimum / reserved 0 + + + + + dwMaximum / lMaximum / reserved 1 + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + METRICS structure + + + + + cSteps / reserved[0] + + + + + cbCustomData / reserved[1], number of bytes for control details + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + MIXERCONTROL struct + http://msdn.microsoft.com/en-us/library/dd757293%28VS.85%29.aspx + + + + + Represents a mixer line (source or destination) + + + + + Creates a new mixer destination + + Mixer Handle + Destination Index + Mixer Handle Type + + + + Creates a new Mixer Source For a Specified Source + + Mixer Handle + Destination Index + Source Index + Flag indicating the meaning of mixerHandle + + + + Creates a new Mixer Source + + Wave In Device + + + + Mixer Line Name + + + + + Mixer Line short name + + + + + The line ID + + + + + Component Type + + + + + Mixer destination type description + + + + + Number of channels + + + + + Number of sources + + + + + Number of controls + + + + + Is this destination active + + + + + Is this destination disconnected + + + + + Is this destination a source + + + + + Gets the specified source + + + + + Enumerator for the controls on this Mixer Limne + + + + + Enumerator for the sources on this Mixer Line + + + + + The name of the target output device + + + + + Describes this Mixer Line (for diagnostic purposes) + + + + + Mixer Line Component type enumeration + + + + + Audio line is a destination that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_DST_UNDEFINED + + + + + Audio line is a digital destination (for example, digital input to a DAT or CD audio device). + MIXERLINE_COMPONENTTYPE_DST_DIGITAL + + + + + Audio line is a line level destination (for example, line level input from a CD audio device) that will be the final recording source for the analog-to-digital converter (ADC). Because most audio cards for personal computers provide some sort of gain for the recording audio source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_DST_WAVEIN type. + MIXERLINE_COMPONENTTYPE_DST_LINE + + + + + Audio line is a destination used for a monitor. + MIXERLINE_COMPONENTTYPE_DST_MONITOR + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive speakers. This is the typical component type for the audio output of audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_SPEAKERS + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive headphones. Most audio cards use the same audio destination line for speakers and headphones, in which case the mixer device simply uses the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS type. + MIXERLINE_COMPONENTTYPE_DST_HEADPHONES + + + + + Audio line is a destination that will be routed to a telephone line. + MIXERLINE_COMPONENTTYPE_DST_TELEPHONE + + + + + Audio line is a destination that will be the final recording source for the waveform-audio input (ADC). This line typically provides some sort of gain or attenuation. This is the typical component type for the recording line of most audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_WAVEIN + + + + + Audio line is a destination that will be the final recording source for voice input. This component type is exactly like MIXERLINE_COMPONENTTYPE_DST_WAVEIN but is intended specifically for settings used during voice recording/recognition. Support for this line is optional for a mixer device. Many mixer devices provide only MIXERLINE_COMPONENTTYPE_DST_WAVEIN. + MIXERLINE_COMPONENTTYPE_DST_VOICEIN + + + + + Audio line is a source that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED + + + + + Audio line is a digital source (for example, digital output from a DAT or audio CD). + MIXERLINE_COMPONENTTYPE_SRC_DIGITAL + + + + + Audio line is a line-level source (for example, line-level input from an external stereo) that can be used as an optional recording source. Because most audio cards for personal computers provide some sort of gain for the recording source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY type. + MIXERLINE_COMPONENTTYPE_SRC_LINE + + + + + Audio line is a microphone recording source. Most audio cards for personal computers provide at least two types of recording sources: an auxiliary audio line and microphone input. A microphone audio line typically provides some sort of gain. Audio cards that use a single input for use with a microphone or auxiliary audio line should use the MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE component type. + MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE + + + + + Audio line is a source originating from the output of an internal synthesizer. Most audio cards for personal computers provide some sort of MIDI synthesizer (for example, an Adlib®-compatible or OPL/3 FM synthesizer). + MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER + + + + + Audio line is a source originating from the output of an internal audio CD. This component type is provided for audio cards that provide an audio source line intended to be connected to an audio CD (or CD-ROM playing an audio CD). + MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC + + + + + Audio line is a source originating from an incoming telephone line. + MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE + + + + + Audio line is a source originating from personal computer speaker. Several audio cards for personal computers provide the ability to mix what would typically be played on the internal speaker with the output of an audio card. Some audio cards support the ability to use this output as a recording source. + MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER + + + + + Audio line is a source originating from the waveform-audio output digital-to-analog converter (DAC). Most audio cards for personal computers provide this component type as a source to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination. Some cards also allow this source to be routed to the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT + + + + + Audio line is a source originating from the auxiliary audio line. This line type is intended as a source with gain or attenuation that can be routed to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination and/or recorded from the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY + + + + + Audio line is an analog source (for example, analog output from a video-cassette tape). + MIXERLINE_COMPONENTTYPE_SRC_ANALOG + + + + + Represents a signed mixer control + + + + + Gets details for this contrl + + + + + The value of the control + + + + + Minimum value for this control + + + + + Maximum value for this control + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + + Represents an unsigned mixer control + + + + + Gets the details for this control + + + + + The control value + + + + + The control's minimum value + + + + + The control's maximum value + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + Helper methods for working with audio buffers + + + + + Ensures the buffer is big enough + + + + + + + + Ensures the buffer is big enough + + + + + + + + these will become extension methods once we move to .NET 3.5 + + + + + Checks if the buffer passed in is entirely full of nulls + + + + + Converts to a string containing the buffer described in hex + + + + + Decodes the buffer using the specified encoding, stopping at the first null + + + + + Concatenates the given arrays into a single array. + + The arrays to concatenate + The concatenated resulting array. + + + + An encoding for use with file types that have one byte per character + + + + + The one and only instance of this class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chunk Identifier helpers + + + + + Chunk identifier to Int32 (replaces mmioStringToFOURCC) + + four character chunk identifier + Chunk identifier as int 32 + + + + A very basic circular buffer implementation + + + + + Create a new circular buffer + + Max buffer size in bytes + + + + Write data to the buffer + + Data to write + Offset into data + Number of bytes to write + number of bytes written + + + + Read from the buffer + + Buffer to read into + Offset into read buffer + Bytes to read + Number of bytes actually read + + + + Maximum length of this circular buffer + + + + + Number of bytes currently stored in the circular buffer + + + + + Resets the buffer + + + + + Advances the buffer, discarding bytes + + Bytes to advance + + + + A util class for conversions + + + + + linear to dB conversion + + linear value + decibel value + + + + dB to linear conversion + + decibel value + linear value + + + + Allows us to add descriptions to interop members + + + + + The description + + + + + Field description + + + + + String representation + + + + + + Helper to get descriptions + + + + + Describes the Guid by looking for a FieldDescription attribute on the specified class + + + + + HResult + + + + + S_OK + + + + + S_FALSE + + + + + E_INVALIDARG (from winerror.h) + + + + + MAKE_HRESULT macro + + + + + Helper to deal with the fact that in Win Store apps, + the HResult property name has changed + + COM Exception + The HResult + + + + Methods for converting between IEEE 80-bit extended double precision + and standard C# double precision. + + + + + Converts a C# double precision number to an 80-bit + IEEE extended double precision number (occupying 10 bytes). + + The double precision number to convert to IEEE extended. + An array of 10 bytes containing the IEEE extended number. + + + + Converts an IEEE 80-bit extended precision number to a + C# double precision number. + + The 80-bit IEEE extended number (as an array of 10 bytes). + A C# double precision number that is a close representation of the IEEE extended number. + + + + Pass-through stream that ignores Dispose + Useful for dealing with MemoryStreams that you want to re-use + + + + + The source stream all other methods fall through to + + + + + If true the Dispose will be ignored, if false, will pass through to the SourceStream + Set to true by default + + + + + Creates a new IgnoreDisposeStream + + The source stream + + + + Can Read + + + + + Can Seek + + + + + Can write to the underlying stream + + + + + Flushes the underlying stream + + + + + Gets the length of the underlying stream + + + + + Gets or sets the position of the underlying stream + + + + + Reads from the underlying stream + + + + + Seeks on the underlying stream + + + + + Sets the length of the underlying stream + + + + + Writes to the underlying stream + + + + + Dispose - by default (IgnoreDispose = true) will do nothing, + leaving the underlying stream undisposed + + + + + Support for Marshal Methods in both UWP and .NET 3.5 + + + + + SizeOf a structure + + + + + Offset of a field in a structure + + + + + Pointer to Structure + + + + + In-place and stable implementation of MergeSort + + + + + MergeSort a list of comparable items + + + + + MergeSort a list + + + + + General purpose native methods for internal NAudio use + + + + + A thread-safe Progress Log Control + + + + + Creates a new progress log control + + + + + The contents of the log as text + + + + + Log a message + + + + + Clear the log + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + WavePosition extension methods + + + + + Get Position as timespan + + + + + Manufacturer codes from mmreg.h + + + + Microsoft Corporation + + + Creative Labs, Inc + + + Media Vision, Inc. + + + Fujitsu Corp. + + + Artisoft, Inc. + + + Turtle Beach, Inc. + + + IBM Corporation + + + Vocaltec LTD. + + + Roland + + + DSP Solutions, Inc. + + + NEC + + + ATI + + + Wang Laboratories, Inc + + + Tandy Corporation + + + Voyetra + + + Antex Electronics Corporation + + + ICL Personal Systems + + + Intel Corporation + + + Advanced Gravis + + + Video Associates Labs, Inc. + + + InterActive Inc + + + Yamaha Corporation of America + + + Everex Systems, Inc + + + Echo Speech Corporation + + + Sierra Semiconductor Corp + + + Computer Aided Technologies + + + APPS Software International + + + DSP Group, Inc + + + microEngineering Labs + + + Computer Friends, Inc. + + + ESS Technology + + + Audio, Inc. + + + Motorola, Inc. + + + Canopus, co., Ltd. + + + Seiko Epson Corporation + + + Truevision + + + Aztech Labs, Inc. + + + Videologic + + + SCALACS + + + Korg Inc. + + + Audio Processing Technology + + + Integrated Circuit Systems, Inc. + + + Iterated Systems, Inc. + + + Metheus + + + Logitech, Inc. + + + Winnov, Inc. + + + NCR Corporation + + + EXAN + + + AST Research Inc. + + + Willow Pond Corporation + + + Sonic Foundry + + + Vitec Multimedia + + + MOSCOM Corporation + + + Silicon Soft, Inc. + + + Supermac + + + Audio Processing Technology + + + Speech Compression + + + Ahead, Inc. + + + Dolby Laboratories + + + OKI + + + AuraVision Corporation + + + Ing C. Olivetti & C., S.p.A. + + + I/O Magic Corporation + + + Matsushita Electric Industrial Co., LTD. + + + Control Resources Limited + + + Xebec Multimedia Solutions Limited + + + New Media Corporation + + + Natural MicroSystems + + + Lyrrus Inc. + + + Compusic + + + OPTi Computers Inc. + + + Adlib Accessories Inc. + + + Compaq Computer Corp. + + + Dialogic Corporation + + + InSoft, Inc. + + + M.P. Technologies, Inc. + + + Weitek + + + Lernout & Hauspie + + + Quanta Computer Inc. + + + Apple Computer, Inc. + + + Digital Equipment Corporation + + + Mark of the Unicorn + + + Workbit Corporation + + + Ositech Communications Inc. + + + miro Computer Products AG + + + Cirrus Logic + + + ISOLUTION B.V. + + + Horizons Technology, Inc + + + Computer Concepts Ltd + + + Voice Technologies Group, Inc. + + + Radius + + + Rockwell International + + + Co. XYZ for testing + + + Opcode Systems + + + Voxware Inc + + + Northern Telecom Limited + + + APICOM + + + Grande Software + + + ADDX + + + Wildcat Canyon Software + + + Rhetorex Inc + + + Brooktree Corporation + + + ENSONIQ Corporation + + + FAST Multimedia AG + + + NVidia Corporation + + + OKSORI Co., Ltd. + + + DiAcoustics, Inc. + + + Gulbransen, Inc. + + + Kay Elemetrics, Inc. + + + Crystal Semiconductor Corporation + + + Splash Studios + + + Quarterdeck Corporation + + + TDK Corporation + + + Digital Audio Labs, Inc. + + + Seer Systems, Inc. + + + PictureTel Corporation + + + AT&T Microelectronics + + + Osprey Technologies, Inc. + + + Mediatrix Peripherals + + + SounDesignS M.C.S. Ltd. + + + A.L. Digital Ltd. + + + Spectrum Signal Processing, Inc. + + + Electronic Courseware Systems, Inc. + + + AMD + + + Core Dynamics + + + CANAM Computers + + + Softsound, Ltd. + + + Norris Communications, Inc. + + + Danka Data Devices + + + EuPhonics + + + Precept Software, Inc. + + + Crystal Net Corporation + + + Chromatic Research, Inc + + + Voice Information Systems, Inc + + + Vienna Systems + + + Connectix Corporation + + + Gadget Labs LLC + + + Frontier Design Group LLC + + + Viona Development GmbH + + + Casio Computer Co., LTD + + + Diamond Multimedia + + + S3 + + + Fraunhofer + + + + Summary description for MmException. + + + + + Creates a new MmException + + The result returned by the Windows API call + The name of the Windows API that failed + + + + Helper function to automatically raise an exception on failure + + The result of the API call + The API function name + + + + Returns the Windows API result + + + + + Windows multimedia error codes from mmsystem.h. + + + + no error, MMSYSERR_NOERROR + + + unspecified error, MMSYSERR_ERROR + + + device ID out of range, MMSYSERR_BADDEVICEID + + + driver failed enable, MMSYSERR_NOTENABLED + + + device already allocated, MMSYSERR_ALLOCATED + + + device handle is invalid, MMSYSERR_INVALHANDLE + + + no device driver present, MMSYSERR_NODRIVER + + + memory allocation error, MMSYSERR_NOMEM + + + function isn't supported, MMSYSERR_NOTSUPPORTED + + + error value out of range, MMSYSERR_BADERRNUM + + + invalid flag passed, MMSYSERR_INVALFLAG + + + invalid parameter passed, MMSYSERR_INVALPARAM + + + handle being used simultaneously on another thread (eg callback),MMSYSERR_HANDLEBUSY + + + specified alias not found, MMSYSERR_INVALIDALIAS + + + bad registry database, MMSYSERR_BADDB + + + registry key not found, MMSYSERR_KEYNOTFOUND + + + registry read error, MMSYSERR_READERROR + + + registry write error, MMSYSERR_WRITEERROR + + + registry delete error, MMSYSERR_DELETEERROR + + + registry value not found, MMSYSERR_VALNOTFOUND + + + driver does not call DriverCallback, MMSYSERR_NODRIVERCB + + + more data to be returned, MMSYSERR_MOREDATA + + + unsupported wave format, WAVERR_BADFORMAT + + + still something playing, WAVERR_STILLPLAYING + + + header not prepared, WAVERR_UNPREPARED + + + device is synchronous, WAVERR_SYNC + + + Conversion not possible (ACMERR_NOTPOSSIBLE) + + + Busy (ACMERR_BUSY) + + + Header Unprepared (ACMERR_UNPREPARED) + + + Cancelled (ACMERR_CANCELED) + + + invalid line (MIXERR_INVALLINE) + + + invalid control (MIXERR_INVALCONTROL) + + + invalid value (MIXERR_INVALVALUE) + + + diff --git a/packages/NAudio.1.10.0/lib/netstandard2.0/NAudio.dll b/packages/NAudio.1.10.0/lib/netstandard2.0/NAudio.dll new file mode 100644 index 0000000000000000000000000000000000000000..a709fe0de3caef0119bdb5536f56d4f7f5ea14ad GIT binary patch literal 496640 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 HRto$Faj$lF literal 0 HcmV?d00001 diff --git a/packages/NAudio.1.10.0/lib/netstandard2.0/NAudio.xml b/packages/NAudio.1.10.0/lib/netstandard2.0/NAudio.xml new file mode 100644 index 0000000..6dabd72 --- /dev/null +++ b/packages/NAudio.1.10.0/lib/netstandard2.0/NAudio.xml @@ -0,0 +1,23957 @@ + + + + NAudio + + + +

+ a-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts an a-law encoded byte to a 16 bit linear sample + + a-law encoded byte + Linear sample + + + + A-law encoder + + + + + Encodes a single 16 bit sample to a-law + + 16 bit PCM sample + a-law encoded byte + + + + SpanDSP - a series of DSP components for telephony + + g722_decode.c - The ITU G.722 codec, decode part. + + Written by Steve Underwood <steveu@coppice.org> + + Copyright (C) 2005 Steve Underwood + Ported to C# by Mark Heath 2011 + + Despite my general liking of the GPL, I place my own contributions + to this code in the public domain for the benefit of all mankind - + even the slimy ones who might try to proprietize my work and use it + to my detriment. + + Based in part on a single channel G.722 codec which is: + Copyright (c) CMU 1993 + Computer Science, Speech Group + Chengxiang Lu and Alex Hauptmann + + + + + hard limits to 16 bit samples + + + + + Decodes a buffer of G722 + + Codec state + Output buffer (to contain decompressed PCM samples) + + Number of bytes in input G722 data to decode + Number of samples written into output buffer + + + + Encodes a buffer of G722 + + Codec state + Output buffer (to contain encoded G722) + PCM 16 bit samples to encode + Number of samples in the input buffer to encode + Number of encoded bytes written into output buffer + + + + Stores state to be used between calls to Encode or Decode + + + + + ITU Test Mode + TRUE if the operating in the special ITU test mode, with the band split filters disabled. + + + + + TRUE if the G.722 data is packed + + + + + 8kHz Sampling + TRUE if encode from 8k samples/second + + + + + Bits Per Sample + 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. + + + + + Signal history for the QMF (x) + + + + + Band + + + + + In bit buffer + + + + + Number of bits in InBuffer + + + + + Out bit buffer + + + + + Number of bits in OutBuffer + + + + + Creates a new instance of G722 Codec State for a + new encode or decode session + + Bitrate (typically 64000) + Special options + + + + Band data for G722 Codec + + + + s + + + sp + + + sz + + + r + + + a + + + ap + + + p + + + d + + + b + + + bp + + + sg + + + nb + + + det + + + + G722 Flags + + + + + None + + + + + Using a G722 sample rate of 8000 + + + + + Packed + + + + + mu-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts a mu-law encoded byte to a 16 bit linear sample + + mu-law encoded byte + Linear sample + + + + mu-law encoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + Encodes a single 16 bit sample to mu-law + + 16 bit PCM sample + mu-law encoded byte + + + + Audio Capture Client + + + + + Gets a pointer to the buffer + + Pointer to the buffer + + + + Gets a pointer to the buffer + + Number of frames to read + Buffer flags + Pointer to the buffer + + + + Gets the size of the next packet + + + + + Release buffer + + Number of frames written + + + + Release the COM object + + + + + Windows CoreAudio AudioClient + + + + + Retrieves the stream format that the audio engine uses for its internal processing of shared-mode streams. + Can be called before initialize + + + + + Initializes the Audio Client + + Share Mode + Stream Flags + Buffer Duration + Periodicity + Wave Format + Audio Session GUID (can be null) + + + + Retrieves the size (maximum capacity) of the audio buffer associated with the endpoint. (must initialize first) + + + + + Retrieves the maximum latency for the current stream and can be called any time after the stream has been initialized. + + + + + Retrieves the number of frames of padding in the endpoint buffer (must initialize first) + + + + + Retrieves the length of the periodic interval separating successive processing passes by the audio engine on the data in the endpoint buffer. + (can be called before initialize) + + + + + Gets the minimum device period + (can be called before initialize) + + + + + Returns the AudioStreamVolume service for this AudioClient. + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Gets the AudioClockClient service + + + + + Gets the AudioRenderClient service + + + + + Gets the AudioCaptureClient service + + + + + Determines whether if the specified output format is supported + + The share mode. + The desired format. + True if the format is supported + + + + Determines if the specified output format is supported in shared mode + + Share Mode + Desired Format + Output The closest match format. + True if the format is supported + + + + Starts the audio stream + + + + + Stops the audio stream. + + + + + Set the Event Handle for buffer synchro. + + The Wait Handle to setup + + + + Resets the audio stream + Reset is a control method that the client calls to reset a stopped audio stream. + Resetting the stream flushes all pending data and resets the audio clock stream + position to 0. This method fails if it is called on a stream that is not stopped + + + + + Dispose + + + + + Audio Client Buffer Flags + + + + + None + + + + + AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY + + + + + AUDCLNT_BUFFERFLAGS_SILENT + + + + + AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR + + + + + The AudioClientProperties structure is used to set the parameters that describe the properties of the client's audio stream. + + http://msdn.microsoft.com/en-us/library/windows/desktop/hh968105(v=vs.85).aspx + + + + The size of the buffer for the audio stream. + + + + + Boolean value to indicate whether or not the audio stream is hardware-offloaded + + + + + An enumeration that is used to specify the category of the audio stream. + + + + + A bit-field describing the characteristics of the stream. Supported in Windows 8.1 and later. + + + + + AUDCLNT_SHAREMODE + + + + + AUDCLNT_SHAREMODE_SHARED, + + + + + AUDCLNT_SHAREMODE_EXCLUSIVE + + + + + AUDCLNT_STREAMFLAGS + + + + + None + + + + + AUDCLNT_STREAMFLAGS_CROSSPROCESS + + + + + AUDCLNT_STREAMFLAGS_LOOPBACK + + + + + AUDCLNT_STREAMFLAGS_EVENTCALLBACK + + + + + AUDCLNT_STREAMFLAGS_NOPERSIST + + + + + Defines values that describe the characteristics of an audio stream. + + + + + No stream options. + + + + + The audio stream is a 'raw' stream that bypasses all signal processing except for endpoint specific, always-on processing in the APO, driver, and hardware. + + + + + Audio Clock Client + + + + + Characteristics + + + + + Frequency + + + + + Get Position + + + + + Adjusted Position + + + + + Can Adjust Position + + + + + Dispose + + + + + Audio Endpoint Volume + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + On Volume Notification + + + + + Volume Range + + + + + Hardware Support + + + + + Step Information + + + + + Channels + + + + + Master Volume Level + + + + + Master Volume Level Scalar + + + + + Mute + + + + + Volume Step Up + + + + + Volume Step Down + + + + + Creates a new Audio endpoint volume + + IAudioEndpointVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Audio Endpoint Volume Channel + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + Volume Level + + + + + Volume Level Scalar + + + + + Audio Endpoint Volume Channels + + + + + Channel Count + + + + + Indexer - get a specific channel + + + + + Audio Endpoint Volume Notifiaction Delegate + + Audio Volume Notification Data + + + + Audio Endpoint Volume Step Information + + + + + Step + + + + + StepCount + + + + + Audio Endpoint Volume Volume Range + + + + + Minimum Decibels + + + + + Maximum Decibels + + + + + Increment Decibels + + + + + Audio Meter Information + + + + + Peak Values + + + + + Hardware Support + + + + + Master Peak Value + + + + + Audio Meter Information Channels + + + + + Metering Channel Count + + + + + Get Peak value + + Channel index + Peak value + + + + Audio Render Client + + + + + Gets a pointer to the buffer + + Number of frames requested + Pointer to the buffer + + + + Release buffer + + Number of frames written + Buffer flags + + + + Release the COM object + + + + + AudioSessionControl object for information + regarding an audio session + + + + + Constructor. + + + + + + Dispose + + + + + Finalizer + + + + + Audio meter information of the audio session. + + + + + Simple audio volume of the audio session (for volume and mute status). + + + + + The current state of the audio session. + + + + + The name of the audio session. + + + + + the path to the icon shown in the mixer. + + + + + The session identifier of the audio session. + + + + + The session instance identifier of the audio session. + + + + + The process identifier of the audio session. + + + + + Is the session a system sounds session. + + + + + the grouping param for an audio session grouping + + + + + + For chanigng the grouping param and supplying the context of said change + + + + + + + Registers an even client for callbacks + + + + + + Unregisters an event client from receiving callbacks + + + + + + AudioSessionEvents callback implementation + + + + + Constructor. + + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + AudioSessionManager + + Designed to manage audio sessions and in particuar the + SimpleAudioVolume interface to adjust a session volume + + + + + Session created delegate + + + + + Occurs when audio session has been added (for example run another program that use audio playback). + + + + + SimpleAudioVolume object + for adjusting the volume for the user session + + + + + AudioSessionControl object + for registring for callbacks and other session information + + + + + Refresh session of current device. + + + + + Returns list of sessions of current device. + + + + + Dispose. + + + + + Finalizer. + + + + + Specifies the category of an audio stream. + + + + + Other audio stream. + + + + + Media that will only stream when the app is in the foreground. + + + + + Media that can be streamed when the app is in the background. + + + + + Real-time communications, such as VOIP or chat. + + + + + Alert sounds. + + + + + Sound effects. + + + + + Game sound effects. + + + + + Background audio for games. + + + + + Manages the AudioStreamVolume for the . + + + + + Verify that the channel index is valid. + + + + + + + Return the current stream volumes for all channels + + An array of volume levels between 0.0 and 1.0 for each channel in the audio stream. + + + + Returns the current number of channels in this audio stream. + + + + + Return the current volume for the requested channel. + + The 0 based index into the channels. + The volume level for the channel between 0.0 and 1.0. + + + + Set the volume level for each channel of the audio stream. + + An array of volume levels (between 0.0 and 1.0) one for each channel. + + A volume level MUST be supplied for reach channel in the audio stream. + + + Thrown when does not contain elements. + + + + + Sets the volume level for one channel in the audio stream. + + The 0-based index into the channels to adjust the volume of. + The volume level between 0.0 and 1.0 for this channel of the audio stream. + + + + Dispose + + + + + Release/cleanup objects during Dispose/finalization. + + True if disposing and false if being finalized. + + + + Audio Volume Notification Data + + + + + Event Context + + + + + Muted + + + + + Guid that raised the event + + + + + Master Volume + + + + + Channels + + + + + Channel Volume + + + + + Audio Volume Notification Data + + + + + + + + + + Connector + + + + + Connects this connector to a connector in another device-topology object + + + + + Retreives the type of this connector + + + + + Retreives the data flow of this connector + + + + + Disconnects this connector from it's connected connector (if connected) + + + + + Indicates whether this connector is connected to another connector + + + + + Retreives the connector this connector is connected to (if connected) + + + + + Retreives the global ID of the connector this connector is connected to (if connected) + + + + + Retreives the device ID of the audio device this connector is connected to (if connected) + + + + + Connector Type + + + + + The connector is part of a connection of unknown type. + + + + + The connector is part of a physical connection to an auxiliary device that is installed inside the system chassis + + + + + The connector is part of a physical connection to an external device. + + + + + The connector is part of a software-configured I/O connection (typically a DMA channel) between system memory and an audio hardware device on an audio adapter. + + + + + The connector is part of a permanent connection that is fixed and cannot be configured under software control. + + + + + The connector is part of a connection to a network. + + + + + The EDataFlow enumeration defines constants that indicate the direction + in which audio data flows between an audio endpoint device and an application + + + + + Audio rendering stream. + Audio data flows from the application to the audio endpoint device, which renders the stream. + + + + + Audio capture stream. Audio data flows from the audio endpoint device that captures the stream, + to the application + + + + + Audio rendering or capture stream. Audio data can flow either from the application to the audio + endpoint device, or from the audio endpoint device to the application. + + + + + Device State + + + + + DEVICE_STATE_ACTIVE + + + + + DEVICE_STATE_DISABLED + + + + + DEVICE_STATE_NOTPRESENT + + + + + DEVICE_STATE_UNPLUGGED + + + + + DEVICE_STATEMASK_ALL + + + + + Windows CoreAudio DeviceTopology + + + + + Retrieves the number of connections associated with this device-topology object + + + + + Retrieves the connector at the supplied index + + + + + Retrieves the device id of the device represented by this device-topology object + + + + + Endpoint Hardware Support + + + + + Volume + + + + + Mute + + + + + Meter + + + + + Representation of binary large object container. + + + + + Length of binary object. + + + + + Pointer to buffer storing data. + + + + + is defined in WTypes.h + + + + + Audio Client WASAPI Error Codes (HResult) + + + + + AUDCLNT_E_NOT_INITIALIZED + + + + + AUDCLNT_E_UNSUPPORTED_FORMAT + + + + + AUDCLNT_E_DEVICE_IN_USE + + + + + AUDCLNT_E_RESOURCES_INVALIDATED + + + + + Windows CoreAudio IAudioClient interface + Defined in AudioClient.h + + + + + The GetBufferSize method retrieves the size (maximum capacity) of the endpoint buffer. + + + + + The GetService method accesses additional services from the audio client object. + + The interface ID for the requested service. + Pointer to a pointer variable into which the method writes the address of an instance of the requested interface. + + + + Defined in AudioClient.h + + + + + Defined in AudioClient.h + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier for the audio session. + + Receives the session identifier. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier of the audio session instance. + + Receives the identifier of a particular instance. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the process identifier of the audio session. + + Receives the process identifier of the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Indicates whether the session is a system sounds session. + + An HRESULT code indicating whether the operation succeeded of failed. + + + + Enables or disables the default stream attenuation experience (auto-ducking) provided by the system. + + A variable that enables or disables system auto-ducking. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Defines constants that indicate the current state of an audio session. + + + MSDN Reference: http://msdn.microsoft.com/en-us/library/dd370792.aspx + + + + + The audio session is inactive. + + + + + The audio session is active. + + + + + The audio session has expired. + + + + + Defines constants that indicate a reason for an audio session being disconnected. + + + MSDN Reference: Unknown + + + + + The user removed the audio endpoint device. + + + + + The Windows audio service has stopped. + + + + + The stream format changed for the device that the audio session is connected to. + + + + + The user logged off the WTS session that the audio session was running in. + + + + + The WTS session that the audio session was running in was disconnected. + + + + + The (shared-mode) audio session was disconnected to make the audio endpoint device available for an exclusive-mode connection. + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + interface to receive session related events + + + + + notification of volume changes including muting of audio session + + the current volume + the current mute state, true muted, false otherwise + + + + notification of display name changed + + the current display name + + + + notification of icon path changed + + the current icon path + + + + notification of the client that the volume level of an audio channel in the session submix has changed + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + + + + notification of the client that the grouping parameter for the session has changed + + >The new grouping parameter for the session. + + + + notification of the client that the stream-activity state of the session has changed + + The new session state. + + + + notification of the client that the session has been disconnected + + The reason that the audio session was disconnected. + + + + Windows CoreAudio IAudioSessionManager interface + Defined in AudioPolicy.h + + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionNotification interface + Defined in AudioPolicy.h + + + + + + + session being added + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IConnector interface + Defined in devicetopology.h + + + + + Windows CoreAudio IDeviceTopology interface + Defined in devicetopology.h + + + + + defined in MMDeviceAPI.h + + + + + IMMNotificationClient + + + + + Device State Changed + + + + + Device Added + + + + + Device Removed + + + + + Default Device Changed + + + + + Property Value Changed + + + + + + + Windows CoreAudio IPart interface + Defined in devicetopology.h + + + + + Windows CoreAudio IPartsList interface + Defined in devicetopology.h + + + + + is defined in propsys.h + + + + + Windows CoreAudio ISimpleAudioVolume interface + Defined in AudioClient.h + + + + + Sets the master volume level for the audio session. + + The new volume level expressed as a normalized value between 0.0 and 1.0. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the client volume level for the audio session. + + Receives the volume level expressed as a normalized value between 0.0 and 1.0. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Sets the muting state for the audio session. + + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the current muting state for the audio session. + + Receives the muting state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + implements IMMDeviceEnumerator + + + + + MMDevice STGM enumeration + + + + + Read-only access mode. + + + + + Write-only access mode. + + + + + Read-write access mode. + + + + + from Propidl.h. + http://msdn.microsoft.com/en-us/library/aa380072(VS.85).aspx + contains a union so we have to do an explicit layout + + + + + Value type tag. + + + + + Reserved1. + + + + + Reserved2. + + + + + Reserved3. + + + + + cVal. + + + + + bVal. + + + + + iVal. + + + + + uiVal. + + + + + lVal. + + + + + ulVal. + + + + + intVal. + + + + + uintVal. + + + + + hVal. + + + + + uhVal. + + + + + fltVal. + + + + + dblVal. + + + + + boolVal. + + + + + scode. + + + + + Date time. + + + + + Binary large object. + + + + + Pointer value. + + + + + Creates a new PropVariant containing a long value + + + + + Helper method to gets blob data + + + + + Interprets a blob as an array of structs + + + + + Gets the type of data in this PropVariant + + + + + Property value + + + + + allows freeing up memory, might turn this into a Dispose method? + + + + + Clears with a known pointer + + + + + MM Device + + + + + Initializes the device's property store. + + The storage-access mode to open store for. + Administrative client is required for Write and ReadWrite modes. + + + + Audio Client + Makes a new one each call to allow caller to manage when to dispose + n.b. should probably not be a property anymore + + + + + Audio Meter Information + + + + + Audio Endpoint Volume + + + + + AudioSessionManager instance + + + + + DeviceTopology instance + + + + + Properties + + + + + Friendly name for the endpoint + + + + + Friendly name of device + + + + + Icon path of device + + + + + Device Instance Id of Device + + + + + Device ID + + + + + Data Flow + + + + + Device State + + + + + To string + + + + + Dispose + + + + + Finalizer + + + + + Multimedia Device Collection + + + + + Device count + + + + + Get device by index + + Device index + Device at the specified index + + + + Get Enumerator + + Device enumerator + + + + MM Device Enumerator + + + + + Creates a new MM Device Enumerator + + + + + Enumerate Audio Endpoints + + Desired DataFlow + State Mask + Device Collection + + + + Get Default Endpoint + + Data Flow + Role + Device + + + + Check to see if a default audio end point exists without needing an exception. + + Data Flow + Role + True if one exists, and false if one does not exist. + + + + Get device by ID + + Device ID + Device + + + + Registers a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + Unregisters a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + + + + Called to dispose/finalize contained objects. + + True if disposing, false if called from a finalizer. + + + + PROPERTYKEY is defined in wtypes.h + + + + + Format ID + + + + + Property ID + + + + + + + + + + + Property Keys + + + + + PKEY_DeviceInterface_FriendlyName + + + + + PKEY_AudioEndpoint_FormFactor + + + + + PKEY_AudioEndpoint_ControlPanelPageProvider + + + + + PKEY_AudioEndpoint_Association + + + + + PKEY_AudioEndpoint_PhysicalSpeakers + + + + + PKEY_AudioEndpoint_GUID + + + + + PKEY_AudioEndpoint_Disable_SysFx + + + + + PKEY_AudioEndpoint_FullRangeSpeakers + + + + + PKEY_AudioEndpoint_Supports_EventDriven_Mode + + + + + PKEY_AudioEndpoint_JackSubType + + + + + PKEY_AudioEngine_DeviceFormat + + + + + PKEY_AudioEngine_OEMFormat + + + + + PKEY _Devie_FriendlyName + + + + + PKEY _Device_IconPath + + + + + Device description property. + + + + + Id of controller device for endpoint device property. + + + + + Device interface key property. + + + + + System-supplied device instance identification string, assigned by PnP manager, persistent across system restarts. + + + + + Property Store class, only supports reading properties at the moment. + + + + + Property Count + + + + + Gets property by index + + Property index + The property + + + + Contains property guid + + Looks for a specific key + True if found + + + + Indexer by guid + + Property Key + Property or null if not found + + + + Gets property key at sepecified index + + Index + Property key + + + + Gets property value at specified index + + Index + Property value + + + + Sets property value at specified key. + + Key of property to set. + Value to write. + + + + Saves a property change. + + + + + Creates a new property store + + IPropertyStore COM interface + + + + Property Store Property + + + + + Property Key + + + + + Property Value + + + + + The ERole enumeration defines constants that indicate the role + that the system has assigned to an audio endpoint device + + + + + Games, system notification sounds, and voice commands. + + + + + Music, movies, narration, and live music recording + + + + + Voice communications (talking to another person). + + + + + Collection of sessions. + + + + + Returns session at index. + + + + + + + Number of current sessions. + + + + + Windows CoreAudio SimpleAudioVolume + + + + + Creates a new Audio endpoint volume + + ISimpleAudioVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Allows the user to adjust the volume from + 0.0 to 1.0 + + + + + Mute + + + + + Represents state of a capture device + + + + + Not recording + + + + + Beginning to record + + + + + Recording in progress + + + + + Requesting stop + + + + + Audio Capture using Wasapi + See http://msdn.microsoft.com/en-us/library/dd370800%28VS.85%29.aspx + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Initializes a new instance of the class. + + The capture device. + true if sync is done with event. false use sleep. + + + + Initializes a new instance of the class. + + The capture device. + true if sync is done with event. false use sleep. + Length of the audio buffer in milliseconds. A lower value means lower latency but increased CPU usage. + + + + Share Mode - set before calling StartRecording + + + + + Current Capturing State + + + + + Capturing wave format + + + + + Gets the default audio capture device + + The default audio capture device + + + + To allow overrides to specify different flags (e.g. loopback) + + + + + Start Capturing + + + + + Stop Capturing (requests a stop, wait for RecordingStopped event to know it has finished) + + + + + Dispose + + + + + Contains the name and CLSID of a DirectX Media Object + + + + + Name + + + + + CLSID + + + + + Initializes a new instance of DmoDescriptor + + + + + DirectX Media Object Enumerator + + + + + Get audio effect names + + Audio effect names + + + + Get audio encoder names + + Audio encoder names + + + + Get audio decoder names + + Audio decoder names + + + + DMO Guids for use with DMOEnum + dmoreg.h + + + + + MediaErr.h + + + + + DMO Inplace Process Flags + + + + + DMO_INPLACE_NORMAL + + + + + DMO_INPLACE_ZERO + + + + + Return value when Process is executed with IMediaObjectInPlace + + + + + Success. There is no remaining data to process. + + + + + Success. There is still data to process. + + + + + DMO Input Data Buffer Flags + + + + + None + + + + + DMO_INPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_INPUT_DATA_BUFFERF_TIME + + + + + DMO_INPUT_DATA_BUFFERF_TIMELENGTH + + + + + http://msdn.microsoft.com/en-us/library/aa929922.aspx + DMO_MEDIA_TYPE + + + + + Major type + + + + + Major type name + + + + + Subtype + + + + + Subtype name + + + + + Fixed size samples + + + + + Sample size + + + + + Format type + + + + + Format type name + + + + + Gets the structure as a Wave format (if it is one) + + + + + Sets this object up to point to a wave format + + Wave format structure + + + + DMO Output Data Buffer + + + + + Creates a new DMO Output Data Buffer structure + + Maximum buffer size + + + + Dispose + + + + + Media Buffer + + + + + Length of data in buffer + + + + + Status Flags + + + + + Timestamp + + + + + Duration + + + + + Retrives the data in this buffer + + Buffer to receive data + Offset into buffer + + + + Is more data available + If true, ProcessOuput should be called again + + + + + DMO Output Data Buffer Flags + + + + + None + + + + + DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_OUTPUT_DATA_BUFFERF_TIME + + + + + DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH + + + + + DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE + + + + + DMO_PARTIAL_MEDIATYPE + + + + + DMO Process Output Flags + + + + + None + + + + + DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER + + + + + Chorus Phase + + + + + DSFXCHORUS_PHASE_NEG_180 + + + + + DSFXCHORUS_PHASE_NEG_90 + + + + + DSFXCHORUS_PHASE_ZERO + + + + + DSFXCHORUS_PHASE_90 + + + + + DSFXCHORUS_PHASE_180 + + + + + Chorus Wave Form + + + + + DSFXCHORUS_WAVE_TRIANGLE + + + + + DSFXCHORUS_WAVE_SIN + + + + + DMO Chorus Effect + + + + + DMO Chorus Params + + + + + DSFXCHORUS_WETDRYMIX_MIN + + + + + DSFXCHORUS_WETDRYMIX_MAX + + + + + DSFXCHORUS_WETDRYMIX_DEFAULT + + + + + DSFXCHORUS_DEPTH_MIN + + + + + DSFXCHORUS_DEPTH_MAX + + + + + DSFXCHORUS_DEPTH_DEFAULT + + + + + DSFXCHORUS_FEEDBACK_MIN + + + + + DSFXCHORUS_FEEDBACK_MAX + + + + + DSFXCHORUS_FEEDBACK_DEFAULT + + + + + DSFXCHORUS_FREQUENCY_MIN + + + + + DSFXCHORUS_FREQUENCY_MAX + + + + + DSFXCHORUS_FREQUENCY_DEFAULT + + + + + DSFXCHORUS_WAVE_DEFAULT + + + + + DSFXCHORUS_DELAY_MIN + + + + + DSFXCHORUS_DELAY_MAX + + + + + DSFXCHORUS_DELAY_DEFAULT + + + + + DSFXCHORUS_PHASE_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage by which the delay time is modulated by the low-frequency oscillator, + in hundredths of a percentage point. + + + + + Percentage of output signal to feed back into the effect's input. + + + + + Frequency of the LFO. + + + + + Waveform shape of the LFO. + + + + + Number of milliseconds the input is delayed before it is played back. + + + + + Phase differential between left and right LFOs. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Chorus + + + + + Dispose code + + + + + DMO Compressor Effect + + + + + DMO Compressor Params + + + + + DSFXCOMPRESSOR_GAIN_MIN + + + + + DSFXCOMPRESSOR_GAIN_MAX + + + + + DSFXCOMPRESSOR_GAIN_DEFAULT + + + + + DSFXCOMPRESSOR_ATTACK_MIN + + + + + DSFXCOMPRESSOR_ATTACK_MAX + + + + + DSFXCOMPRESSOR_ATTACK_DEFAULT + + + + + DSFXCOMPRESSOR_RELEASE_MIN + + + + + DSFXCOMPRESSOR_RELEASE_MAX + + + + + DSFXCOMPRESSOR_RELEASE_DEFAULT + + + + + DSFXCOMPRESSOR_THRESHOLD_MIN + + + + + DSFXCOMPRESSOR_THRESHOLD_MAX + + + + + DSFXCOMPRESSOR_THRESHOLD_DEFAULT + + + + + DSFXCOMPRESSOR_RATIO_MIN + + + + + DSFXCOMPRESSOR_RATIO_MAX + + + + + DSFXCOMPRESSOR_RATIO_DEFAULT + + + + + DSFXCOMPRESSOR_PREDELAY_MIN + + + + + DSFXCOMPRESSOR_PREDELAY_MAX + + + + + DSFXCOMPRESSOR_PREDELAY_DEFAULT + + + + + Output gain of signal after compression. + + + + + Time before compression reaches its full value. + + + + + Speed at which compression is stopped after input drops below Threshold. + + + + + Point at which compression begins, in decibels. + + + + + Compression ratio + + + + + Time after Threshold is reached before attack phase is started, in milliseconds. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Compressor + + + + + Dispose code + + + + + DMO Distortion Effect + + + + + DMO Distortion Params + + + + + DSFXDISTORTION_GAIN_MIN + + + + + DSFXDISTORTION_GAIN_MAX + + + + + DSFXDISTORTION_GAIN_DEFAULT + + + + + DSFXDISTORTION_EDGE_MIN + + + + + DSFXDISTORTION_EDGE_MAX + + + + + DSFXDISTORTION_EDGE_DEFAULT + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX + + + + + DSFXDISTORTION_POSTEQCENTERFREQUENCY_DEFAULT + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_MIN + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_MAX + + + + + DSFXDISTORTION_POSTEQBANDWIDTH_DEFAULT + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_MIN + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_MAX + + + + + DSFXDISTORTION_PRELOWPASSCUTOFF_DEFAULT + + + + + Amount of signal change after distortion. + + + + + Percentage of distortion intensity. + + + + + Center frequency of harmonic content addition. + + + + + Width of frequency band that determines range of harmonic content addition. + + + + + Filter cutoff for high-frequency harmonics attenuation. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Distortion + + + + + Dispose code + + + + + Dmo Echo Effect + + + + + DMO Echo Params + + + + + DSFXECHO_WETDRYMIX_MIN + + + + + DSFXECHO_WETDRYMIX_MAX + + + + + DSFXECHO_WETDRYMIX_DEFAULT + + + + + DSFXECHO_FEEDBACK_MIN + + + + + DSFXECHO_FEEDBACK_MAX + + + + + DSFXECHO_FEEDBACK_DEFAULT + + + + + DSFXECHO_LEFTDELAY_MIN + + + + + DSFXECHO_LEFTDELAY_MAX + + + + + DSFXECHO_LEFTDELAY_DEFAULT + + + + + DSFXECHO_RIGHTDELAY_MIN + + + + + DSFXECHO_RIGHTDELAY_MAX + + + + + DSFXECHO_RIGHTDELAY_DEFAULT + + + + + DSFXECHO_PANDELAY_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage of output fed back into input. + + + + + Delay for left channel, in milliseconds. + + + + + Delay for right channel, in milliseconds. + + + + + Value that specifies whether to swap left and right delays with each successive echo. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Echo + + + + + Dispose code + + + + + DMO Flanger Effect + + + + + DMO Flanger Params + + + + + DSFXFLANGER_WETDRYMIX_MIN + + + + + DSFXFLANGER_WETDRYMIX_MAX + + + + + DSFXFLANGER_WETDRYMIX_DEFAULT + + + + + DSFXFLANGER_DEPTH_MIN + + + + + DSFXFLANGER_DEPTH_MAX + + + + + DSFXFLANGER_DEPTH_DEFAULT + + + + + DSFXFLANGER_FEEDBACK_MIN + + + + + DSFXFLANGER_FEEDBACK_MAX + + + + + DSFXFLANGER_FEEDBACK_DEFAULT + + + + + DSFXFLANGER_FREQUENCY_MIN + + + + + DSFXFLANGER_FREQUENCY_MAX + + + + + DSFXFLANGER_FREQUENCY_DEFAULT + + + + + DSFXFLANGER_WAVE_DEFAULT + + + + + DSFXFLANGER_DELAY_MIN + + + + + DSFXFLANGER_DELAY_MAX + + + + + DSFXFLANGER_DELAY_DEFAULT + + + + + DSFXFLANGER_PHASE_DEFAULT + + + + + Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + + Percentage by which the delay time is modulated by the low-frequency oscillator, + in hundredths of a percentage point. + + + + + Percentage of output signal to feed back into the effect's input. + + + + + Frequency of the LFO. + + + + + Waveform shape of the LFO. + + + + + Number of milliseconds the input is delayed before it is played back. + + + + + Phase differential between left and right LFOs. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Flanger + + + + + Dispose code + + + + + DMO Gargle Effect + + + + + DMO Gargle Params + + + + + DSFXGARGLE_RATEHZ_MIN + + + + + DSFXGARGLE_RATEHZ_MAX + + + + + DSFXGARGLE_RATEHZ_DEFAULT + + + + + DSFXGARGLE_WAVE_DEFAULT + + + + + Rate of modulation in hz + + + + + Gargle Wave Shape + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO Gargle + + + + + Dispose code + + + + + DMO I3DL2Reverb Effect + + + + + DMO I3DL2Reverb Params + + + + + DSFX_I3DL2REVERB_ROOM_MIN + + + + + DSFX_I3DL2REVERB_ROOM_MAX + + + + + DSFX_I3DL2REVERB_ROOM_DEFAULT + + + + + DSFX_I3DL2REVERB_ROOMHF_MIN + + + + + DSFX_I3DL2REVERB_ROOMHF_MAX + + + + + DSFX_I3DL2REVERB_ROOMHF_DEFAULT + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX + + + + + DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT + + + + + DSFX_I3DL2REVERB_DECAYTIME_MIN + + + + + DSFX_I3DL2REVERB_DECAYTIME_MAX + + + + + DSFX_I3DL2REVERB_DECAYTIME_DEFAULT + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_MIN + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_MAX + + + + + DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT + + + + + DSFX_I3DL2REVERB_REFLECTIONS_MIN + + + + + DSFX_I3DL2REVERB_REFLECTIONS_MAX + + + + + DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX + + + + + DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT + + + + + DSFX_I3DL2REVERB_REVERB_MIN + + + + + DSFX_I3DL2REVERB_REVERB_MAX + + + + + DSFX_I3DL2REVERB_REVERB_DEFAULT + + + + + DSFX_I3DL2REVERB_REVERBDELAY_MIN + + + + + DSFX_I3DL2REVERB_REVERBDELAY_MAX + + + + + DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT + + + + + DSFX_I3DL2REVERB_DIFFUSION_MIN + + + + + DSFX_I3DL2REVERB_DIFFUSION_MAX + + + + + DSFX_I3DL2REVERB_DIFFUSION_DEFAULT + + + + + DSFX_I3DL2REVERB_DENSITY_MIN + + + + + DSFX_I3DL2REVERB_DENSITY_MAX + + + + + DSFX_I3DL2REVERB_DENSITY_DEFAULT + + + + + DSFX_I3DL2REVERB_HFREFERENCE_MIN + + + + + DSFX_I3DL2REVERB_HFREFERENCE_MAX + + + + + DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT + + + + + DSFX_I3DL2REVERB_QUALITY_MIN + + + + + DSFX_I3DL2REVERB_QUALITY_MAX + + + + + DSFX_I3DL2REVERB_QUALITY_DEFAULT + + + + + Attenuation of the room effect, in millibels (mB) + + + + + Attenuation of the room high-frequency effect, in mB. + + + + + Rolloff factor for the reflected signals. + + + + + Decay time, in seconds. + + + + + Ratio of the decay time at high frequencies to the decay time at low frequencies. + + + + + Attenuation of early reflections relative to lRoom, in mB. + + + + + Delay time of the first reflection relative to the direct path, in seconds. + + + + + Attenuation of late reverberation relative to lRoom, in mB. + + + + + Time limit between the early reflections and the late reverberation relative to the time of the first reflection. + + + + + Echo density in the late reverberation decay, in percent. + + + + + Modal density in the late reverberation decay, in percent. + + + + + Reference high frequency, in hertz. + + + + + the quality of the environmental reverberation effect. Higher values produce better quality at the expense of processing time. + + + + + Sets standard reverberation parameters of a buffer. + + I3DL2EnvironmentPreset + + + + retrieves an identifier for standard reverberation parameters of a buffer. + + I3DL2EnvironmentPreset + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO I3DL2Reverb + + + + + Dispose code + + + + + DMO Parametric Equalizer Effect + + + + + DMO ParamEq Params + + + + + DSFXPARAMEQ_CENTER_MIN + + + + + DSFXPARAMEQ_CENTER_MAX + + + + + DSFXPARAMEQ_CENTER_DEFAULT + + + + + DSFXPARAMEQ_BANDWIDTH_MIN + + + + + DSFXPARAMEQ_BANDWIDTH_MAX + + + + + DSFXPARAMEQ_BANDWIDTH_DEFAULT + + + + + DSFXPARAMEQ_GAIN_MIN + + + + + DSFXPARAMEQ_GAIN_MAX + + + + + DSFXPARAMEQ_GAIN_DEFAULT + + + + + Center frequency, in hertz + + + + + Bandwidth, in semitones. + + + + + Gain + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO ParamEq + + + + + Dispose code + + + + + DMO Reverb Effect + + + + + DMO Reverb Params + + + + + DSFX_WAVESREVERB_INGAIN_MIN + + + + + DSFX_WAVESREVERB_INGAIN_MAX + + + + + DSFX_WAVESREVERB_INGAIN_DEFAULT + + + + + DSFX_WAVESREVERB_REVERBMIX_MIN + + + + + DSFX_WAVESREVERB_REVERBMIX_MAX + + + + + DSFX_WAVESREVERB_REVERBMIX_DEFAULT + + + + + DSFX_WAVESREVERB_REVERBTIME_MIN + + + + + DSFX_WAVESREVERB_REVERBTIME_MAX + + + + + DSFX_WAVESREVERB_REVERBTIME_DEFAULT + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX + + + + + DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT + + + + + Input gain of signal, in decibels (dB). + + + + + Reverb mix, in dB. + + + + + Reverb time, in milliseconds. + + + + + High-frequency reverb time ratio. + + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + Create new DMO WavesReverb + + + + + Dispose code + + + + + DSFXECHO_PANDELAY + + + + + DSFXECHO_PANDELAY_MIN + + + + + DSFXECHO_PANDELAY_MAX + + + + + Flanger Phase + + + + + DSFXFLANGER_PHASE_NEG_180 + + + + + DSFXFLANGER_PHASE_NEG_90 + + + + + DSFXFLANGER_PHASE_ZERO + + + + + DSFXFLANGER_PHASE_90 + + + + + DSFXFLANGER_PHASE_180 + + + + + Flanger Wave Form + + + + + DSFXFLANGER_WAVE_TRIANGLE + + + + + DSFXFLANGER_WAVE_SIN + + + + + Gargle Wave Shape + + + + + DSFXGARGLE_WAVE_TRIANGLE + + + + + DSFXGARGLE_WAVE_SQUARE + + + + + I3DL2 Reverberation Presets + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_CITY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL + + + + + DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE + + + + + Interface of DMO Effectors + + Parameters of the effect to be used + + + + Media Object + + + + + Media Object InPlace + + + + + Effect Parameter + + + + + IMediaBuffer Interface + + + + + Set Length + + Length + HRESULT + + + + Get Max Length + + Max Length + HRESULT + + + + Get Buffer and Length + + Pointer to variable into which to write the Buffer Pointer + Pointer to variable into which to write the Valid Data Length + HRESULT + + + + defined in mediaobj.h + + + + + defined in mediaobj.h + + + + + defined in Medparam.h + + + + + Windows Media Resampler Props + wmcodecdsp.h + + + + + Range is 1 to 60 + + + + + Specifies the channel matrix. + + + + + Attempting to implement the COM IMediaBuffer interface as a .NET object + Not sure what will happen when I pass this to an unmanaged object + + + + + Creates a new Media Buffer + + Maximum length in bytes + + + + Dispose and free memory for buffer + + + + + Finalizer + + + + + Set length of valid data in the buffer + + length + HRESULT + + + + Gets the maximum length of the buffer + + Max length (output parameter) + HRESULT + + + + Gets buffer and / or length + + Pointer to variable into which buffer pointer should be written + Pointer to variable into which valid data length should be written + HRESULT + + + + Length of data in the media buffer + + + + + Loads data into this buffer + + Data to load + Number of bytes to load + + + + Retrieves the data in the output buffer + + buffer to retrieve into + offset within that buffer + + + + Media Object + + + + + Creates a new Media Object + + Media Object COM interface + + + + Number of input streams + + + + + Number of output streams + + + + + Gets the input media type for the specified input stream + + Input stream index + Input type index + DMO Media Type or null if there are no more input types + + + + Gets the DMO Media Output type + + The output stream + Output type index + DMO Media Type or null if no more available + + + + retrieves the media type that was set for an output stream, if any + + Output stream index + DMO Media Type or null if no more available + + + + Enumerates the supported input types + + Input stream index + Enumeration of input types + + + + Enumerates the output types + + Output stream index + Enumeration of supported output types + + + + Querys whether a specified input type is supported + + Input stream index + Media type to check + true if supports + + + + Sets the input type helper method + + Input stream index + Media type + Flags (can be used to test rather than set) + + + + Sets the input type + + Input stream index + Media Type + + + + Sets the input type to the specified Wave format + + Input stream index + Wave format + + + + Requests whether the specified Wave format is supported as an input + + Input stream index + Wave format + true if supported + + + + Helper function to make a DMO Media Type to represent a particular WaveFormat + + + + + Checks if a specified output type is supported + n.b. you may need to set the input type first + + Output stream index + Media type + True if supported + + + + Tests if the specified Wave Format is supported for output + n.b. may need to set the input type first + + Output stream index + Wave format + True if supported + + + + Helper method to call SetOutputType + + + + + Sets the output type + n.b. may need to set the input type first + + Output stream index + Media type to set + + + + Set output type to the specified wave format + n.b. may need to set input type first + + Output stream index + Wave format + + + + Get Input Size Info + + Input Stream Index + Input Size Info + + + + Get Output Size Info + + Output Stream Index + Output Size Info + + + + Process Input + + Input Stream index + Media Buffer + Flags + Timestamp + Duration + + + + Process Output + + Flags + Output buffer count + Output buffers + + + + Gives the DMO a chance to allocate any resources needed for streaming + + + + + Tells the DMO to free any resources needed for streaming + + + + + Gets maximum input latency + + input stream index + Maximum input latency as a ref-time + + + + Flushes all buffered data + + + + + Report a discontinuity on the specified input stream + + Input Stream index + + + + Is this input stream accepting data? + + Input Stream index + true if accepting data + + + + Experimental code, not currently being called + Not sure if it is necessary anyway + + + + + Media Object InPlace + + + + + Creates a new Media Object InPlace + + Media Object InPlace COM Interface + + + + Processes a block of data. + The application supplies a pointer to a block of input data. The DMO processes the data in place. + + Size of the data, in bytes. + offset into buffer + In/Out Data Buffer + Start time of the data. + DmoInplaceProcessFlags + Return value when Process is executed with IMediaObjectInPlace + + + + Creates a copy of the DMO in its current state. + + Copyed MediaObjectInPlace + + + + Retrieves the latency introduced by this DMO. + + The latency, in 100-nanosecond units + + + + Get Media Object + + Media Object + + + + Dispose code + + + + + Media Object Size Info + + + + + Minimum Buffer Size, in bytes + + + + + Max Lookahead + + + + + Alignment + + + + + Media Object Size Info + + + + + ToString + + + + + MP_PARAMINFO + + + + + MP_TYPE + + + + + MPT_INT + + + + + MPT_FLOAT + + + + + MPT_BOOL + + + + + MPT_ENUM + + + + + MPT_MAX + + + + + MP_CURVE_TYPE + + + + + uuids.h, ksuuids.h + + + + + From wmcodecsdp.h + Implements: + - IMediaObject + - IMFTransform (Media foundation - we will leave this for now as there is loads of MF stuff) + - IPropertyStore + - IWMResamplerProps + Can resample PCM or IEEE + + + + + DMO Resampler + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + implements IMediaObject (DirectX Media Object) + implements IMFTransform (Media Foundation Transform) + On Windows XP, it is always an MM (if present at all) + + + + + Windows Media MP3 Decoder (as a DMO) + WORK IN PROGRESS - DO NOT USE! + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + BiQuad filter + + + + + Passes a single sample through the filter + + Input sample + Output sample + + + + Set this up as a low pass filter + + Sample Rate + Cut-off Frequency + Bandwidth + + + + Set this up as a peaking EQ + + Sample Rate + Centre Frequency + Bandwidth (Q) + Gain in decibels + + + + Set this as a high pass filter + + + + + Create a low pass filter + + + + + Create a High pass filter + + + + + Create a bandpass filter with constant skirt gain + + + + + Create a bandpass filter with constant peak gain + + + + + Creates a notch filter + + + + + Creaes an all pass filter + + + + + Create a Peaking EQ + + + + + H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) + + + + a "shelf slope" parameter (for shelving EQ only). + When S = 1, the shelf slope is as steep as it can be and remain monotonically + increasing or decreasing gain with frequency. The shelf slope, in dB/octave, + remains proportional to S for all other values for a fixed f0/Fs and dBgain. + Gain in decibels + + + + H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) + + + + + + + + + + Type to represent complex number + + + + + Real Part + + + + + Imaginary Part + + + + + Envelope generator (ADSR) + + + + + Envelope State + + + + + Idle + + + + + Attack + + + + + Decay + + + + + Sustain + + + + + Release + + + + + Creates and Initializes an Envelope Generator + + + + + Attack Rate (seconds * SamplesPerSecond) + + + + + Decay Rate (seconds * SamplesPerSecond) + + + + + Release Rate (seconds * SamplesPerSecond) + + + + + Sustain Level (1 = 100%) + + + + + Sets the attack curve + + + + + Sets the decay release curve + + + + + Read the next volume multiplier from the envelope generator + + A volume multiplier + + + + Trigger the gate + + If true, enter attack phase, if false enter release phase (unless already idle) + + + + Current envelope state + + + + + Reset to idle state + + + + + Get the current output level + + + + + Summary description for FastFourierTransform. + + + + + This computes an in-place complex-to-complex FFT + x and y are the real and imaginary arrays of 2^m points. + + + + + Applies a Hamming Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hamming window + + + + Applies a Hann Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hann window + + + + Applies a Blackman-Harris Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Blackmann-Harris window + + + + Summary description for ImpulseResponseConvolution. + + + + + A very simple mono convolution algorithm + + + This will be very slow + + + + + This is actually a downwards normalize for data that will clip + + + + + SMB Pitch Shifter + + + + + Pitch Shift + + + + + Pitch Shift + + + + + Short Time Fourier Transform + + + + + Fully managed resampler, based on Cockos WDL Resampler + + + + + Creates a new Resampler + + + + + sets the mode + if sinc set, it overrides interp or filtercnt + + + + + Sets the filter parameters + used for filtercnt>0 but not sinc + + + + + Set feed mode + + if true, that means the first parameter to ResamplePrepare will specify however much input you have, not how much you want + + + + Reset + + + + + Prepare + note that it is safe to call ResamplePrepare without calling ResampleOut (the next call of ResamplePrepare will function as normal) + nb inbuffer was WDL_ResampleSample **, returning a place to put the in buffer, so we return a buffer and offset + + req_samples is output samples desired if !wantInputDriven, or if wantInputDriven is input samples that we have + + + + returns number of samples desired (put these into *inbuffer) + + + + Channel Mode + + + + + Stereo + + + + + Joint Stereo + + + + + Dual Channel + + + + + Mono + + + + + An ID3v2 Tag + + + + + Reads an ID3v2 tag from a stream + + + + + Creates a new ID3v2 tag from a collection of key-value pairs. + + A collection of key-value pairs containing the tags to include in the ID3v2 tag. + A new ID3v2 tag + + + + Convert the frame size to a byte array. + + The frame body size. + + + + + Creates an ID3v2 frame for the given key-value pair. + + + + + + + + Gets the Id3v2 Header size. The size is encoded so that only 7 bits per byte are actually used. + + + + + + + Creates the Id3v2 tag header and returns is as a byte array. + + The Id3v2 frames that will be included in the file. This is used to calculate the ID3v2 tag size. + + + + + Creates the Id3v2 tag for the given key-value pairs and returns it in the a stream. + + + + + + + Raw data from this tag + + + + + Interface for MP3 frame by frame decoder + + + + + Decompress a single MP3 frame + + Frame to decompress + Output buffer + Offset within output buffer + Bytes written to output buffer + + + + Tell the decoder that we have repositioned + + + + + PCM format that we are converting into + + + + + Represents an MP3 Frame + + + + + Reads an MP3 frame from a stream + + input stream + A valid MP3 frame, or null if none found + + + Reads an MP3Frame from a stream + http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm has some good info + also see http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx + + A valid MP3 frame, or null if none found + + + + Constructs an MP3 frame + + + + + checks if the four bytes represent a valid header, + if they are, will parse the values into Mp3Frame + + + + + Sample rate of this frame + + + + + Frame length in bytes + + + + + Bit Rate + + + + + Raw frame data (includes header bytes) + + + + + MPEG Version + + + + + MPEG Layer + + + + + Channel Mode + + + + + The number of samples in this frame + + + + + The channel extension bits + + + + + The bitrate index (directly from the header) + + + + + Whether the Copyright bit is set + + + + + Whether a CRC is present + + + + + Not part of the MP3 frame itself - indicates where in the stream we found this header + + + + + MP3 Frame Decompressor using ACM + + + + + Creates a new ACM frame decompressor + + The MP3 source format + + + + Output format (PCM) + + + + + Decompresses a frame + + The MP3 frame + destination buffer + Offset within destination buffer + Bytes written into destination buffer + + + + Resets the MP3 Frame Decompressor after a reposition operation + + + + + Disposes of this MP3 frame decompressor + + + + + Finalizer ensuring that resources get released properly + + + + + MPEG Layer flags + + + + + Reserved + + + + + Layer 3 + + + + + Layer 2 + + + + + Layer 1 + + + + + MPEG Version Flags + + + + + Version 2.5 + + + + + Reserved + + + + + Version 2 + + + + + Version 1 + + + + + Represents a Xing VBR header + + + + + Load Xing Header + + Frame + Xing Header + + + + Sees if a frame contains a Xing header + + + + + Number of frames + + + + + Number of bytes + + + + + VBR Scale property + + + + + The MP3 frame + + + + + ASIO 64 bit value + Unfortunately the ASIO API was implemented it before compiler supported consistently 64 bit + integer types. By using the structure the data layout on a little-endian system like the + Intel x86 architecture will result in a "non native" storage of the 64 bit data. The most + significant 32 bit are stored first in memory, the least significant bits are stored in the + higher memory space. However each 32 bit is stored in the native little-endian fashion + + + + + most significant bits (Bits 32..63) + + + + + least significant bits (Bits 0..31) + + + + + ASIO Callbacks + + + + + ASIO Buffer Switch Callback + + + + + ASIO Sample Rate Did Change Callback + + + + + ASIO Message Callback + + + + + ASIO Buffer Switch Time Info Callback + + + + + Buffer switch callback + void (*bufferSwitch) (long doubleBufferIndex, AsioBool directProcess); + + + + + Sample Rate Changed callback + void (*sampleRateDidChange) (AsioSampleRate sRate); + + + + + ASIO Message callback + long (*asioMessage) (long selector, long value, void* message, double* opt); + + + + + ASIO Buffer Switch Time Info Callback + AsioTime* (*bufferSwitchTimeInfo) (AsioTime* params, long doubleBufferIndex, AsioBool directProcess); + + + + + ASIO Channel Info + + + + + on input, channel index + + + + + Is Input + + + + + Is Active + + + + + Channel Info + + + + + ASIO Sample Type + + + + + Name + + + + + Main AsioDriver Class. To use this class, you need to query first the GetAsioDriverNames() and + then use the GetAsioDriverByName to instantiate the correct AsioDriver. + This is the first AsioDriver binding fully implemented in C#! + + Contributor: Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Gets the ASIO driver names installed. + + a list of driver names. Use this name to GetAsioDriverByName + + + + Instantiate a AsioDriver given its name. + + The name of the driver + an AsioDriver instance + + + + Instantiate the ASIO driver by GUID. + + The GUID. + an AsioDriver instance + + + + Inits the AsioDriver.. + + The sys handle. + + + + + Gets the name of the driver. + + + + + + Gets the driver version. + + + + + + Gets the error message. + + + + + + Starts this instance. + + + + + Stops this instance. + + + + + Gets the number of channels. + + The num input channels. + The num output channels. + + + + Gets the latencies (n.b. does not throw an exception) + + The input latency. + The output latency. + + + + Gets the size of the buffer. + + Size of the min. + Size of the max. + Size of the preferred. + The granularity. + + + + Determines whether this instance can use the specified sample rate. + + The sample rate. + + true if this instance [can sample rate] the specified sample rate; otherwise, false. + + + + + Gets the sample rate. + + + + + + Sets the sample rate. + + The sample rate. + + + + Gets the clock sources. + + The clocks. + The num sources. + + + + Sets the clock source. + + The reference. + + + + Gets the sample position. + + The sample pos. + The time stamp. + + + + Gets the channel info. + + The channel number. + if set to true [true for input info]. + Channel Info + + + + Creates the buffers. + + The buffer infos. + The num channels. + Size of the buffer. + The callbacks. + + + + Disposes the buffers. + + + + + Controls the panel. + + + + + Futures the specified selector. + + The selector. + The opt. + + + + Notifies OutputReady to the AsioDriver. + + + + + + Releases this instance. + + + + + Handles the exception. Throws an exception based on the error. + + The error to check. + Method name + + + + Inits the vTable method from GUID. This is a tricky part of this class. + + The ASIO GUID. + + + + Internal VTable structure to store all the delegates to the C++ COM method. + + + + + ASIODriverCapability holds all the information from the AsioDriver. + Use ASIODriverExt to get the Capabilities + + + + + Drive Name + + + + + Number of Input Channels + + + + + Number of Output Channels + + + + + Input Latency + + + + + Output Latency + + + + + Buffer Minimum Size + + + + + Buffer Maximum Size + + + + + Buffer Preferred Size + + + + + Buffer Granularity + + + + + Sample Rate + + + + + Input Channel Info + + + + + Output Channel Info + + + + + Callback used by the AsioDriverExt to get wave data + + + + + AsioDriverExt is a simplified version of the AsioDriver. It provides an easier + way to access the capabilities of the Driver and implement the callbacks necessary + for feeding the driver. + Implementation inspired from Rob Philpot's with a managed C++ ASIO wrapper BlueWave.Interop.Asio + http://www.codeproject.com/KB/mcpp/Asio.Net.aspx + + Contributor: Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Initializes a new instance of the class based on an already + instantiated AsioDriver instance. + + A AsioDriver already instantiated. + + + + Allows adjustment of which is the first output channel we write to + + Output Channel offset + Input Channel offset + + + + Gets the driver used. + + The ASIOdriver. + + + + Starts playing the buffers. + + + + + Stops playing the buffers. + + + + + Shows the control panel. + + + + + Releases this instance. + + + + + Determines whether the specified sample rate is supported. + + The sample rate. + + true if [is sample rate supported]; otherwise, false. + + + + + Sets the sample rate. + + The sample rate. + + + + Gets or sets the fill buffer callback. + + The fill buffer callback. + + + + Gets the capabilities of the AsioDriver. + + The capabilities. + + + + Creates the buffers for playing. + + The number of outputs channels. + The number of input channel. + if set to true [use max buffer size] else use Prefered size + + + + Builds the capabilities internally. + + + + + Callback called by the AsioDriver on fill buffer demand. Redirect call to external callback. + + Index of the double buffer. + if set to true [direct process]. + + + + Callback called by the AsioDriver on event "Samples rate changed". + + The sample rate. + + + + Asio message call back. + + The selector. + The value. + The message. + The opt. + + + + + Buffers switch time info call back. + + The asio time param. + Index of the double buffer. + if set to true [direct process]. + + + + + ASIO Error Codes + + + + + This value will be returned whenever the call succeeded + + + + + unique success return value for ASIOFuture calls + + + + + hardware input or output is not present or available + + + + + hardware is malfunctioning (can be returned by any ASIO function) + + + + + input parameter invalid + + + + + hardware is in a bad mode or used in a bad mode + + + + + hardware is not running when sample position is inquired + + + + + sample clock or rate cannot be determined or is not present + + + + + not enough memory for completing the request + + + + + ASIO Message Selector + + + + + selector in <value>, returns 1L if supported, + + + + + returns engine (host) asio implementation version, + + + + + request driver reset. if accepted, this + + + + + not yet supported, will currently always return 0L. + + + + + the driver went out of sync, such that + + + + + the drivers latencies have changed. The engine + + + + + if host returns true here, it will expect the + + + + + supports timecode + + + + + unused - value: number of commands, message points to mmc commands + + + + + kAsioSupportsXXX return 1 if host supports this + + + + + unused and undefined + + + + + unused and undefined + + + + + unused and undefined + + + + + unused and undefined + + + + + driver detected an overload + + + + + This class stores convertors for different interleaved WaveFormat to ASIOSampleType separate channel + format. + + + + + Selects the sample convertor based on the input WaveFormat and the output ASIOSampleTtype. + + The wave format. + The type. + + + + + Optimized convertor for 2 channels SHORT + + + + + Generic convertor for SHORT + + + + + Optimized convertor for 2 channels FLOAT + + + + + Generic convertor Float to INT + + + + + Optimized convertor for 2 channels INT to INT + + + + + Generic convertor INT to INT + + + + + Optimized convertor for 2 channels INT to SHORT + + + + + Generic convertor INT to SHORT + + + + + Generic convertor INT to FLOAT + + + + + Optimized convertor for 2 channels SHORT + + + + + Generic convertor for SHORT + + + + + Optimized convertor for 2 channels FLOAT + + + + + Generic convertor SHORT + + + + + Generic converter 24 LSB + + + + + Generic convertor for float + + + + + ASIO Sample Type + + + + + Int 16 MSB + + + + + Int 24 MSB (used for 20 bits as well) + + + + + Int 32 MSB + + + + + IEEE 754 32 bit float + + + + + IEEE 754 64 bit double float + + + + + 32 bit data with 16 bit alignment + + + + + 32 bit data with 18 bit alignment + + + + + 32 bit data with 20 bit alignment + + + + + 32 bit data with 24 bit alignment + + + + + Int 16 LSB + + + + + Int 24 LSB + used for 20 bits as well + + + + + Int 32 LSB + + + + + IEEE 754 32 bit float, as found on Intel x86 architecture + + + + + IEEE 754 64 bit double float, as found on Intel x86 architecture + + + + + 32 bit data with 16 bit alignment + + + + + 32 bit data with 18 bit alignment + + + + + 32 bit data with 20 bit alignment + + + + + 32 bit data with 24 bit alignment + + + + + DSD 1 bit data, 8 samples per byte. First sample in Least significant bit. + + + + + DSD 1 bit data, 8 samples per byte. First sample in Most significant bit. + + + + + DSD 8 bit data, 1 sample per byte. No Endianness required. + + + + + ASIO common Exception. + + + + + Gets the name of the error. + + The error. + the name of the error + + + + Represents an installed ACM Driver + + + + + Helper function to determine whether a particular codec is installed + + The short name of the function + Whether the codec is installed + + + + Attempts to add a new ACM driver from a file + + Full path of the .acm or dll file containing the driver + Handle to the driver + + + + Removes a driver previously added using AddLocalDriver + + Local driver to remove + + + + Show Format Choose Dialog + + Owner window handle, can be null + Window title + Enumeration flags. None to get everything + Enumeration format. Only needed with certain enumeration flags + The selected format + Textual description of the selected format + Textual description of the selected format tag + True if a format was selected + + + + Gets the maximum size needed to store a WaveFormat for ACM interop functions + + + + + Finds a Driver by its short name + + Short Name + The driver, or null if not found + + + + Gets a list of the ACM Drivers installed + + + + + The callback for acmDriverEnum + + + + + Creates a new ACM Driver object + + Driver handle + + + + The short name of this driver + + + + + The full name of this driver + + + + + The driver ID + + + + + ToString + + + + + The list of FormatTags for this ACM Driver + + + + + Gets all the supported formats for a given format tag + + Format tag + Supported formats + + + + Opens this driver + + + + + Closes this driver + + + + + Dispose + + + + + Flags for use with acmDriverAdd + + + + + ACM_DRIVERADDF_LOCAL + + + + + ACM_DRIVERADDF_GLOBAL + + + + + ACM_DRIVERADDF_FUNCTION + + + + + ACM_DRIVERADDF_NOTIFYHWND + + + + + Interop structure for ACM driver details (ACMDRIVERDETAILS) + http://msdn.microsoft.com/en-us/library/dd742889%28VS.85%29.aspx + + + + + DWORD cbStruct + + + + + FOURCC fccType + + + + + FOURCC fccComp + + + + + WORD wMid; + + + + + WORD wPid + + + + + DWORD vdwACM + + + + + DWORD vdwDriver + + + + + DWORD fdwSupport; + + + + + DWORD cFormatTags + + + + + DWORD cFilterTags + + + + + HICON hicon + + + + + TCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]; + + + + + TCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]; + + + + + TCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]; + + + + + TCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]; + + + + + TCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]; + + + + + ACMDRIVERDETAILS_SHORTNAME_CHARS + + + + + ACMDRIVERDETAILS_LONGNAME_CHARS + + + + + ACMDRIVERDETAILS_COPYRIGHT_CHARS + + + + + ACMDRIVERDETAILS_LICENSING_CHARS + + + + + ACMDRIVERDETAILS_FEATURES_CHARS + + + + + Flags indicating what support a particular ACM driver has + + + + ACMDRIVERDETAILS_SUPPORTF_CODEC - Codec + + + ACMDRIVERDETAILS_SUPPORTF_CONVERTER - Converter + + + ACMDRIVERDETAILS_SUPPORTF_FILTER - Filter + + + ACMDRIVERDETAILS_SUPPORTF_HARDWARE - Hardware + + + ACMDRIVERDETAILS_SUPPORTF_ASYNC - Async + + + ACMDRIVERDETAILS_SUPPORTF_LOCAL - Local + + + ACMDRIVERDETAILS_SUPPORTF_DISABLED - Disabled + + + + ACM_DRIVERENUMF_NOLOCAL, Only global drivers should be included in the enumeration + + + + + ACM_DRIVERENUMF_DISABLED, Disabled ACM drivers should be included in the enumeration + + + + + ACM Format + + + + + Format Index + + + + + Format Tag + + + + + Support Flags + + + + + WaveFormat + + + + + WaveFormat Size + + + + + Format Description + + + + + ACMFORMATCHOOSE + http://msdn.microsoft.com/en-us/library/dd742911%28VS.85%29.aspx + + + + + DWORD cbStruct; + + + + + DWORD fdwStyle; + + + + + HWND hwndOwner; + + + + + LPWAVEFORMATEX pwfx; + + + + + DWORD cbwfx; + + + + + LPCTSTR pszTitle; + + + + + TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; + + + + + TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; + + + + + LPTSTR pszName; + n.b. can be written into + + + + + DWORD cchName + Should be at least 128 unless name is zero + + + + + DWORD fdwEnum; + + + + + LPWAVEFORMATEX pwfxEnum; + + + + + HINSTANCE hInstance; + + + + + LPCTSTR pszTemplateName; + + + + + LPARAM lCustData; + + + + + ACMFORMATCHOOSEHOOKPROC pfnHook; + + + + + None + + + + + ACMFORMATCHOOSE_STYLEF_SHOWHELP + + + + + ACMFORMATCHOOSE_STYLEF_ENABLEHOOK + + + + + ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE + + + + + ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE + + + + + ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT + + + + + ACMFORMATCHOOSE_STYLEF_CONTEXTHELP + + + + + ACMFORMATDETAILS + http://msdn.microsoft.com/en-us/library/dd742913%28VS.85%29.aspx + + + + + DWORD cbStruct; + + + + + DWORD dwFormatIndex; + + + + + DWORD dwFormatTag; + + + + + DWORD fdwSupport; + + + + + LPWAVEFORMATEX pwfx; + + + + + DWORD cbwfx; + + + + + TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; + + + + + ACMFORMATDETAILS_FORMAT_CHARS + + + + + Format Enumeration Flags + + + + + None + + + + + ACM_FORMATENUMF_CONVERT + The WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will only enumerate destination formats that can be converted from the given pwfx format. + + + + + ACM_FORMATENUMF_HARDWARE + The enumerator should only enumerate formats that are supported as native input or output formats on one or more of the installed waveform-audio devices. This flag provides a way for an application to choose only formats native to an installed waveform-audio device. This flag must be used with one or both of the ACM_FORMATENUMF_INPUT and ACM_FORMATENUMF_OUTPUT flags. Specifying both ACM_FORMATENUMF_INPUT and ACM_FORMATENUMF_OUTPUT will enumerate only formats that can be opened for input or output. This is true regardless of whether this flag is specified. + + + + + ACM_FORMATENUMF_INPUT + Enumerator should enumerate only formats that are supported for input (recording). + + + + + ACM_FORMATENUMF_NCHANNELS + The nChannels member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_NSAMPLESPERSEC + The nSamplesPerSec member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_OUTPUT + Enumerator should enumerate only formats that are supported for output (playback). + + + + + ACM_FORMATENUMF_SUGGEST + The WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate all suggested destination formats for the given pwfx format. This mechanism can be used instead of the acmFormatSuggest function to allow an application to choose the best suggested format for conversion. The dwFormatIndex member will always be set to zero on return. + + + + + ACM_FORMATENUMF_WBITSPERSAMPLE + The wBitsPerSample member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. + + + + + ACM_FORMATENUMF_WFORMATTAG + The wFormatTag member of the WAVEFORMATEX structure pointed to by the pwfx member of the ACMFORMATDETAILS structure is valid. The enumerator will enumerate only a format that conforms to this attribute. The dwFormatTag member of the ACMFORMATDETAILS structure must be equal to the wFormatTag member. + + + + + ACM_FORMATSUGGESTF_WFORMATTAG + + + + + ACM_FORMATSUGGESTF_NCHANNELS + + + + + ACM_FORMATSUGGESTF_NSAMPLESPERSEC + + + + + ACM_FORMATSUGGESTF_WBITSPERSAMPLE + + + + + ACM_FORMATSUGGESTF_TYPEMASK + + + + + ACM Format Tag + + + + + Format Tag Index + + + + + Format Tag + + + + + Format Size + + + + + Support Flags + + + + + Standard Formats Count + + + + + Format Description + + + + + DWORD cbStruct; + + + + + DWORD dwFormatTagIndex; + + + + + DWORD dwFormatTag; + + + + + DWORD cbFormatSize; + + + + + DWORD fdwSupport; + + + + + DWORD cStandardFormats; + + + + + TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; + + + + + ACMFORMATTAGDETAILS_FORMATTAG_CHARS + + + + + Interop definitions for Windows ACM (Audio Compression Manager) API + + + + + http://msdn.microsoft.com/en-us/library/dd742910%28VS.85%29.aspx + UINT ACMFORMATCHOOSEHOOKPROC acmFormatChooseHookProc( + HWND hwnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + + + + + A version with pointers for troubleshooting + + + + + AcmStream encapsulates an Audio Compression Manager Stream + used to convert audio from one format to another + + + + + Creates a new ACM stream to convert one format to another. Note that + not all conversions can be done in one step + + The source audio format + The destination audio format + + + + Creates a new ACM stream to convert one format to another, using a + specified driver identifier and wave filter + + the driver identifier + the source format + the wave filter + + + + Returns the number of output bytes for a given number of input bytes + + Number of input bytes + Number of output bytes + + + + Returns the number of source bytes for a given number of destination bytes + + Number of destination bytes + Number of source bytes + + + + Suggests an appropriate PCM format that the compressed format can be converted + to in one step + + The compressed format + The PCM format + + + + Returns the Source Buffer. Fill this with data prior to calling convert + + + + + Returns the Destination buffer. This will contain the converted data + after a successful call to Convert + + + + + Report that we have repositioned in the source stream + + + + + Converts the contents of the SourceBuffer into the DestinationBuffer + + The number of bytes in the SourceBuffer + that need to be converted + The number of source bytes actually converted + The number of converted bytes in the DestinationBuffer + + + + Converts the contents of the SourceBuffer into the DestinationBuffer + + The number of bytes in the SourceBuffer + that need to be converted + The number of converted bytes in the DestinationBuffer + + + + Frees resources associated with this ACM Stream + + + + + Frees resources associated with this ACM Stream + + + + + Frees resources associated with this ACM Stream + + + + + ACMSTREAMHEADER_STATUSF_DONE + + + + + ACMSTREAMHEADER_STATUSF_PREPARED + + + + + ACMSTREAMHEADER_STATUSF_INQUEUE + + + + + Interop structure for ACM stream headers. + ACMSTREAMHEADER + http://msdn.microsoft.com/en-us/library/dd742926%28VS.85%29.aspx + + + + + ACM_STREAMOPENF_QUERY, ACM will be queried to determine whether it supports the given conversion. A conversion stream will not be opened, and no handle will be returned in the phas parameter. + + + + + ACM_STREAMOPENF_ASYNC, Stream conversion should be performed asynchronously. If this flag is specified, the application can use a callback function to be notified when the conversion stream is opened and closed and after each buffer is converted. In addition to using a callback function, an application can examine the fdwStatus member of the ACMSTREAMHEADER structure for the ACMSTREAMHEADER_STATUSF_DONE flag. + + + + + ACM_STREAMOPENF_NONREALTIME, ACM will not consider time constraints when converting the data. By default, the driver will attempt to convert the data in real time. For some formats, specifying this flag might improve the audio quality or other characteristics. + + + + + CALLBACK_TYPEMASK, callback type mask + + + + + CALLBACK_NULL, no callback + + + + + CALLBACK_WINDOW, dwCallback is a HWND + + + + + CALLBACK_TASK, dwCallback is a HTASK + + + + + CALLBACK_FUNCTION, dwCallback is a FARPROC + + + + + CALLBACK_THREAD, thread ID replaces 16 bit task + + + + + CALLBACK_EVENT, dwCallback is an EVENT Handle + + + + + ACM_STREAMSIZEF_SOURCE + + + + + ACM_STREAMSIZEF_DESTINATION + + + + + Summary description for WaveFilter. + + + + + cbStruct + + + + + dwFilterTag + + + + + fdwFilter + + + + + reserved + + + + ACM_METRIC_COUNT_DRIVERS + + + ACM_METRIC_COUNT_CODECS + + + ACM_METRIC_COUNT_CONVERTERS + + + ACM_METRIC_COUNT_FILTERS + + + ACM_METRIC_COUNT_DISABLED + + + ACM_METRIC_COUNT_HARDWARE + + + ACM_METRIC_COUNT_LOCAL_DRIVERS + + + ACM_METRIC_COUNT_LOCAL_CODECS + + + ACM_METRIC_COUNT_LOCAL_CONVERTERS + + + ACM_METRIC_COUNT_LOCAL_FILTERS + + + ACM_METRIC_COUNT_LOCAL_DISABLED + + + ACM_METRIC_HARDWARE_WAVE_INPUT + + + ACM_METRIC_HARDWARE_WAVE_OUTPUT + + + ACM_METRIC_MAX_SIZE_FORMAT + + + ACM_METRIC_MAX_SIZE_FILTER + + + ACM_METRIC_DRIVER_SUPPORT + + + ACM_METRIC_DRIVER_PRIORITY + + + + ACM_STREAMCONVERTF_BLOCKALIGN + + + + + ACM_STREAMCONVERTF_START + + + + + ACM_STREAMCONVERTF_END + + + + + Wave Callback Strategy + + + + + Use a function + + + + + Create a new window (should only be done if on GUI thread) + + + + + Use an existing window handle + + + + + Use an event handle + + + + + WaveHeader interop structure (WAVEHDR) + http://msdn.microsoft.com/en-us/library/dd743837%28VS.85%29.aspx + + + + pointer to locked data buffer (lpData) + + + length of data buffer (dwBufferLength) + + + used for input only (dwBytesRecorded) + + + for client's use (dwUser) + + + assorted flags (dwFlags) + + + loop control counter (dwLoops) + + + PWaveHdr, reserved for driver (lpNext) + + + reserved for driver + + + + Wave Header Flags enumeration + + + + + WHDR_BEGINLOOP + This buffer is the first buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_DONE + Set by the device driver to indicate that it is finished with the buffer and is returning it to the application. + + + + + WHDR_ENDLOOP + This buffer is the last buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_INQUEUE + Set by Windows to indicate that the buffer is queued for playback. + + + + + WHDR_PREPARED + Set by Windows to indicate that the buffer has been prepared with the waveInPrepareHeader or waveOutPrepareHeader function. + + + + + WaveInCapabilities structure (based on WAVEINCAPS2 from mmsystem.h) + http://msdn.microsoft.com/en-us/library/ms713726(VS.85).aspx + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Number of channels supported + + + + + The product name + + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + Event Args for WaveInStream event + + + + + Creates new WaveInEventArgs + + + + + Buffer containing recorded data. Note that it might not be completely + full. + + + + + The number of recorded bytes in Buffer. + + + + + MME Wave function interop + + + + + CALLBACK_NULL + No callback + + + + + CALLBACK_FUNCTION + dwCallback is a FARPROC + + + + + CALLBACK_EVENT + dwCallback is an EVENT handle + + + + + CALLBACK_WINDOW + dwCallback is a HWND + + + + + CALLBACK_THREAD + callback is a thread ID + + + + + WIM_OPEN + + + + + WIM_CLOSE + + + + + WIM_DATA + + + + + WOM_CLOSE + + + + + WOM_DONE + + + + + WOM_OPEN + + + + + WaveOutCapabilities structure (based on WAVEOUTCAPS2 from mmsystem.h) + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_waveoutcaps_str.asp + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Optional functionality supported by the device + + + + + Number of channels supported + + + + + Whether playback control is supported + + + + + The product name + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Supported wave formats for WaveOutCapabilities + + + + + 11.025 kHz, Mono, 8-bit + + + + + 11.025 kHz, Stereo, 8-bit + + + + + 11.025 kHz, Mono, 16-bit + + + + + 11.025 kHz, Stereo, 16-bit + + + + + 22.05 kHz, Mono, 8-bit + + + + + 22.05 kHz, Stereo, 8-bit + + + + + 22.05 kHz, Mono, 16-bit + + + + + 22.05 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 48 kHz, Mono, 8-bit + + + + + 48 kHz, Stereo, 8-bit + + + + + 48 kHz, Mono, 16-bit + + + + + 48 kHz, Stereo, 16-bit + + + + + 96 kHz, Mono, 8-bit + + + + + 96 kHz, Stereo, 8-bit + + + + + 96 kHz, Mono, 16-bit + + + + + 96 kHz, Stereo, 16-bit + + + + + Flags indicating what features this WaveOut device supports + + + + supports pitch control (WAVECAPS_PITCH) + + + supports playback rate control (WAVECAPS_PLAYBACKRATE) + + + supports volume control (WAVECAPS_VOLUME) + + + supports separate left-right volume control (WAVECAPS_LRVOLUME) + + + (WAVECAPS_SYNC) + + + (WAVECAPS_SAMPLEACCURATE) + + + + Sample provider interface to make WaveChannel32 extensible + Still a bit ugly, hence internal at the moment - and might even make these into + bit depth converting WaveProviders + + + + + ADSR sample provider allowing you to specify attack, decay, sustain and release values + + + + + Creates a new AdsrSampleProvider with default values + + + + + Attack time in seconds + + + + + Release time in seconds + + + + + Reads audio from this sample provider + + + + + Enters the Release phase + + + + + The output WaveFormat + + + + + Sample Provider to concatenate multiple sample providers together + + + + + Creates a new ConcatenatingSampleProvider + + The source providers to play one after the other. Must all share the same sample rate and channel count + + + + The WaveFormat of this Sample Provider + + + + + Read Samples from this sample provider + + + + + Sample Provider to allow fading in and out + + + + + Creates a new FadeInOutSampleProvider + + The source stream with the audio to be faded in or out + If true, we start faded out + + + + Requests that a fade-in begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Requests that a fade-out begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Reads samples from this sample provider + + Buffer to read into + Offset within buffer to write to + Number of samples desired + Number of samples read + + + + WaveFormat of this SampleProvider + + + + + Simple SampleProvider that passes through audio unchanged and raises + an event every n samples with the maximum sample value from the period + for metering purposes + + + + + Number of Samples per notification + + + + + Raised periodically to inform the user of the max volume + + + + + Initialises a new instance of MeteringSampleProvider that raises 10 stream volume + events per second + + Source sample provider + + + + Initialises a new instance of MeteringSampleProvider + + source sampler provider + Number of samples between notifications + + + + The WaveFormat of this sample provider + + + + + Reads samples from this Sample Provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Event args for aggregated stream volume + + + + + Max sample values array (one for each channel) + + + + + A sample provider mixer, allowing inputs to be added and removed + + + + + Creates a new MixingSampleProvider, with no inputs, but a specified WaveFormat + + The WaveFormat of this mixer. All inputs must be in this format + + + + Creates a new MixingSampleProvider, based on the given inputs + + Mixer inputs - must all have the same waveformat, and must + all be of the same WaveFormat. There must be at least one input + + + + Returns the mixer inputs (read-only - use AddMixerInput to add an input + + + + + When set to true, the Read method always returns the number + of samples requested, even if there are no inputs, or if the + current inputs reach their end. Setting this to true effectively + makes this a never-ending sample provider, so take care if you plan + to write it out to a file. + + + + + Adds a WaveProvider as a Mixer input. + Must be PCM or IEEE float already + + IWaveProvider mixer input + + + + Adds a new mixer input + + Mixer input + + + + Raised when a mixer input has been removed because it has ended + + + + + Removes a mixer input + + Mixer input to remove + + + + Removes all mixer inputs + + + + + The output WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + SampleProvider event args + + + + + Constructs a new SampleProviderEventArgs + + + + + The Sample Provider + + + + + No nonsense mono to stereo provider, no volume adjustment, + just copies input to left and right. + + + + + Initializes a new instance of MonoToStereoSampleProvider + + Source sample provider + + + + WaveFormat of this provider + + + + + Reads samples from this provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Multiplier for left channel (default is 1.0) + + + + + Multiplier for right channel (default is 1.0) + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing sample provider, allowing re-patching of input channels to different + output channels + + Input sample providers. Must all be of the same sample rate, but can have any number of channels + Desired number of output channels. + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads samples from this sample provider + + Buffer to be filled with sample data + Offset into buffer to start writing to, usually 0 + Number of samples required + Number of samples read + + + + The output WaveFormat for this SampleProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Simple class that raises an event on every sample + + + + + Initializes a new instance of NotifyingSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Sample notifier + + + + + Allows you to: + 1. insert a pre-delay of silence before the source begins + 2. skip over a certain amount of the beginning of the source + 3. only play a set amount from the source + 4. insert silence at the end after the source is complete + + + + + Number of samples of silence to insert before playing source + + + + + Amount of silence to insert before playing + + + + + Number of samples in source to discard + + + + + Amount of audio to skip over from the source before beginning playback + + + + + Number of samples to read from source (if 0, then read it all) + + + + + Amount of audio to take from the source (TimeSpan.Zero means play to end) + + + + + Number of samples of silence to insert after playing source + + + + + Amount of silence to insert after playing source + + + + + Creates a new instance of offsetSampleProvider + + The Source Sample Provider to read from + + + + The WaveFormat of this SampleProvider + + + + + Reads from this sample provider + + Sample buffer + Offset within sample buffer to read to + Number of samples required + Number of samples read + + + + Converts a mono sample provider to stereo, with a customisable pan strategy + + + + + Initialises a new instance of the PanningSampleProvider + + Source sample provider, must be mono + + + + Pan value, must be between -1 (left) and 1 (right) + + + + + The pan strategy currently in use + + + + + The WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Pair of floating point values, representing samples or multipliers + + + + + Left value + + + + + Right value + + + + + Required Interface for a Panning Strategy + + + + + Gets the left and right multipliers for a given pan value + + Pan value from -1 to 1 + Left and right multipliers in a stereo sample pair + + + + Simplistic "balance" control - treating the mono input as if it was stereo + In the centre, both channels full volume. Opposite channel decays linearly + as balance is turned to to one side + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Square Root Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Sinus Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Linear Pan + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Converts an IWaveProvider containing 16 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm16BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Samples required + Number of samples read + + + + Converts an IWaveProvider containing 24 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm24BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 32 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm32BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 8 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm8BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples to read + Number of samples read + + + + Utility class that takes an IWaveProvider input at any bit depth + and exposes it as an ISampleProvider. Can turn mono inputs into stereo, + and allows adjusting of volume + (The eventual successor to WaveChannel32) + This class also serves as an example of how you can link together several simple + Sample Providers to form a more useful class. + + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + force mono inputs to become stereo + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + The WaveFormat of this Sample Provider + + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Raised periodically to inform the user of the max volume + (before the volume meter) + + + + + Helper base class for classes converting to ISampleProvider + + + + + Source Wave Provider + + + + + Source buffer (to avoid constantly creating small buffers during playback) + + + + + Initialises a new instance of SampleProviderConverterBase + + Source Wave provider + + + + Wave format of this wave provider + + + + + Reads samples from the source wave provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Ensure the source buffer exists and is big enough + + Bytes required + + + + Utility class for converting to SampleProvider + + + + + Helper function to go from IWaveProvider to a SampleProvider + Must already be PCM or IEEE float + + The WaveProvider to convert + A sample provider + + + + Helper class for when you need to convert back to an IWaveProvider from + an ISampleProvider. Keeps it as IEEE float + + + + + Initializes a new instance of the WaveProviderFloatToWaveProvider class + + Source wave provider + + + + Reads from this provider + + + + + The waveformat of this WaveProvider (same as the source) + + + + + Converts a sample provider to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts a sample provider to 24 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream, clipping if necessary + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + The Format of this IWaveProvider + + + + + + Volume of this channel. 1.0 = full scale, 0.0 to mute + + + + + Signal Generator + Sin, Square, Triangle, SawTooth, White Noise, Pink Noise, Sweep. + + + Posibility to change ISampleProvider + Example : + --------- + WaveOut _waveOutGene = new WaveOut(); + WaveGenerator wg = new SignalGenerator(); + wg.Type = ... + wg.Frequency = ... + wg ... + _waveOutGene.Init(wg); + _waveOutGene.Play(); + + + + + Initializes a new instance for the Generator (Default :: 44.1Khz, 2 channels, Sinus, Frequency = 440, Gain = 1) + + + + + Initializes a new instance for the Generator (UserDef SampleRate & Channels) + + Desired sample rate + Number of channels + + + + The waveformat of this WaveProvider (same as the source) + + + + + Frequency for the Generator. (20.0 - 20000.0 Hz) + Sin, Square, Triangle, SawTooth, Sweep (Start Frequency). + + + + + Return Log of Frequency Start (Read only) + + + + + End Frequency for the Sweep Generator. (Start Frequency in Frequency) + + + + + Return Log of Frequency End (Read only) + + + + + Gain for the Generator. (0.0 to 1.0) + + + + + Channel PhaseReverse + + + + + Type of Generator. + + + + + Length Seconds for the Sweep Generator. + + + + + Reads from this provider. + + + + + Private :: Random for WhiteNoise & Pink Noise (Value form -1 to 1) + + Random value from -1 to +1 + + + + Signal Generator type + + + + + Pink noise + + + + + White noise + + + + + Sweep + + + + + Sine wave + + + + + Square wave + + + + + Triangle Wave + + + + + Sawtooth wave + + + + + Author: Freefall + Date: 05.08.16 + Based on: the port of Stephan M. Bernsee´s pitch shifting class + Port site: https://sites.google.com/site/mikescoderama/pitch-shifting + Test application and github site: https://github.com/Freefall63/NAudio-Pitchshifter + + NOTE: I strongly advice to add a Limiter for post-processing. + For my needs the FastAttackCompressor1175 provides acceptable results: + https://github.com/Jiyuu/SkypeFX/blob/master/JSNet/FastAttackCompressor1175.cs + + UPDATE: Added a simple Limiter based on the pydirac implementation. + https://github.com/echonest/remix/blob/master/external/pydirac225/source/Dirac_LE.cpp + + + + + + Creates a new SMB Pitch Shifting Sample Provider with default settings + + Source provider + + + + Creates a new SMB Pitch Shifting Sample Provider with custom settings + + Source provider + FFT Size (any power of two <= 4096: 4096, 2048, 1024, 512, ...) + Oversampling (number of overlapping windows) + Initial pitch (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + Read from this sample provider + + + + + WaveFormat + + + + + Pitch Factor (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + + Takes a stereo input and turns it to mono + + + + + Creates a new mono ISampleProvider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this SampleProvider + + + + + Very simple sample provider supporting adjustable gain + + + + + Initializes a new instance of VolumeSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Helper class turning an already 32 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Helper class turning an already 64 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Fully managed resampling sample provider, based on the WDL Resampler + + + + + Constructs a new resampler + + Source to resample + Desired output sample rate + + + + Reads from this sample provider + + + + + Output WaveFormat + + + + + Useful extension methods to make switching between WaveAndSampleProvider easier + + + + + Converts a WaveProvider into a SampleProvider (only works for PCM) + + WaveProvider to convert + + + + + Allows sending a SampleProvider directly to an IWavePlayer without needing to convert + back to an IWaveProvider + + The WavePlayer + + + + + + Turns WaveFormatExtensible into a standard waveformat if possible + + Input wave format + A standard PCM or IEEE waveformat, or the original waveformat + + + + Converts a ISampleProvider to a IWaveProvider but still 32 bit float + + SampleProvider to convert + An IWaveProvider + + + + Converts a ISampleProvider to a IWaveProvider but and convert to 16 bit + + SampleProvider to convert + A 16 bit IWaveProvider + + + + Concatenates one Sample Provider on the end of another + + The sample provider to play first + The sample provider to play next + A single sampleprovider to play one after the other + + + + Concatenates one Sample Provider on the end of another with silence inserted + + The sample provider to play first + Silence duration to insert between the two + The sample provider to play next + A single sample provider + + + + Skips over a specified amount of time (by consuming source stream) + + Source sample provider + Duration to skip over + A sample provider that skips over the specified amount of time + + + + Takes a specified amount of time from the source stream + + Source sample provider + Duration to take + A sample provider that reads up to the specified amount of time + + + + Converts a Stereo Sample Provider to mono, allowing mixing of channel volume + + Stereo Source Provider + Amount of left channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + Amount of right channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + A mono SampleProvider + + + + Converts a Mono ISampleProvider to stereo + + Mono Source Provider + Amount to mix to left channel (1.0 is full volume) + Amount to mix to right channel (1.0 is full volume) + + + + + Microsoft ADPCM + See http://icculus.org/SDL_sound/downloads/external_documentation/wavecomp.htm + + + + + Empty constructor needed for marshalling from a pointer + + + + + Samples per block + + + + + Number of coefficients + + + + + Coefficients + + + + + Microsoft ADPCM + + Sample Rate + Channels + + + + Serializes this wave format + + Binary writer + + + + String Description of this WaveFormat + + + + + GSM 610 + + + + + Creates a GSM 610 WaveFormat + For now hardcoded to 13kbps + + + + + Samples per block + + + + + Writes this structure to a BinaryWriter + + + + + IMA/DVI ADPCM Wave Format + Work in progress + + + + + parameterless constructor for Marshalling + + + + + Creates a new IMA / DVI ADPCM Wave Format + + Sample Rate + Number of channels + Bits Per Sample + + + + MP3 WaveFormat, MPEGLAYER3WAVEFORMAT from mmreg.h + + + + + Wave format ID (wID) + + + + + Padding flags (fdwFlags) + + + + + Block Size (nBlockSize) + + + + + Frames per block (nFramesPerBlock) + + + + + Codec Delay (nCodecDelay) + + + + + Creates a new MP3 WaveFormat + + + + + Wave Format Padding Flags + + + + + MPEGLAYER3_FLAG_PADDING_ISO + + + + + MPEGLAYER3_FLAG_PADDING_ON + + + + + MPEGLAYER3_FLAG_PADDING_OFF + + + + + Wave Format ID + + + + MPEGLAYER3_ID_UNKNOWN + + + MPEGLAYER3_ID_MPEG + + + MPEGLAYER3_ID_CONSTANTFRAMESIZE + + + + DSP Group TrueSpeech + + + + + DSP Group TrueSpeech WaveFormat + + + + + Writes this structure to a BinaryWriter + + + + + Represents a Wave file format + + + + format type + + + number of channels + + + sample rate + + + for buffer estimation + + + block size of data + + + number of bits per sample of mono data + + + number of following bytes + + + + Creates a new PCM 44.1Khz stereo 16 bit format + + + + + Creates a new 16 bit wave format with the specified sample + rate and channel count + + Sample Rate + Number of channels + + + + Gets the size of a wave buffer equivalent to the latency in milliseconds. + + The milliseconds. + + + + + Creates a WaveFormat with custom members + + The encoding + Sample Rate + Number of channels + Average Bytes Per Second + Block Align + Bits Per Sample + + + + + Creates an A-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a Mu-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a new PCM format with the specified sample rate, bit depth and channels + + + + + Creates a new 32 bit IEEE floating point wave format + + sample rate + number of channels + + + + Helper function to retrieve a WaveFormat structure from a pointer + + WaveFormat structure + + + + + Helper function to marshal WaveFormat to an IntPtr + + WaveFormat + IntPtr to WaveFormat structure (needs to be freed by callee) + + + + Reads in a WaveFormat (with extra data) from a fmt chunk (chunk identifier and + length should already have been read) + + Binary reader + Format chunk length + A WaveFormatExtraData + + + + Reads a new WaveFormat object from a stream + + A binary reader that wraps the stream + + + + Reports this WaveFormat as a string + + String describing the wave format + + + + Compares with another WaveFormat object + + Object to compare to + True if the objects are the same + + + + Provides a Hashcode for this WaveFormat + + A hashcode + + + + Returns the encoding type used + + + + + Writes this WaveFormat object to a stream + + the output stream + + + + Returns the number of channels (1=mono,2=stereo etc) + + + + + Returns the sample rate (samples per second) + + + + + Returns the average number of bytes used per second + + + + + Returns the block alignment + + + + + Returns the number of bits per sample (usually 16 or 32, sometimes 24 or 8) + Can be 0 for some codecs + + + + + Returns the number of extra bytes used by this waveformat. Often 0, + except for compressed formats which store extra data after the WAVEFORMATEX header + + + + + Summary description for WaveFormatEncoding. + + + + WAVE_FORMAT_UNKNOWN, Microsoft Corporation + + + WAVE_FORMAT_PCM Microsoft Corporation + + + WAVE_FORMAT_ADPCM Microsoft Corporation + + + WAVE_FORMAT_IEEE_FLOAT Microsoft Corporation + + + WAVE_FORMAT_VSELP Compaq Computer Corp. + + + WAVE_FORMAT_IBM_CVSD IBM Corporation + + + WAVE_FORMAT_ALAW Microsoft Corporation + + + WAVE_FORMAT_MULAW Microsoft Corporation + + + WAVE_FORMAT_DTS Microsoft Corporation + + + WAVE_FORMAT_DRM Microsoft Corporation + + + WAVE_FORMAT_WMAVOICE9 + + + WAVE_FORMAT_OKI_ADPCM OKI + + + WAVE_FORMAT_DVI_ADPCM Intel Corporation + + + WAVE_FORMAT_IMA_ADPCM Intel Corporation + + + WAVE_FORMAT_MEDIASPACE_ADPCM Videologic + + + WAVE_FORMAT_SIERRA_ADPCM Sierra Semiconductor Corp + + + WAVE_FORMAT_G723_ADPCM Antex Electronics Corporation + + + WAVE_FORMAT_DIGISTD DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIFIX DSP Solutions, Inc. + + + WAVE_FORMAT_DIALOGIC_OKI_ADPCM Dialogic Corporation + + + WAVE_FORMAT_MEDIAVISION_ADPCM Media Vision, Inc. + + + WAVE_FORMAT_CU_CODEC Hewlett-Packard Company + + + WAVE_FORMAT_YAMAHA_ADPCM Yamaha Corporation of America + + + WAVE_FORMAT_SONARC Speech Compression + + + WAVE_FORMAT_DSPGROUP_TRUESPEECH DSP Group, Inc + + + WAVE_FORMAT_ECHOSC1 Echo Speech Corporation + + + WAVE_FORMAT_AUDIOFILE_AF36, Virtual Music, Inc. + + + WAVE_FORMAT_APTX Audio Processing Technology + + + WAVE_FORMAT_AUDIOFILE_AF10, Virtual Music, Inc. + + + WAVE_FORMAT_PROSODY_1612, Aculab plc + + + WAVE_FORMAT_LRC, Merging Technologies S.A. + + + WAVE_FORMAT_DOLBY_AC2, Dolby Laboratories + + + WAVE_FORMAT_GSM610, Microsoft Corporation + + + WAVE_FORMAT_MSNAUDIO, Microsoft Corporation + + + WAVE_FORMAT_ANTEX_ADPCME, Antex Electronics Corporation + + + WAVE_FORMAT_CONTROL_RES_VQLPC, Control Resources Limited + + + WAVE_FORMAT_DIGIREAL, DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIADPCM, DSP Solutions, Inc. + + + WAVE_FORMAT_CONTROL_RES_CR10, Control Resources Limited + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_MPEG, Microsoft Corporation + + + + + + + + + WAVE_FORMAT_MPEGLAYER3, ISO/MPEG Layer3 Format Tag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_GSM + + + WAVE_FORMAT_G729 + + + WAVE_FORMAT_G723 + + + WAVE_FORMAT_ACELP + + + + WAVE_FORMAT_RAW_AAC1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Windows Media Audio, WAVE_FORMAT_WMAUDIO2, Microsoft Corporation + + + + + Windows Media Audio Professional WAVE_FORMAT_WMAUDIO3, Microsoft Corporation + + + + + Windows Media Audio Lossless, WAVE_FORMAT_WMAUDIO_LOSSLESS + + + + + Windows Media Audio Professional over SPDIF WAVE_FORMAT_WMASPDIF (0x0164) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Advanced Audio Coding (AAC) audio in Audio Data Transport Stream (ADTS) format. + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_ADTS_AAC. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral band replication (SBR) or parametric stereo (PS) tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + + Source wmCodec.h + + + + MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_LOAS. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral SBR or PS tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + NOKIA_MPEG_ADTS_AAC + Source wmCodec.h + + + NOKIA_MPEG_RAW_AAC + Source wmCodec.h + + + VODAFONE_MPEG_ADTS_AAC + Source wmCodec.h + + + VODAFONE_MPEG_RAW_AAC + Source wmCodec.h + + + + High-Efficiency Advanced Audio Coding (HE-AAC) stream. + The format block is an HEAACWAVEFORMAT structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + WAVE_FORMAT_DVM + + + WAVE_FORMAT_VORBIS1 "Og" Original stream compatible + + + WAVE_FORMAT_VORBIS2 "Pg" Have independent header + + + WAVE_FORMAT_VORBIS3 "Qg" Have no codebook header + + + WAVE_FORMAT_VORBIS1P "og" Original stream compatible + + + WAVE_FORMAT_VORBIS2P "pg" Have independent headere + + + WAVE_FORMAT_VORBIS3P "qg" Have no codebook header + + + WAVE_FORMAT_EXTENSIBLE + + + + + + + WaveFormatExtensible + http://www.microsoft.com/whdc/device/audio/multichaud.mspx + + + + + Parameterless constructor for marshalling + + + + + Creates a new WaveFormatExtensible for PCM or IEEE + + + + + WaveFormatExtensible for PCM or floating point can be awkward to work with + This creates a regular WaveFormat structure representing the same audio format + Returns the WaveFormat unchanged for non PCM or IEEE float + + + + + + SubFormat (may be one of AudioMediaSubtypes) + + + + + Serialize + + + + + + String representation + + + + + This class used for marshalling from unmanaged code + + + + + Allows the extra data to be read + + + + + parameterless constructor for marshalling + + + + + Reads this structure from a BinaryReader + + + + + Writes this structure to a BinaryWriter + + + + + The WMA wave format. + May not be much use because WMA codec is a DirectShow DMO not an ACM + + + + + Generic interface for wave recording + + + + + Recording WaveFormat + + + + + Start Recording + + + + + Stop Recording + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + WASAPI Loopback Capture + based on a contribution from "Pygmy" - http://naudio.codeplex.com/discussions/203605 + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Gets the default audio loopback capture device + + The default audio loopback capture device + + + + Capturing wave format + + + + + Specify loopback + + + + + Recording using waveIn api with event callbacks. + Use this for recording in non-gui applications + Events are raised as recorded buffers are made available + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Prepares a Wave input device for recording + + + + + Returns the number of Wave In devices available in the system + + + + + Retrieves the capabilities of a waveIn device + + Device to test + The WaveIn device capabilities + + + + Milliseconds for the buffer. Recommended value is 100ms + + + + + Number of Buffers to use (usually 2 or 3) + + + + + The device number to use + + + + + Start recording + + + + + Stop recording + + + + + Gets the current position in bytes from the wave input device. + it calls directly into waveInGetPosition) + + Position in bytes + + + + WaveFormat we are recording in + + + + + Dispose pattern + + + + + Microphone Level + + + + + Dispose method + + + + + This class writes audio data to a .aif file on disk + + + + + Creates an Aiff file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Aiff File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + AiffFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new AiffFileWriter + + The filename to write to + The Wave Format of the output data + + + + The aiff file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + WaveFormat of this aiff file + + + + + Returns false: Cannot read from a AiffFileWriter + + + + + Returns true: Can write to a AiffFileWriter + + + + + Returns false: Cannot seek within a AiffFileWriter + + + + + Read is not supported for a AiffFileWriter + + + + + Seek is not supported for a AiffFileWriter + + + + + SetLength is not supported for AiffFileWriter + + + + + + Gets the Position in the AiffFile (i.e. number of bytes written so far) + + + + + Appends bytes to the AiffFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Aiff file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Aiff file + They will be converted to the appropriate bit depth depending on the WaveFormat of the AIF file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Aiff file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this AiffFileWriter + + + + + Raised when ASIO data has been recorded. + It is important to handle this as quickly as possible as it is in the buffer callback + + + + + Initialises a new instance of AsioAudioAvailableEventArgs + + Pointers to the ASIO buffers for each channel + Pointers to the ASIO buffers for each channel + Number of samples in each buffer + Audio format within each buffer + + + + Pointer to a buffer per input channel + + + + + Pointer to a buffer per output channel + Allows you to write directly to the output buffers + If you do so, set SamplesPerBuffer = true, + and make sure all buffers are written to with valid data + + + + + Set to true if you have written to the output buffers + If so, AsioOut will not read from its source + + + + + Number of samples in each buffer + + + + + Converts all the recorded audio into a buffer of 32 bit floating point samples, interleaved by channel + + The samples as 32 bit floating point, interleaved + + + + Audio format within each buffer + Most commonly this will be one of, Int32LSB, Int16LSB, Int24LSB or Float32LSB + + + + + Gets as interleaved samples, allocating a float array + + The samples as 32 bit floating point values + + + + ASIO Out Player. New implementation using an internal C# binding. + + This implementation is only supporting Short16Bit and Float32Bit formats and is optimized + for 2 outputs channels . + SampleRate is supported only if AsioDriver is supporting it + + This implementation is probably the first AsioDriver binding fully implemented in C#! + + Original Contributor: Mark Heath + New Contributor to C# binding : Alexandre Mutel - email: alexandre_mutel at yahoo.fr + + + + + Playback Stopped + + + + + When recording, fires whenever recorded audio is available + + + + + Initializes a new instance of the class with the first + available ASIO Driver. + + + + + Initializes a new instance of the class with the driver name. + + Name of the device. + + + + Opens an ASIO output device + + Device number (zero based) + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Dispose + + + + + Gets the names of the installed ASIO Driver. + + an array of driver names + + + + Determines whether ASIO is supported. + + + true if ASIO is supported; otherwise, false. + + + + + Inits the driver from the asio driver name. + + Name of the driver. + + + + Shows the control panel + + + + + Starts playback + + + + + Stops playback + + + + + Pauses playback + + + + + Initialises to play + + Source wave provider + + + + Initialises to play, with optional recording + + Source wave provider - set to null for record only + Number of channels to record + Specify sample rate here if only recording, ignored otherwise + + + + driver buffer update callback to fill the wave buffer. + + The input channels. + The output channels. + + + + Gets the latency (in ms) of the playback driver + + + + + Automatically stop when the end of the input stream is reached + Disable this if auto-stop is causing hanging issues + + + + + A flag to let you know that we have reached the end of the input file + Useful if AutoStop is set to false + You can monitor this yourself and call Stop when it is true + + + + + Playback State + + + + + Driver Name + + + + + The number of output channels we are currently using for playback + (Must be less than or equal to DriverOutputChannelCount) + + + + + The number of input channels we are currently recording from + (Must be less than or equal to DriverInputChannelCount) + + + + + The maximum number of input channels this ASIO driver supports + + + + + The maximum number of output channels this ASIO driver supports + + + + + The number of samples per channel, per buffer. + + + + + By default the first channel on the input WaveProvider is sent to the first ASIO output. + This option sends it to the specified channel number. + Warning: make sure you don't set it higher than the number of available output channels - + the number of source channels. + n.b. Future NAudio may modify this + + + + + Input channel offset (used when recording), allowing you to choose to record from just one + specific input rather than them all + + + + + Sets the volume (1.0 is unity gain) + Not supported for ASIO Out. Set the volume on the input stream instead + + + + + Get the input channel name + + channel index (zero based) + channel name + + + + Get the output channel name + + channel index (zero based) + channel name + + + + https://tech.ebu.ch/docs/tech/tech3285.pdf + + + + + Constructs a new BextChunkInfo + + + + + Description (max 256 chars) + + + + + Originator (max 32 chars) + + + + + Originator Reference (max 32 chars) + + + + + Originator Date Time + + + + + Origination Date as string + + + + + Origination as time + + + + + Time reference (first sample count since midnight) + + + + + version 2 has loudness stuff which we don't know so using version 1 + + + + + 64 bytes http://en.wikipedia.org/wiki/UMID + + + + + for version 2 = 180 bytes (10 before are loudness values), using version 1 = 190 bytes + + + + + Coding history arbitrary length string at end of structure + http://www.ebu.ch/CMSimages/fr/tec_text_r98-1999_tcm7-4709.pdf + A=PCM,F=48000,W=16,M=stereo,T=original,CR/LF + + + + + Broadcast WAVE File Writer + + + + + Createa a new BwfWriter + + Rarget filename + WaveFormat + Chunk information + + + + Write audio data to this BWF + + + + + Flush writer, and fix up header sizes + + + + + Disposes this writer + + + + + A wave file writer that adds cue support + + + + + Writes a wave file, including a cues chunk + + + + + Adds a cue to the Wave file + + Sample position + Label text + + + + Updates the header, and writes the cues out + + + + + NativeDirectSoundOut using DirectSound COM interop. + Contact author: Alexandre Mutel - alexandre_mutel at yahoo.fr + Modified by: Graham "Gee" Plumb + + + + + Playback Stopped + + + + + Gets the DirectSound output devices in the system + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + (40ms seems to work under Vista). + + The latency. + Selected device + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream) + + Position in bytes + + + + Gets the current position from the wave output device. + + + + + Initialise playback + + The waveprovider to be played + + + + Current playback state + + + + + + The volume 1.0 is full scale + + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Determines whether the SecondaryBuffer is lost. + + + true if [is buffer lost]; otherwise, false. + + + + + Convert ms to bytes size according to WaveFormat + + The ms + number of byttes + + + + Processes the samples in a separate thread. + + + + + Stop playback + + + + + Clean up the SecondaryBuffer + + + + In DirectSound, when playback is started, + the rest of the sound that was played last time is played back as noise. + This happens even if the secondary buffer is completely silenced, + so it seems that the buffer in the primary buffer or higher is not cleared. + + + To solve this problem fill the secondary buffer with silence data when stop playback. + + + + + + Feeds the SecondaryBuffer with the WaveStream + + number of bytes to feed + + + + IDirectSound interface + + + + + IDirectSoundBuffer interface + + + + + IDirectSoundNotify interface + + + + + Instanciate DirectSound from the DLL + + The GUID. + The direct sound. + The p unk outer. + + + + DirectSound default playback device GUID + + + + + DirectSound default capture device GUID + + + + + DirectSound default device for voice playback + + + + + DirectSound default device for voice capture + + + + + The DSEnumCallback function is an application-defined callback function that enumerates the DirectSound drivers. + The system calls this function in response to the application's call to the DirectSoundEnumerate or DirectSoundCaptureEnumerate function. + + Address of the GUID that identifies the device being enumerated, or NULL for the primary device. This value can be passed to the DirectSoundCreate8 or DirectSoundCaptureCreate8 function to create a device object for that driver. + Address of a null-terminated string that provides a textual description of the DirectSound device. + Address of a null-terminated string that specifies the module name of the DirectSound driver corresponding to this device. + Address of application-defined data. This is the pointer passed to DirectSoundEnumerate or DirectSoundCaptureEnumerate as the lpContext parameter. + Returns TRUE to continue enumerating drivers, or FALSE to stop. + + + + The DirectSoundEnumerate function enumerates the DirectSound drivers installed in the system. + + callback function + User context + + + + Gets the HANDLE of the desktop window. + + HANDLE of the Desktop window + + + + Class for enumerating DirectSound devices + + + + + The device identifier + + + + + Device description + + + + + Device module name + + + + + IWaveBuffer interface use to store wave datas. + Data can be manipulated with arrays (,, + , ) that are pointing to the same memory buffer. + This is a requirement for all subclasses. + + Use the associated Count property based on the type of buffer to get the number of data in the + buffer. + + for the standard implementation using C# unions. + + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets the byte buffer count. + + The byte buffer count. + + + + Gets the float buffer count. + + The float buffer count. + + + + Gets the short buffer count. + + The short buffer count. + + + + Gets the int buffer count. + + The int buffer count. + + + + Represents the interface to a device that can play a WaveFile + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Initialise playback + + The waveprovider to be played + + + + The volume + 1.0f is full scale + Note that not all implementations necessarily support volume changes + + + + + Current playback state + + + + + Indicates that playback has gone into a stopped state due to + reaching the end of the input stream or an error has been encountered during playback + + + + + Interface for IWavePlayers that can report position + + + + + Position (in terms of bytes played - does not necessarily translate directly to the position within the source audio file) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Generic interface for all WaveProviders. + + + + + Gets the WaveFormat of this WaveProvider. + + The wave format. + + + + Fill the specified buffer with wave data. + + The buffer to fill of wave data. + Offset into buffer + The number of bytes to read + the number of bytes written to the buffer. + + + + Like IWaveProvider, but makes it much simpler to put together a 32 bit floating + point mixing engine + + + + + Gets the WaveFormat of this Sample Provider. + + The wave format. + + + + Fill the specified buffer with 32 bit floating point samples + + The buffer to fill with samples. + Offset into buffer + The number of samples to read + the number of samples written to the buffer. + + + + Media Foundation Encoder class allows you to use Media Foundation to encode an IWaveProvider + to any supported encoding format + + + + + Queries the available bitrates for a given encoding output type, sample rate and number of channels + + Audio subtype - a value from the AudioSubtypes class + The sample rate of the PCM to encode + The number of channels of the PCM to encode + An array of available bitrates in average bits per second + + + + Gets all the available media types for a particular + + Audio subtype - a value from the AudioSubtypes class + An array of available media types that can be encoded with this subtype + + + + Helper function to simplify encoding Window Media Audio + Should be supported on Vista and above (not tested) + + Input provider, must be PCM + Output file path, should end with .wma + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Helper function to simplify encoding to MP3 + By default, will only be available on Windows 8 and above + + Input provider, must be PCM + Output file path, should end with .mp3 + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Helper function to simplify encoding to AAC + By default, will only be available on Windows 7 and above + + Input provider, must be PCM + Output file path, should end with .mp4 (or .aac on Windows 8) + Desired bitrate. Use GetEncodeBitrates to find the possibilities for your input type + + + + Tries to find the encoding media type with the closest bitrate to that specified + + Audio subtype, a value from AudioSubtypes + Your encoder input format (used to check sample rate and channel count) + Your desired bitrate + The closest media type, or null if none available + + + + Creates a new encoder that encodes to the specified output media type + + Desired output media type + + + + Encodes a file + + Output filename (container type is deduced from the filename) + Input provider (should be PCM, some encoders will also allow IEEE float) + + + + Disposes this instance + + + + + + Disposes this instance + + + + + Finalizer + + + + + Playback State + + + + + Stopped + + + + + Playing + + + + + Paused + + + + + Stopped Event Args + + + + + Initializes a new instance of StoppedEventArgs + + An exception to report (null if no exception) + + + + An exception. Will be null if the playback or record operation stopped due to + the user requesting stop or reached the end of the input audio + + + + + Support for playback using Wasapi + + + + + Playback Stopped + + + + + WASAPI Out shared mode, default + + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + Desired latency in milliseconds + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + true if sync is done with event. false use sleep. + Desired latency in milliseconds + + + + Creates a new WASAPI Output + + Device to use + + true if sync is done with event. false use sleep. + Desired latency in milliseconds + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Begin Playback + + + + + Stop playback and flush buffers + + + + + Stop playback without flushing buffers + + + + + Initialize for playing the specified wave stream + + IWaveProvider to play + + + + Playback State + + + + + Volume + + + + + Retrieve the AudioStreamVolume object for this audio stream + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Dispose + + + + + WaveBuffer class use to store wave datas. Data can be manipulated with arrays + (,,, ) that are pointing to the + same memory buffer. Use the associated Count property based on the type of buffer to get the number of + data in the buffer. + Implicit casting is now supported to float[], byte[], int[], short[]. + You must not use Length on returned arrays. + + n.b. FieldOffset is 8 now to allow it to work natively on 64 bit + + + + + Number of Bytes + + + + + Initializes a new instance of the class. + + The number of bytes. The size of the final buffer will be aligned on 4 Bytes (upper bound) + + + + Initializes a new instance of the class binded to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Binds this WaveBuffer instance to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets or sets the byte buffer count. + + The byte buffer count. + + + + Gets or sets the float buffer count. + + The float buffer count. + + + + Gets or sets the short buffer count. + + The short buffer count. + + + + Gets or sets the int buffer count. + + The int buffer count. + + + + Clears the associated buffer. + + + + + Copy this WaveBuffer to a destination buffer up to ByteBufferCount bytes. + + + + + Checks the validity of the count parameters. + + Name of the arg. + The value. + The size of value. + + + + This class writes WAV data to a .wav file on disk + + + + + Creates a 16 bit Wave File from an ISampleProvider + BEWARE: the source provider must not return data indefinitely + + The filename to write to + The source sample provider + + + + Creates a Wave file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + Writes to a stream by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The stream the method will output to + The source WaveProvider + + + + WaveFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new WaveFileWriter + + The filename to write to + The Wave Format of the output data + + + + The wave file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + Total time (calculated from Length and average bytes per second) + + + + + WaveFormat of this wave file + + + + + Returns false: Cannot read from a WaveFileWriter + + + + + Returns true: Can write to a WaveFileWriter + + + + + Returns false: Cannot seek within a WaveFileWriter + + + + + Read is not supported for a WaveFileWriter + + + + + Seek is not supported for a WaveFileWriter + + + + + SetLength is not supported for WaveFileWriter + + + + + + Gets the Position in the WaveFile (i.e. number of bytes written so far) + + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Wave file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Wave file + They will be converted to the appropriate bit depth depending on the WaveFormat of the WAV file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + Also updates header, so that WAV file will be valid up to the point currently written + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this WaveFileWriter + + + + + Alternative WaveOut class, making use of the Event callback + + + + + Indicates playback has stopped automatically + + + + + Gets or sets the desired latency in milliseconds + Should be set before a call to Init + + + + + Gets or sets the number of buffers used + Should be set before a call to Init + + + + + Gets or sets the device number + Should be set before a call to Init + This must be between -1 and DeviceCount - 1. + -1 means stick to default device even default device is changed + + + + + Opens a WaveOut device + + + + + Initialises the WaveOut device + + WaveProvider to play + + + + Start playing the audio from the WaveStream + + + + + Pause the audio + + + + + Resume playing after a pause from the same position + + + + + Stop and reset the WaveOut device + + + + + Gets the current position in bytes from the wave output device. + (n.b. this is not the same thing as the position within your reader + stream - it calls directly into waveOutGetPosition) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Playback State + + + + + Volume for this device 1.0 is full scale + + + + + Closes this WaveOut device + + + + + Closes the WaveOut device and disposes of buffers + + True if called from Dispose + + + + Finalizer. Only called when user forgets to call Dispose + + + + + Provides a buffered store of samples + Read method will return queued samples or fill buffer with zeroes + Now backed by a circular buffer + + + + + Creates a new buffered WaveProvider + + WaveFormat + + + + If true, always read the amount of data requested, padding with zeroes if necessary + By default is set to true + + + + + Buffer length in bytes + + + + + Buffer duration + + + + + If true, when the buffer is full, start throwing away data + if false, AddSamples will throw an exception when buffer is full + + + + + The number of buffered bytes + + + + + Buffered Duration + + + + + Gets the WaveFormat + + + + + Adds samples. Takes a copy of buffer, so that buffer can be reused if necessary + + + + + Reads from this WaveProvider + Will always return count bytes, since we will zero-fill the buffer if not enough available + + + + + Discards all audio from the buffer + + + + + Provide WaveProvider that can apply effects in real time using DMO. + + If the audio thread is running on the STA thread, please generate and operate from the same thread. + If the audio thread is running on the MTA thread, please operate on any MTA thread. + + Types of DMO effectors to use + Parameters of the effect to be used + + + + Create a new DmoEffectWaveProvider + + Input Stream + + + + Stream Wave Format + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Get Effector Parameters + + + + + Dispose + + + + + The Media Foundation Resampler Transform + + + + + Creates the Media Foundation Resampler, allowing modifying of sample rate, bit depth and channel count + + Source provider, must be PCM + Output format, must also be PCM + + + + Creates a resampler with a specified target output sample rate + + Source provider + Output sample rate + + + + Creates and configures the actual Resampler transform + + A newly created and configured resampler MFT + + + + Gets or sets the Resampler quality. n.b. set the quality before starting to resample. + 1 is lowest quality (linear interpolation) and 60 is best quality + + + + + Disposes this resampler + + + + + WaveProvider that can mix together multiple 32 bit floating point input provider + All channels must have the same number of inputs and same sample rate + n.b. Work in Progress - not tested yet + + + + + Creates a new MixingWaveProvider32 + + + + + Creates a new 32 bit MixingWaveProvider32 + + inputs - must all have the same format. + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove an input from the mixer + + waveProvider to remove + + + + The number of inputs to this mixer + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Converts from mono to stereo, allowing freedom to route all, some, or none of the incoming signal to left or right channels + + + + + Creates a new stereo waveprovider based on a mono input + + Mono 16 bit PCM input + + + + 1.0 to copy the mono stream to the left channel without adjusting volume + + + + + 1.0 to copy the mono stream to the right channel without adjusting volume + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels. Number of outputs is equal to total number of channels in inputs + + Input wave providers. Must all be of the same format, but can have any number of channels + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels + + Input wave providers. Must all be of the same format, but can have any number of channels + Desired number of output channels. (-1 means use total number of input channels) + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads data from this WaveProvider + + Buffer to be filled with sample data + Offset to write to within buffer, usually 0 + Number of bytes required + Number of bytes read + + + + The WaveFormat of this WaveProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Silence producing wave provider + Useful for playing silence when doing a WASAPI Loopback Capture + + + + + Creates a new silence producing wave provider + + Desired WaveFormat (should be PCM / IEE float + + + + Read silence from into the buffer + + + + + WaveFormat of this silence producing wave provider + + + + + Takes a stereo 16 bit input and turns it mono, allowing you to select left or right channel only or mix them together + + + + + Creates a new mono waveprovider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Helper class allowing us to modify the volume of a 16 bit stream without converting to IEEE float + + + + + Constructs a new VolumeWaveProvider16 + + Source provider, must be 16 bit PCM + + + + Gets or sets volume. + 1.0 is full scale, 0.0 is silence, anything over 1.0 will amplify but potentially clip + + + + + WaveFormat of this WaveProvider + + + + + Read bytes from this WaveProvider + + Buffer to read into + Offset within buffer to read to + Bytes desired + Bytes read + + + + Converts 16 bit PCM to IEEE float, optionally adjusting volume along the way + + + + + Creates a new Wave16toFloatProvider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts IEEE float to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Creates a new WaveFloatTo16Provider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Buffered WaveProvider taking source data from WaveIn + + + + + Creates a new WaveInProvider + n.b. Should make sure the WaveFormat is set correctly on IWaveIn before calling + + The source of wave data + + + + Reads data from the WaveInProvider + + + + + The WaveFormat + + + + + Base class for creating a 16 bit wave provider + + + + + Initializes a new instance of the WaveProvider16 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider16 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a short array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Base class for creating a 32 bit floating point wave provider + Can also be used as a base class for an ISampleProvider that can + be plugged straight into anything requiring an IWaveProvider + + + + + Initializes a new instance of the WaveProvider32 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider32 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a float array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Utility class to intercept audio from an IWaveProvider and + save it to disk + + + + + Constructs a new WaveRecorder + + The location to write the WAV file to + The Source Wave Provider + + + + Read simply returns what the source returns, but writes to disk along the way + + + + + The WaveFormat + + + + + Closes the WAV file + + + + A read-only stream of AIFF data based on an aiff file + with an associated WaveFormat + originally contributed to NAudio by Giawa + + + + Supports opening a AIF file + The AIF is of similar nastiness to the WAV format. + This supports basic reading of uncompressed PCM AIF files, + with 8, 16, 24 and 32 bit PCM data. + + + + + Creates an Aiff File Reader based on an input stream + + The input stream containing a AIF file including header + + + + Ensures valid AIFF header and then finds data offset. + + The stream, positioned at the start of audio data + The format found + The position of the data chunk + The length of the data chunk + Additional chunks found + + + + Cleans up the resources associated with this AiffFileReader + + + + + + + + + + + + + + + Number of Samples (if possible to calculate) + + + + + Position in the AIFF file + + + + + + Reads bytes from the AIFF File + + + + + + AIFF Chunk + + + + + Chunk Name + + + + + Chunk Length + + + + + Chunk start + + + + + Creates a new AIFF Chunk + + + + + AudioFileReader simplifies opening an audio file in NAudio + Simply pass in the filename, and it will attempt to open the + file and set up a conversion path that turns into PCM IEEE float. + ACM codecs will be used for conversion. + It provides a volume property and implements both WaveStream and + ISampleProvider, making it possibly the only stage in your audio + pipeline necessary for simple playback scenarios + + + + + Initializes a new instance of AudioFileReader + + The file to open + + + + Creates the reader stream, supporting all filetypes in the core NAudio library, + and ensuring we are in PCM format + + File Name + + + + File Name + + + + + WaveFormat of this stream + + + + + Length of this stream (in bytes) + + + + + Position of this stream (in bytes) + + + + + Reads from this wave stream + + Audio buffer + Offset into buffer + Number of bytes required + Number of bytes read + + + + Reads audio from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Gets or Sets the Volume of this AudioFileReader. 1.0f is full volume + + + + + Helper to convert source to dest bytes + + + + + Helper to convert dest to source bytes + + + + + Disposes this AudioFileReader + + True if called from Dispose + + + + Helper stream that lets us read from compressed audio files with large block alignment + as though we could read any amount and reposition anywhere + + + + + Creates a new BlockAlignReductionStream + + the input stream + + + + Block alignment of this stream + + + + + Wave Format + + + + + Length of this Stream + + + + + Current position within stream + + + + + Disposes this WaveStream + + + + + Reads data from this stream + + + + + + + + + Implementation of Com IStream + + + + + Holds information on a cue: a labeled position within a Wave file + + + + + Cue position in samples + + + + + Label of the cue + + + + + Creates a Cue based on a sample position and label + + + + + + + Holds a list of cues + + + The specs for reading and writing cues from the cue and list RIFF chunks + are from http://www.sonicspot.com/guide/wavefiles.html and http://www.wotsit.org/ + ------------------------------ + The cues are stored like this: + ------------------------------ + struct CuePoint + { + Int32 dwIdentifier; + Int32 dwPosition; + Int32 fccChunk; + Int32 dwChunkStart; + Int32 dwBlockStart; + Int32 dwSampleOffset; + } + + struct CueChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwCuePoints; + CuePoint[] points; + } + ------------------------------ + Labels look like this: + ------------------------------ + struct ListHeader + { + Int32 listID; /* 'list' */ + Int32 chunkSize; /* includes the Type ID below */ + Int32 typeID; /* 'adtl' */ + } + + struct LabelChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwIdentifier; + Char[] dwText; /* Encoded with extended ASCII */ + } LabelChunk; + + + + + Creates an empty cue list + + + + + Adds an item to the list + + Cue + + + + Gets sample positions for the embedded cues + + Array containing the cue positions + + + + Gets labels for the embedded cues + + Array containing the labels + + + + Creates a cue list from the cue RIFF chunk and the list RIFF chunk + + The data contained in the cue chunk + The data contained in the list chunk + + + + Gets the cues as the concatenated cue and list RIFF chunks. + + RIFF chunks containing the cue data + + + + Number of cues + + + + + Accesses the cue at the specified index + + + + + + + Checks if the cue and list chunks exist and if so, creates a cue list + + + + + A wave file reader supporting cue reading + + + + + Loads a wavefile and supports reading cues + + + + + + Loads a wave from a stream and supports reading cues + + + + + + Cue List (can be null if cues not present) + + + + + An interface for WaveStreams which can report notification of individual samples + + + + + A sample has been detected + + + + + Sample event arguments + + + + + Left sample + + + + + Right sample + + + + + Constructor + + + + + Class for reading any file that Media Foundation can play + Will only work in Windows Vista and above + Automatically converts to PCM + If it is a video file with multiple audio streams, it will pick out the first audio stream + + + + + Allows customisation of this reader class + + + + + Sets up the default settings for MediaFoundationReader + + + + + Allows us to request IEEE float output (n.b. no guarantee this will be accepted) + + + + + If true, the reader object created in the constructor is used in Read + Should only be set to true if you are working entirely on an STA thread, or + entirely with MTA threads. + + + + + If true, the reposition does not happen immediately, but waits until the + next call to read to be processed. + + + + + Default constructor + + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename (can also be a URL e.g. http:// mms:// file://) + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename + Advanced settings + + + + Initializes + + + + + Creates the reader (overridable by ) + + + + + Reads from this wave stream + + Buffer to read into + Offset in buffer + Bytes required + Number of bytes read; 0 indicates end of stream + + + + WaveFormat of this stream (n.b. this is after converting to PCM) + + + + + The bytesRequired of this stream in bytes (n.b may not be accurate) + + + + + Current position within this stream + + + + + Cleans up after finishing with this reader + + true if called from Dispose + + + + WaveFormat has changed + + + + + Class for reading from MP3 files + + + + + The MP3 wave format (n.b. NOT the output format of this stream - see the WaveFormat property) + + + + Supports opening a MP3 file + + + Supports opening a MP3 file + MP3 File name + Factory method to build a frame decompressor + + + + Opens MP3 from a stream rather than a file + Will not dispose of this stream itself + + The incoming stream containing MP3 data + + + + Opens MP3 from a stream rather than a file + Will not dispose of this stream itself + + The incoming stream containing MP3 data + Factory method to build a frame decompressor + + + + Function that can create an MP3 Frame decompressor + + A WaveFormat object describing the MP3 file format + An MP3 Frame decompressor + + + + Creates an ACM MP3 Frame decompressor. This is the default with NAudio + + A WaveFormat object based + + + + + Gets the total length of this file in milliseconds. + + + + + ID3v2 tag if present + + + + + ID3v1 tag if present + + + + + Reads the next mp3 frame + + Next mp3 frame, or null if EOF + + + + Reads the next mp3 frame + + Next mp3 frame, or null if EOF + + + + This is the length in bytes of data available to be read out from the Read method + (i.e. the decompressed MP3 length) + n.b. this may return 0 for files whose length is unknown + + + + + + + + + + + + + + + Reads decompressed PCM data from our MP3 file. + + + + + Xing header if present + + + + + Disposes this WaveStream + + + + + WaveStream that simply passes on data from its source stream + (e.g. a MemoryStream) + + + + + Initialises a new instance of RawSourceWaveStream + + The source stream containing raw audio + The waveformat of the audio in the source stream + + + + Initialises a new instance of RawSourceWaveStream + + The buffer containing raw audio + Offset in the source buffer to read from + Number of bytes to read in the buffer + The waveformat of the audio in the source stream + + + + The WaveFormat of this stream + + + + + The length in bytes of this stream (if supported) + + + + + The current position in this stream + + + + + Reads data from the stream + + + + + Wave Stream for converting between sample rates + + + + + WaveStream to resample using the DMO Resampler + + Input Stream + Desired Output Format + + + + Stream Wave Format + + + + + Stream length in bytes + + + + + Stream position in bytes + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Dispose + + True if disposing (not from finalizer) + + + + Holds information about a RIFF file chunk + + + + + Creates a RiffChunk object + + + + + The chunk identifier + + + + + The chunk identifier converted to a string + + + + + The chunk length + + + + + The stream position this chunk is located at + + + + + A simple compressor + + + + + Create a new simple compressor stream + + Source stream + + + + Make-up Gain + + + + + Threshold + + + + + Ratio + + + + + Attack time + + + + + Release time + + + + + Turns gain on or off + + + + + Gets the WaveFormat of this stream + + + + + Reads bytes from this stream + + Buffer to read into + Offset in array to read into + Number of bytes to read + Number of bytes read + + + + MediaFoundationReader supporting reading from a stream + + + + + Constructs a new media foundation reader from a stream + + + + + Creates the reader + + + + + WaveStream that converts 32 bit audio back down to 16 bit, clipping if necessary + + + + + The method reuses the same buffer to prevent + unnecessary allocations. + + + + + Creates a new Wave32To16Stream + + the source stream + + + + Sets the volume for this stream. 1.0f is full scale + + + + + + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + Destination buffer + Offset into destination buffer + + Number of bytes read. + + + + Conversion to 16 bit and clipping + + + + + + + + + + Clip indicator. Can be reset. + + + + + Disposes this WaveStream + + + + + Represents Channel for the WaveMixerStream + 32 bit output and 16 bit input + It's output is always stereo + The input stream can be panned + + + + + Creates a new WaveChannel32 + + the source stream + stream volume (1 is 0dB) + pan control (-1 to 1) + + + + Creates a WaveChannel32 with default settings + + The source stream + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + If true, Read always returns the number of bytes requested + + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Pan of this channel (from -1 to 1) + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + Sample + + + + + Raise the sample event (no check for null because it has already been done) + + + + This class supports the reading of WAV files, + providing a repositionable WaveStream that returns the raw data + contained in the WAV file + + + + Supports opening a WAV file + The WAV file format is a real mess, but we will only + support the basic WAV file format which actually covers the vast + majority of WAV files out there. For more WAV file format information + visit www.wotsit.org. If you have a WAV file that can't be read by + this class, email it to the NAudio project and we will probably + fix this reader to support it + + + + + Creates a Wave File Reader based on an input stream + + The input stream containing a WAV file including header + + + + Gets a list of the additional chunks found in this file + + + + + Gets the data for the specified chunk + + + + + Cleans up the resources associated with this WaveFileReader + + + + + + + + + + This is the length of audio data contained in this WAV file, in bytes + (i.e. the byte length of the data chunk, not the length of the WAV file itself) + + + + + + Number of Sample Frames (if possible to calculate) + This currently does not take into account number of channels + Multiply number of channels if you want the total number of samples + + + + + Position in the WAV data chunk. + + + + + + Reads bytes from the Wave File + + + + + + Attempts to read the next sample or group of samples as floating point normalised into the range -1.0f to 1.0f + + An array of samples, 1 for mono, 2 for stereo etc. Null indicates end of file reached + + + + + Attempts to read a sample into a float. n.b. only applicable for uncompressed formats + Will normalise the value read into the range -1.0f to 1.0f if it comes from a PCM encoding + + False if the end of the WAV data chunk was reached + + + + IWaveProvider that passes through an ACM Codec + + + + + Create a new WaveFormat conversion stream + + Desired output format + Source Provider + + + + Gets the WaveFormat of this stream + + + + + Indicates that a reposition has taken place, and internal buffers should be reset + + + + + Reads bytes from this stream + + Buffer to read into + Offset in buffer to read into + Number of bytes to read + Number of bytes read + + + + Disposes this stream + + true if the user called this + + + + Disposes this resource + + + + + Finalizer + + + + + WaveStream that passes through an ACM Codec + + + + + Create a new WaveFormat conversion stream + + Desired output format + Source stream + + + + Creates a stream that can convert to PCM + + The source stream + A PCM stream + + + + Gets or sets the current position in the stream + + + + + Converts source bytes to destination bytes + + + + + Converts destination bytes to source bytes + + + + + Returns the stream length + + + + + Gets the WaveFormat of this stream + + + + + + + Buffer to read into + Offset within buffer to write to + Number of bytes to read + Bytes read + + + + Disposes this stream + + true if the user called this + + + + A buffer of Wave samples + + + + + creates a new wavebuffer + + WaveIn device to write to + Buffer size in bytes + + + + Place this buffer back to record more audio + + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + + Provides access to the actual record buffer (for reading only) + + + + + Indicates whether the Done flag is set on this buffer + + + + + Indicates whether the InQueue flag is set on this buffer + + + + + Number of bytes recorded + + + + + The buffer size in bytes + + + + + WaveStream that can mix together multiple 32 bit input streams + (Normally used with stereo input channels) + All channels must have the same number of inputs + + + + + Creates a new 32 bit WaveMixerStream + + + + + Creates a new 32 bit WaveMixerStream + + An Array of WaveStreams - must all have the same format. + Use WaveChannel is designed for this purpose. + Automatically stop when all inputs have been read + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove a WaveStream from the mixer + + waveStream to remove + + + + The number of inputs to this mixer + + + + + Automatically stop when all inputs have been read + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Length of this Wave Stream (in bytes) + + + + + + Position within this Wave Stream (in bytes) + + + + + + + + + + + Disposes this WaveStream + + + + + Simply shifts the input stream in time, optionally + clipping its start and end. + (n.b. may include looping in the future) + + + + + Creates a new WaveOffsetStream + + the source stream + the time at which we should start reading from the source stream + amount to trim off the front of the source stream + length of time to play from source stream + + + + Creates a WaveOffsetStream with default settings (no offset or pre-delay, + and whole length of source stream) + + The source stream + + + + The length of time before which no audio will be played + + + + + An offset into the source stream from which to start playing + + + + + Length of time to read from the source stream + + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + A buffer of Wave samples for streaming to a Wave Output device + + + + + creates a new wavebuffer + + WaveOut device to write to + Buffer size in bytes + Stream to provide more data + Lock to protect WaveOut API's from being called on >1 thread + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + this is called by the WAVE callback and should be used to refill the buffer + + + + Whether the header's in queue flag is set + + + + + The buffer size in bytes + + + + + Base class for all WaveStream classes. Derives from stream. + + + + + Retrieves the WaveFormat for this stream + + + + + We can read from this stream + + + + + We can seek within this stream + + + + + We can't write to this stream + + + + + Flush does not need to do anything + See + + + + + An alternative way of repositioning. + See + + + + + Sets the length of the WaveStream. Not Supported. + + + + + + Writes to the WaveStream. Not Supported. + + + + + The block alignment for this wavestream. Do not modify the Position + to anything that is not a whole multiple of this value + + + + + Moves forward or backwards the specified number of seconds in the stream + + Number of seconds to move, can be negative + + + + The current position in the stream in Time format + + + + + Total length in real-time of the stream (may be an estimate for compressed files) + + + + + Whether the WaveStream has non-zero sample data at the current position for the + specified count + + Number of bytes to read + + + + MP3 Frame decompressor using the Windows Media MP3 Decoder DMO object + + + + + Initializes a new instance of the DMO MP3 Frame decompressor + + + + + + Converted PCM WaveFormat + + + + + Decompress a single frame of MP3 + + + + + Alerts us that a reposition has occured so the MP3 decoder needs to reset its state + + + + + Dispose of this obejct and clean up resources + + + + + http://tech.ebu.ch/docs/tech/tech3306-2009.pdf + + + + + WaveFormat + + + + + Data Chunk Position + + + + + Data Chunk Length + + + + + Riff Chunks + + + + + Soundfont generator + + + + + Gets the generator type + + + + + Generator amount as an unsigned short + + + + + Generator amount as a signed short + + + + + Low byte amount + + + + + High byte amount + + + + + Instrument + + + + + Sample Header + + + + + + + + + + Generator types + + + + Start address offset + + + End address offset + + + Start loop address offset + + + End loop address offset + + + Start address coarse offset + + + Modulation LFO to pitch + + + Vibrato LFO to pitch + + + Modulation envelope to pitch + + + Initial filter cutoff frequency + + + Initial filter Q + + + Modulation LFO to filter Cutoff frequency + + + Modulation envelope to filter cutoff frequency + + + End address coarse offset + + + Modulation LFO to volume + + + Unused + + + Chorus effects send + + + Reverb effects send + + + Pan + + + Unused + + + Unused + + + Unused + + + Delay modulation LFO + + + Frequency modulation LFO + + + Delay vibrato LFO + + + Frequency vibrato LFO + + + Delay modulation envelope + + + Attack modulation envelope + + + Hold modulation envelope + + + Decay modulation envelope + + + Sustain modulation envelop + + + Release modulation envelope + + + Key number to modulation envelope hold + + + Key number to modulation envelope decay + + + Delay volume envelope + + + Attack volume envelope + + + Hold volume envelope + + + Decay volume envelope + + + Sustain volume envelope + + + Release volume envelope + + + Key number to volume envelope hold + + + Key number to volume envelope decay + + + Instrument + + + Reserved + + + Key range + + + Velocity range + + + Start loop address coarse offset + + + Key number + + + Velocity + + + Initial attenuation + + + Reserved + + + End loop address coarse offset + + + Coarse tune + + + Fine tune + + + Sample ID + + + Sample modes + + + Reserved + + + Scale tuning + + + Exclusive class + + + Overriding root key + + + Unused + + + Unused + + + + A soundfont info chunk + + + + + SoundFont Version + + + + + WaveTable sound engine + + + + + Bank name + + + + + Data ROM + + + + + Creation Date + + + + + Author + + + + + Target Product + + + + + Copyright + + + + + Comments + + + + + Tools + + + + + ROM Version + + + + + + + + + + SoundFont instrument + + + + + instrument name + + + + + Zones + + + + + + + + + + Instrument Builder + + + + + Transform Types + + + + + Linear + + + + + Modulator + + + + + Source Modulation data type + + + + + Destination generator type + + + + + Amount + + + + + Source Modulation Amount Type + + + + + Source Transform Type + + + + + + + + + + Controller Sources + + + + + No Controller + + + + + Note On Velocity + + + + + Note On Key Number + + + + + Poly Pressure + + + + + Channel Pressure + + + + + Pitch Wheel + + + + + Pitch Wheel Sensitivity + + + + + Source Types + + + + + Linear + + + + + Concave + + + + + Convex + + + + + Switch + + + + + Modulator Type + + + + + + + + + + + A SoundFont Preset + + + + + Preset name + + + + + Patch Number + + + + + Bank number + 0 - 127, GM percussion bank is 128 + + + + + Zones + + + + + + + + + + Class to read the SoundFont file presets chunk + + + + + The Presets contained in this chunk + + + + + The instruments contained in this chunk + + + + + The sample headers contained in this chunk + + + + + + + + + + just reads a chunk ID at the current position + + chunk ID + + + + reads a chunk at the current position + + + + + creates a new riffchunk from current position checking that we're not + at the end of this chunk first + + the new chunk + + + + useful for chunks that just contain a string + + chunk as string + + + + A SoundFont Sample Header + + + + + The sample name + + + + + Start offset + + + + + End offset + + + + + Start loop point + + + + + End loop point + + + + + Sample Rate + + + + + Original pitch + + + + + Pitch correction + + + + + Sample Link + + + + + SoundFont Sample Link Type + + + + + + + + + + SoundFont sample modes + + + + + No loop + + + + + Loop Continuously + + + + + Reserved no loop + + + + + Loop and continue + + + + + Sample Link Type + + + + + Mono Sample + + + + + Right Sample + + + + + Left Sample + + + + + Linked Sample + + + + + ROM Mono Sample + + + + + ROM Right Sample + + + + + ROM Left Sample + + + + + ROM Linked Sample + + + + + SoundFont Version Structure + + + + + Major Version + + + + + Minor Version + + + + + Builds a SoundFont version + + + + + Reads a SoundFont Version structure + + + + + Writes a SoundFont Version structure + + + + + Gets the length of this structure + + + + + Represents a SoundFont + + + + + Loads a SoundFont from a file + + Filename of the SoundFont + + + + Loads a SoundFont from a stream + + stream + + + + The File Info Chunk + + + + + The Presets + + + + + The Instruments + + + + + The Sample Headers + + + + + The Sample Data + + + + + + + + + + base class for structures that can read themselves + + + + + A SoundFont zone + + + + + + + + + + Modulators for this Zone + + + + + Generators for this Zone + + + + + Audio Subtype GUIDs + http://msdn.microsoft.com/en-us/library/windows/desktop/aa372553%28v=vs.85%29.aspx + + + + + Advanced Audio Coding (AAC). + + + + + Not used + + + + + Dolby AC-3 audio over Sony/Philips Digital Interface (S/PDIF). + + + + + Encrypted audio data used with secure audio path. + + + + + Digital Theater Systems (DTS) audio. + + + + + Uncompressed IEEE floating-point audio. + + + + + MPEG Audio Layer-3 (MP3). + + + + + MPEG-1 audio payload. + + + + + Windows Media Audio 9 Voice codec. + + + + + Uncompressed PCM audio. + + + + + Windows Media Audio 9 Professional codec over S/PDIF. + + + + + Windows Media Audio 9 Lossless codec or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 8 codec, Windows Media Audio 9 codec, or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 9 Professional codec or Windows Media Audio 9.1 Professional codec. + + + + + Dolby Digital (AC-3). + + + + + MPEG-4 and AAC Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + μ-law coding + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Adaptive delta pulse code modulation (ADPCM) + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Dolby Digital Plus formatted for HDMI output. + http://msdn.microsoft.com/en-us/library/windows/hardware/ff538392(v=vs.85).aspx + Reference : internet + + + + + MSAudio1 - unknown meaning + Reference : wmcodecdsp.h + + + + + IMA ADPCM ACM Wrapper + + + + + WMSP2 - unknown meaning + Reference: wmsdkidl.h + + + + + IMFActivate, defined in mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Creates the object associated with this activation object. + + + + + Shuts down the created object. + + + + + Detaches the created object from the activation object. + + + + + Provides a generic way to store key/value pairs on an object. + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms704598%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + IMFByteStream + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms698720%28v=vs.85%29.aspx + + + + + Retrieves the characteristics of the byte stream. + virtual HRESULT STDMETHODCALLTYPE GetCapabilities(/*[out]*/ __RPC__out DWORD *pdwCapabilities) = 0; + + + + + Retrieves the length of the stream. + virtual HRESULT STDMETHODCALLTYPE GetLength(/*[out]*/ __RPC__out QWORD *pqwLength) = 0; + + + + + Sets the length of the stream. + virtual HRESULT STDMETHODCALLTYPE SetLength(/*[in]*/ QWORD qwLength) = 0; + + + + + Retrieves the current read or write position in the stream. + virtual HRESULT STDMETHODCALLTYPE GetCurrentPosition(/*[out]*/ __RPC__out QWORD *pqwPosition) = 0; + + + + + Sets the current read or write position. + virtual HRESULT STDMETHODCALLTYPE SetCurrentPosition(/*[in]*/ QWORD qwPosition) = 0; + + + + + Queries whether the current position has reached the end of the stream. + virtual HRESULT STDMETHODCALLTYPE IsEndOfStream(/*[out]*/ __RPC__out BOOL *pfEndOfStream) = 0; + + + + + Reads data from the stream. + virtual HRESULT STDMETHODCALLTYPE Read(/*[size_is][out]*/ __RPC__out_ecount_full(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbRead) = 0; + + + + + Begins an asynchronous read operation from the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginRead(/*[out]*/ _Out_writes_bytes_(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous read operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndRead(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbRead) = 0; + + + + + Writes data to the stream. + virtual HRESULT STDMETHODCALLTYPE Write(/*[size_is][in]*/ __RPC__in_ecount_full(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbWritten) = 0; + + + + + Begins an asynchronous write operation to the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginWrite(/*[in]*/ _In_reads_bytes_(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous write operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndWrite(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbWritten) = 0; + + + + + Moves the current position in the stream by a specified offset. + virtual HRESULT STDMETHODCALLTYPE Seek(/*[in]*/ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, /*[in]*/ LONGLONG llSeekOffset, /*[in]*/ DWORD dwSeekFlags, /*[out]*/ __RPC__out QWORD *pqwCurrentPosition) = 0; + + + + + Clears any internal buffers used by the stream. + virtual HRESULT STDMETHODCALLTYPE Flush( void) = 0; + + + + + Closes the stream and releases any resources associated with the stream. + virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; + + + + + Represents a generic collection of IUnknown pointers. + + + + + Retrieves the number of objects in the collection. + + + + + Retrieves an object in the collection. + + + + + Adds an object to the collection. + + + + + Removes an object from the collection. + + + + + Removes an object from the collection. + + + + + Removes all items from the collection. + + + + + IMFMediaBuffer + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms696261%28v=vs.85%29.aspx + + + + + Gives the caller access to the memory in the buffer. + + + + + Unlocks a buffer that was previously locked. + + + + + Retrieves the length of the valid data in the buffer. + + + + + Sets the length of the valid data in the buffer. + + + + + Retrieves the allocated size of the buffer. + + + + + IMFMediaEvent - Represents an event generated by a Media Foundation object. Use this interface to get information about the event. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms702249%28v=vs.85%29.aspx + Mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the event type. + + + virtual HRESULT STDMETHODCALLTYPE GetType( + /* [out] */ __RPC__out MediaEventType *pmet) = 0; + + + + + Retrieves the extended type of the event. + + + virtual HRESULT STDMETHODCALLTYPE GetExtendedType( + /* [out] */ __RPC__out GUID *pguidExtendedType) = 0; + + + + + Retrieves an HRESULT that specifies the event status. + + + virtual HRESULT STDMETHODCALLTYPE GetStatus( + /* [out] */ __RPC__out HRESULT *phrStatus) = 0; + + + + + Retrieves the value associated with the event, if any. + + + virtual HRESULT STDMETHODCALLTYPE GetValue( + /* [out] */ __RPC__out PROPVARIANT *pvValue) = 0; + + + + + Represents a description of a media format. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms704850%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the major type of the format. + + + + + Queries whether the media type is a compressed format. + + + + + Compares two media types and determines whether they are identical. + + + + + Retrieves an alternative representation of the media type. + + + + + Frees memory that was allocated by the GetRepresentation method. + + + + + Creates an instance of either the sink writer or the source reader. + + + + + Creates an instance of the sink writer or source reader, given a URL. + + + + + Creates an instance of the sink writer or source reader, given an IUnknown pointer. + + + + + CLSID_MFReadWriteClassFactory + + + + + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms702192%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves flags associated with the sample. + + + + + Sets flags associated with the sample. + + + + + Retrieves the presentation time of the sample. + + + + + Sets the presentation time of the sample. + + + + + Retrieves the duration of the sample. + + + + + Sets the duration of the sample. + + + + + Retrieves the number of buffers in the sample. + + + + + Retrieves a buffer from the sample. + + + + + Converts a sample with multiple buffers into a sample with a single buffer. + + + + + Adds a buffer to the end of the list of buffers in the sample. + + + + + Removes a buffer at a specified index from the sample. + + + + + Removes all buffers from the sample. + + + + + Retrieves the total length of the valid data in all of the buffers in the sample. + + + + + Copies the sample data to a buffer. + + + + + Implemented by the Microsoft Media Foundation sink writer object. + + + + + Adds a stream to the sink writer. + + + + + Sets the input format for a stream on the sink writer. + + + + + Initializes the sink writer for writing. + + + + + Delivers a sample to the sink writer. + + + + + Indicates a gap in an input stream. + + + + + Places a marker in the specified stream. + + + + + Notifies the media sink that a stream has reached the end of a segment. + + + + + Flushes one or more streams. + + + + + (Finalize) Completes all writing operations on the sink writer. + + + + + Queries the underlying media sink or encoder for an interface. + + + + + Gets statistics about the performance of the sink writer. + + + + + IMFSourceReader interface + http://msdn.microsoft.com/en-us/library/windows/desktop/dd374655%28v=vs.85%29.aspx + + + + + Queries whether a stream is selected. + + + + + Selects or deselects one or more streams. + + + + + Gets a format that is supported natively by the media source. + + + + + Gets the current media type for a stream. + + + + + Sets the media type for a stream. + + + + + Seeks to a new position in the media source. + + + + + Reads the next sample from the media source. + + + + + Flushes one or more streams. + + + + + Queries the underlying media source or decoder for an interface. + + + + + Gets an attribute from the underlying media source. + + + + + Contains flags that indicate the status of the IMFSourceReader::ReadSample method + http://msdn.microsoft.com/en-us/library/windows/desktop/dd375773(v=vs.85).aspx + + + + + No Error + + + + + An error occurred. If you receive this flag, do not make any further calls to IMFSourceReader methods. + + + + + The source reader reached the end of the stream. + + + + + One or more new streams were created + + + + + The native format has changed for one or more streams. The native format is the format delivered by the media source before any decoders are inserted. + + + + + The current media has type changed for one or more streams. To get the current media type, call the IMFSourceReader::GetCurrentMediaType method. + + + + + There is a gap in the stream. This flag corresponds to an MEStreamTick event from the media source. + + + + + All transforms inserted by the application have been removed for a particular stream. + + + + + IMFTransform, defined in mftransform.h + + + + + Retrieves the minimum and maximum number of input and output streams. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamLimits( + /* [out] */ __RPC__out DWORD *pdwInputMinimum, + /* [out] */ __RPC__out DWORD *pdwInputMaximum, + /* [out] */ __RPC__out DWORD *pdwOutputMinimum, + /* [out] */ __RPC__out DWORD *pdwOutputMaximum) = 0; + + + + + Retrieves the current number of input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamCount( + /* [out] */ __RPC__out DWORD *pcInputStreams, + /* [out] */ __RPC__out DWORD *pcOutputStreams) = 0; + + + + + Retrieves the stream identifiers for the input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamIDs( + DWORD dwInputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwInputIDArraySize) DWORD *pdwInputIDs, + DWORD dwOutputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwOutputIDArraySize) DWORD *pdwOutputIDs) = 0; + + + + + Gets the buffer requirements and other information for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamInfo( + DWORD dwInputStreamID, + /* [out] */ __RPC__out MFT_INPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the buffer requirements and other information for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamInfo( + DWORD dwOutputStreamID, + /* [out] */ __RPC__out MFT_OUTPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the global attribute store for this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetAttributes( + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an input stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamAttributes( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamAttributes( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Removes an input stream from this MFT. + + + virtual HRESULT STDMETHODCALLTYPE DeleteInputStream( + DWORD dwStreamID) = 0; + + + + + Adds one or more new input streams to this MFT. + + + virtual HRESULT STDMETHODCALLTYPE AddInputStreams( + DWORD cStreams, + /* [in] */ __RPC__in DWORD *adwStreamIDs) = 0; + + + + + Gets an available media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputAvailableType( + DWORD dwInputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Retrieves an available media type for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputAvailableType( + DWORD dwOutputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Sets, tests, or clears the media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetInputType( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Sets, tests, or clears the media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetOutputType( + DWORD dwOutputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Gets the current media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputCurrentType( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Gets the current media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputCurrentType( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Queries whether an input stream on this Media Foundation transform (MFT) can accept more data. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStatus( + DWORD dwInputStreamID, + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Queries whether the Media Foundation transform (MFT) is ready to produce output data. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStatus( + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Sets the range of time stamps the client needs for output. + + + virtual HRESULT STDMETHODCALLTYPE SetOutputBounds( + LONGLONG hnsLowerBound, + LONGLONG hnsUpperBound) = 0; + + + + + Sends an event to an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessEvent( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaEvent *pEvent) = 0; + + + + + Sends a message to the Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessMessage( + MFT_MESSAGE_TYPE eMessage, + ULONG_PTR ulParam) = 0; + + + + + Delivers data to an input stream on this Media Foundation transform (MFT). + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessInput( + DWORD dwInputStreamID, + IMFSample *pSample, + DWORD dwFlags) = 0; + + + + + Generates output from the current input data. + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessOutput( + DWORD dwFlags, + DWORD cOutputBufferCount, + /* [size_is][out][in] */ MFT_OUTPUT_DATA_BUFFER *pOutputSamples, + /* [out] */ DWORD *pdwStatus) = 0; + + + + + See mfobjects.h + + + + + Unknown event type. + + + + + Signals a serious error. + + + + + Custom event type. + + + + + A non-fatal error occurred during streaming. + + + + + Session Unknown + + + + + Raised after the IMFMediaSession::SetTopology method completes asynchronously + + + + + Raised by the Media Session when the IMFMediaSession::ClearTopologies method completes asynchronously. + + + + + Raised when the IMFMediaSession::Start method completes asynchronously. + + + + + Raised when the IMFMediaSession::Pause method completes asynchronously. + + + + + Raised when the IMFMediaSession::Stop method completes asynchronously. + + + + + Raised when the IMFMediaSession::Close method completes asynchronously. + + + + + Raised by the Media Session when it has finished playing the last presentation in the playback queue. + + + + + Raised by the Media Session when the playback rate changes. + + + + + Raised by the Media Session when it completes a scrubbing request. + + + + + Raised by the Media Session when the session capabilities change. + + + + + Raised by the Media Session when the status of a topology changes. + + + + + Raised by the Media Session when a new presentation starts. + + + + + Raised by a media source a new presentation is ready. + + + + + License acquisition is about to begin. + + + + + License acquisition is complete. + + + + + Individualization is about to begin. + + + + + Individualization is complete. + + + + + Signals the progress of a content enabler object. + + + + + A content enabler object's action is complete. + + + + + Raised by a trusted output if an error occurs while enforcing the output policy. + + + + + Contains status information about the enforcement of an output policy. + + + + + A media source started to buffer data. + + + + + A media source stopped buffering data. + + + + + The network source started opening a URL. + + + + + The network source finished opening a URL. + + + + + Raised by a media source at the start of a reconnection attempt. + + + + + Raised by a media source at the end of a reconnection attempt. + + + + + Raised by the enhanced video renderer (EVR) when it receives a user event from the presenter. + + + + + Raised by the Media Session when the format changes on a media sink. + + + + + Source Unknown + + + + + Raised when a media source starts without seeking. + + + + + Raised by a media stream when the source starts without seeking. + + + + + Raised when a media source seeks to a new position. + + + + + Raised by a media stream after a call to IMFMediaSource::Start causes a seek in the stream. + + + + + Raised by a media source when it starts a new stream. + + + + + Raised by a media source when it restarts or seeks a stream that is already active. + + + + + Raised by a media source when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media source when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media source when a presentation ends. + + + + + Raised by a media stream when the stream ends. + + + + + Raised when a media stream delivers a new sample. + + + + + Signals that a media stream does not have data available at a specified time. + + + + + Raised by a media stream when it starts or stops thinning the stream. + + + + + Raised by a media stream when the media type of the stream changes. + + + + + Raised by a media source when the playback rate changes. + + + + + Raised by the sequencer source when a segment is completed and is followed by another segment. + + + + + Raised by a media source when the source's characteristics change. + + + + + Raised by a media source to request a new playback rate. + + + + + Raised by a media source when it updates its metadata. + + + + + Raised by the sequencer source when the IMFSequencerSource::UpdateTopology method completes asynchronously. + + + + + Sink Unknown + + + + + Raised by a stream sink when it completes the transition to the running state. + + + + + Raised by a stream sink when it completes the transition to the stopped state. + + + + + Raised by a stream sink when it completes the transition to the paused state. + + + + + Raised by a stream sink when the rate has changed. + + + + + Raised by a stream sink to request a new media sample from the pipeline. + + + + + Raised by a stream sink after the IMFStreamSink::PlaceMarker method is called. + + + + + Raised by a stream sink when the stream has received enough preroll data to begin rendering. + + + + + Raised by a stream sink when it completes a scrubbing request. + + + + + Raised by a stream sink when the sink's media type is no longer valid. + + + + + Raised by the stream sinks of the EVR if the video device changes. + + + + + Provides feedback about playback quality to the quality manager. + + + + + Raised when a media sink becomes invalid. + + + + + The audio session display name changed. + + + + + The volume or mute state of the audio session changed + + + + + The audio device was removed. + + + + + The Windows audio server system was shut down. + + + + + The grouping parameters changed for the audio session. + + + + + The audio session icon changed. + + + + + The default audio format for the audio device changed. + + + + + The audio session was disconnected from a Windows Terminal Services session + + + + + The audio session was preempted by an exclusive-mode connection. + + + + + Trust Unknown + + + + + The output policy for a stream changed. + + + + + Content protection message + + + + + The IMFOutputTrustAuthority::SetPolicy method completed. + + + + + DRM License Backup Completed + + + + + DRM License Backup Progress + + + + + DRM License Restore Completed + + + + + DRM License Restore Progress + + + + + DRM License Acquisition Completed + + + + + DRM Individualization Completed + + + + + DRM Individualization Progress + + + + + DRM Proximity Completed + + + + + DRM License Store Cleaned + + + + + DRM Revocation Download Completed + + + + + Transform Unknown + + + + + Sent by an asynchronous MFT to request a new input sample. + + + + + Sent by an asynchronous MFT when new output data is available from the MFT. + + + + + Sent by an asynchronous Media Foundation transform (MFT) when a drain operation is complete. + + + + + Sent by an asynchronous MFT in response to an MFT_MESSAGE_COMMAND_MARKER message. + + + + + Media Foundation attribute guids + http://msdn.microsoft.com/en-us/library/windows/desktop/ms696989%28v=vs.85%29.aspx + + + + + Specifies whether an MFT performs asynchronous processing. + + + + + Enables the use of an asynchronous MFT. + + + + + Contains flags for an MFT activation object. + + + + + Specifies the category for an MFT. + + + + + Contains the class identifier (CLSID) of an MFT. + + + + + Contains the registered input types for a Media Foundation transform (MFT). + + + + + Contains the registered output types for a Media Foundation transform (MFT). + + + + + Contains the symbolic link for a hardware-based MFT. + + + + + Contains the display name for a hardware-based MFT. + + + + + Contains a pointer to the stream attributes of the connected stream on a hardware-based MFT. + + + + + Specifies whether a hardware-based MFT is connected to another hardware-based MFT. + + + + + Specifies the preferred output format for an encoder. + + + + + Specifies whether an MFT is registered only in the application's process. + + + + + Contains configuration properties for an encoder. + + + + + Specifies whether a hardware device source uses the system time for time stamps. + + + + + Contains an IMFFieldOfUseMFTUnlock pointer, which can be used to unlock the MFT. + + + + + Contains the merit value of a hardware codec. + + + + + Specifies whether a decoder is optimized for transcoding rather than for playback. + + + + + Contains a pointer to the proxy object for the application's presentation descriptor. + + + + + Contains a pointer to the presentation descriptor from the protected media path (PMP). + + + + + Specifies the duration of a presentation, in 100-nanosecond units. + + + + + Specifies the total size of the source file, in bytes. + + + + + Specifies the audio encoding bit rate for the presentation, in bits per second. + + + + + Specifies the video encoding bit rate for the presentation, in bits per second. + + + + + Specifies the MIME type of the content. + + + + + Specifies when a presentation was last modified. + + + + + The identifier of the playlist element in the presentation. + + + + + Contains the preferred RFC 1766 language of the media source. + + + + + The time at which the presentation must begin, relative to the start of the media source. + + + + + Specifies whether the audio streams in the presentation have a variable bit rate. + + + + + Media type Major Type + + + + + Media Type subtype + + + + + Audio block alignment + + + + + Audio average bytes per second + + + + + Audio number of channels + + + + + Audio samples per second + + + + + Audio bits per sample + + + + + Enables the source reader or sink writer to use hardware-based Media Foundation transforms (MFTs). + + + + + Contains additional format data for a media type. + + + + + Specifies for a media type whether each sample is independent of the other samples in the stream. + + + + + Specifies for a media type whether the samples have a fixed size. + + + + + Contains a DirectShow format GUID for a media type. + + + + + Specifies the preferred legacy format structure to use when converting an audio media type. + + + + + Specifies for a media type whether the media data is compressed. + + + + + Approximate data rate of the video stream, in bits per second, for a video media type. + + + + + Specifies the payload type of an Advanced Audio Coding (AAC) stream. + 0 - The stream contains raw_data_block elements only + 1 - Audio Data Transport Stream (ADTS). The stream contains an adts_sequence, as defined by MPEG-2. + 2 - Audio Data Interchange Format (ADIF). The stream contains an adif_sequence, as defined by MPEG-2. + 3 - The stream contains an MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + + + + + Specifies the audio profile and level of an Advanced Audio Coding (AAC) stream, as defined by ISO/IEC 14496-3. + + + + + Media Foundation Errors + + + + RANGES + 14000 - 14999 = General Media Foundation errors + 15000 - 15999 = ASF parsing errors + 16000 - 16999 = Media Source errors + 17000 - 17999 = MEDIAFOUNDATION Network Error Events + 18000 - 18999 = MEDIAFOUNDATION WMContainer Error Events + 19000 - 19999 = MEDIAFOUNDATION Media Sink Error Events + 20000 - 20999 = Renderer errors + 21000 - 21999 = Topology Errors + 25000 - 25999 = Timeline Errors + 26000 - 26999 = Unused + 28000 - 28999 = Transform errors + 29000 - 29999 = Content Protection errors + 40000 - 40999 = Clock errors + 41000 - 41999 = MF Quality Management Errors + 42000 - 42999 = MF Transcode API Errors + + + + + MessageId: MF_E_PLATFORM_NOT_INITIALIZED + + MessageText: + + Platform not initialized. Please call MFStartup().%0 + + + + + MessageId: MF_E_BUFFERTOOSMALL + + MessageText: + + The buffer was too small to carry out the requested action.%0 + + + + + MessageId: MF_E_INVALIDREQUEST + + MessageText: + + The request is invalid in the current state.%0 + + + + + MessageId: MF_E_INVALIDSTREAMNUMBER + + MessageText: + + The stream number provided was invalid.%0 + + + + + MessageId: MF_E_INVALIDMEDIATYPE + + MessageText: + + The data specified for the media type is invalid, inconsistent, or not supported by this object.%0 + + + + + MessageId: MF_E_NOTACCEPTING + + MessageText: + + The callee is currently not accepting further input.%0 + + + + + MessageId: MF_E_NOT_INITIALIZED + + MessageText: + + This object needs to be initialized before the requested operation can be carried out.%0 + + + + + MessageId: MF_E_UNSUPPORTED_REPRESENTATION + + MessageText: + + The requested representation is not supported by this object.%0 + + + + + MessageId: MF_E_NO_MORE_TYPES + + MessageText: + + An object ran out of media types to suggest therefore the requested chain of streaming objects cannot be completed.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SERVICE + + MessageText: + + The object does not support the specified service.%0 + + + + + MessageId: MF_E_UNEXPECTED + + MessageText: + + An unexpected error has occurred in the operation requested.%0 + + + + + MessageId: MF_E_INVALIDNAME + + MessageText: + + Invalid name.%0 + + + + + MessageId: MF_E_INVALIDTYPE + + MessageText: + + Invalid type.%0 + + + + + MessageId: MF_E_INVALID_FILE_FORMAT + + MessageText: + + The file does not conform to the relevant file format specification. + + + + + MessageId: MF_E_INVALIDINDEX + + MessageText: + + Invalid index.%0 + + + + + MessageId: MF_E_INVALID_TIMESTAMP + + MessageText: + + An invalid timestamp was given.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SCHEME + + MessageText: + + The scheme of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_BYTESTREAM_TYPE + + MessageText: + + The byte stream type of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_TIME_FORMAT + + MessageText: + + The given time format is unsupported.%0 + + + + + MessageId: MF_E_NO_SAMPLE_TIMESTAMP + + MessageText: + + The Media Sample does not have a timestamp.%0 + + + + + MessageId: MF_E_NO_SAMPLE_DURATION + + MessageText: + + The Media Sample does not have a duration.%0 + + + + + MessageId: MF_E_INVALID_STREAM_DATA + + MessageText: + + The request failed because the data in the stream is corrupt.%0\n. + + + + + MessageId: MF_E_RT_UNAVAILABLE + + MessageText: + + Real time services are not available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE + + MessageText: + + The specified rate is not supported.%0 + + + + + MessageId: MF_E_THINNING_UNSUPPORTED + + MessageText: + + This component does not support stream-thinning.%0 + + + + + MessageId: MF_E_REVERSE_UNSUPPORTED + + MessageText: + + The call failed because no reverse playback rates are available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE_TRANSITION + + MessageText: + + The requested rate transition cannot occur in the current state.%0 + + + + + MessageId: MF_E_RATE_CHANGE_PREEMPTED + + MessageText: + + The requested rate change has been pre-empted and will not occur.%0 + + + + + MessageId: MF_E_NOT_FOUND + + MessageText: + + The specified object or value does not exist.%0 + + + + + MessageId: MF_E_NOT_AVAILABLE + + MessageText: + + The requested value is not available.%0 + + + + + MessageId: MF_E_NO_CLOCK + + MessageText: + + The specified operation requires a clock and no clock is available.%0 + + + + + MessageId: MF_S_MULTIPLE_BEGIN + + MessageText: + + This callback and state had already been passed in to this event generator earlier.%0 + + + + + MessageId: MF_E_MULTIPLE_BEGIN + + MessageText: + + This callback has already been passed in to this event generator.%0 + + + + + MessageId: MF_E_MULTIPLE_SUBSCRIBERS + + MessageText: + + Some component is already listening to events on this event generator.%0 + + + + + MessageId: MF_E_TIMER_ORPHANED + + MessageText: + + This timer was orphaned before its callback time arrived.%0 + + + + + MessageId: MF_E_STATE_TRANSITION_PENDING + + MessageText: + + A state transition is already pending.%0 + + + + + MessageId: MF_E_UNSUPPORTED_STATE_TRANSITION + + MessageText: + + The requested state transition is unsupported.%0 + + + + + MessageId: MF_E_UNRECOVERABLE_ERROR_OCCURRED + + MessageText: + + An unrecoverable error has occurred.%0 + + + + + MessageId: MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS + + MessageText: + + The provided sample has too many buffers.%0 + + + + + MessageId: MF_E_SAMPLE_NOT_WRITABLE + + MessageText: + + The provided sample is not writable.%0 + + + + + MessageId: MF_E_INVALID_KEY + + MessageText: + + The specified key is not valid. + + + + + MessageId: MF_E_BAD_STARTUP_VERSION + + MessageText: + + You are calling MFStartup with the wrong MF_VERSION. Mismatched bits? + + + + + MessageId: MF_E_UNSUPPORTED_CAPTION + + MessageText: + + The caption of the given URL is unsupported.%0 + + + + + MessageId: MF_E_INVALID_POSITION + + MessageText: + + The operation on the current offset is not permitted.%0 + + + + + MessageId: MF_E_ATTRIBUTENOTFOUND + + MessageText: + + The requested attribute was not found.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_ALLOWED + + MessageText: + + The specified property type is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_SUPPORTED + + MessageText: + + The specified property type is not supported.%0 + + + + + MessageId: MF_E_PROPERTY_EMPTY + + MessageText: + + The specified property is empty.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_EMPTY + + MessageText: + + The specified property is not empty.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_NOT_ALLOWED + + MessageText: + + The vector property specified is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_REQUIRED + + MessageText: + + A vector property is required in this context.%0 + + + + + MessageId: MF_E_OPERATION_CANCELLED + + MessageText: + + The operation is cancelled.%0 + + + + + MessageId: MF_E_BYTESTREAM_NOT_SEEKABLE + + MessageText: + + The provided bytestream was expected to be seekable and it is not.%0 + + + + + MessageId: MF_E_DISABLED_IN_SAFEMODE + + MessageText: + + The Media Foundation platform is disabled when the system is running in Safe Mode.%0 + + + + + MessageId: MF_E_CANNOT_PARSE_BYTESTREAM + + MessageText: + + The Media Source could not parse the byte stream.%0 + + + + + MessageId: MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS + + MessageText: + + Mutually exclusive flags have been specified to source resolver. This flag combination is invalid.%0 + + + + + MessageId: MF_E_MEDIAPROC_WRONGSTATE + + MessageText: + + MediaProc is in the wrong state%0 + + + + + MessageId: MF_E_RT_THROUGHPUT_NOT_AVAILABLE + + MessageText: + + Real time I/O service can not provide requested throughput.%0 + + + + + MessageId: MF_E_RT_TOO_MANY_CLASSES + + MessageText: + + The workqueue cannot be registered with more classes.%0 + + + + + MessageId: MF_E_RT_WOULDBLOCK + + MessageText: + + This operation cannot succeed because another thread owns this object.%0 + + + + + MessageId: MF_E_NO_BITPUMP + + MessageText: + + Internal. Bitpump not found.%0 + + + + + MessageId: MF_E_RT_OUTOFMEMORY + + MessageText: + + No more RT memory available.%0 + + + + + MessageId: MF_E_RT_WORKQUEUE_CLASS_NOT_SPECIFIED + + MessageText: + + An MMCSS class has not been set for this work queue.%0 + + + + + MessageId: MF_E_INSUFFICIENT_BUFFER + + MessageText: + + Insufficient memory for response.%0 + + + + + MessageId: MF_E_CANNOT_CREATE_SINK + + MessageText: + + Activate failed to create mediasink. Call OutputNode::GetUINT32(MF_TOPONODE_MAJORTYPE) for more information. %0 + + + + + MessageId: MF_E_BYTESTREAM_UNKNOWN_LENGTH + + MessageText: + + The length of the provided bytestream is unknown.%0 + + + + + MessageId: MF_E_SESSION_PAUSEWHILESTOPPED + + MessageText: + + The media session cannot pause from a stopped state.%0 + + + + + MessageId: MF_S_ACTIVATE_REPLACED + + MessageText: + + The activate could not be created in the remote process for some reason it was replaced with empty one.%0 + + + + + MessageId: MF_E_FORMAT_CHANGE_NOT_SUPPORTED + + MessageText: + + The data specified for the media type is supported, but would require a format change, which is not supported by this object.%0 + + + + + MessageId: MF_E_INVALID_WORKQUEUE + + MessageText: + + The operation failed because an invalid combination of workqueue ID and flags was specified.%0 + + + + + MessageId: MF_E_DRM_UNSUPPORTED + + MessageText: + + No DRM support is available.%0 + + + + + MessageId: MF_E_UNAUTHORIZED + + MessageText: + + This operation is not authorized.%0 + + + + + MessageId: MF_E_OUT_OF_RANGE + + MessageText: + + The value is not in the specified or valid range.%0 + + + + + MessageId: MF_E_INVALID_CODEC_MERIT + + MessageText: + + The registered codec merit is not valid.%0 + + + + + MessageId: MF_E_HW_MFT_FAILED_START_STREAMING + + MessageText: + + Hardware MFT failed to start streaming due to lack of hardware resources.%0 + + + + + MessageId: MF_S_ASF_PARSEINPROGRESS + + MessageText: + + Parsing is still in progress and is not yet complete.%0 + + + + + MessageId: MF_E_ASF_PARSINGINCOMPLETE + + MessageText: + + Not enough data have been parsed to carry out the requested action.%0 + + + + + MessageId: MF_E_ASF_MISSINGDATA + + MessageText: + + There is a gap in the ASF data provided.%0 + + + + + MessageId: MF_E_ASF_INVALIDDATA + + MessageText: + + The data provided are not valid ASF.%0 + + + + + MessageId: MF_E_ASF_OPAQUEPACKET + + MessageText: + + The packet is opaque, so the requested information cannot be returned.%0 + + + + + MessageId: MF_E_ASF_NOINDEX + + MessageText: + + The requested operation failed since there is no appropriate ASF index.%0 + + + + + MessageId: MF_E_ASF_OUTOFRANGE + + MessageText: + + The value supplied is out of range for this operation.%0 + + + + + MessageId: MF_E_ASF_INDEXNOTLOADED + + MessageText: + + The index entry requested needs to be loaded before it can be available.%0 + + + + + MessageId: MF_E_ASF_TOO_MANY_PAYLOADS + + MessageText: + + The packet has reached the maximum number of payloads.%0 + + + + + MessageId: MF_E_ASF_UNSUPPORTED_STREAM_TYPE + + MessageText: + + Stream type is not supported.%0 + + + + + MessageId: MF_E_ASF_DROPPED_PACKET + + MessageText: + + One or more ASF packets were dropped.%0 + + + + + MessageId: MF_E_NO_EVENTS_AVAILABLE + + MessageText: + + There are no events available in the queue.%0 + + + + + MessageId: MF_E_INVALID_STATE_TRANSITION + + MessageText: + + A media source cannot go from the stopped state to the paused state.%0 + + + + + MessageId: MF_E_END_OF_STREAM + + MessageText: + + The media stream cannot process any more samples because there are no more samples in the stream.%0 + + + + + MessageId: MF_E_SHUTDOWN + + MessageText: + + The request is invalid because Shutdown() has been called.%0 + + + + + MessageId: MF_E_MP3_NOTFOUND + + MessageText: + + The MP3 object was not found.%0 + + + + + MessageId: MF_E_MP3_OUTOFDATA + + MessageText: + + The MP3 parser ran out of data before finding the MP3 object.%0 + + + + + MessageId: MF_E_MP3_NOTMP3 + + MessageText: + + The file is not really a MP3 file.%0 + + + + + MessageId: MF_E_MP3_NOTSUPPORTED + + MessageText: + + The MP3 file is not supported.%0 + + + + + MessageId: MF_E_NO_DURATION + + MessageText: + + The Media stream has no duration.%0 + + + + + MessageId: MF_E_INVALID_FORMAT + + MessageText: + + The Media format is recognized but is invalid.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_FOUND + + MessageText: + + The property requested was not found.%0 + + + + + MessageId: MF_E_PROPERTY_READ_ONLY + + MessageText: + + The property is read only.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_ALLOWED + + MessageText: + + The specified property is not allowed in this context.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NOT_STARTED + + MessageText: + + The media source is not started.%0 + + + + + MessageId: MF_E_UNSUPPORTED_FORMAT + + MessageText: + + The Media format is recognized but not supported.%0 + + + + + MessageId: MF_E_MP3_BAD_CRC + + MessageText: + + The MPEG frame has bad CRC.%0 + + + + + MessageId: MF_E_NOT_PROTECTED + + MessageText: + + The file is not protected.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_WRONGSTATE + + MessageText: + + The media source is in the wrong state%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED + + MessageText: + + No streams are selected in source presentation descriptor.%0 + + + + + MessageId: MF_E_CANNOT_FIND_KEYFRAME_SAMPLE + + MessageText: + + No key frame sample was found.%0 + + + + + MessageId: MF_E_NETWORK_RESOURCE_FAILURE + + MessageText: + + An attempt to acquire a network resource failed.%0 + + + + + MessageId: MF_E_NET_WRITE + + MessageText: + + Error writing to the network.%0 + + + + + MessageId: MF_E_NET_READ + + MessageText: + + Error reading from the network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_NETWORK + + MessageText: + + Internal. Entry cannot complete operation without network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_ASYNC + + MessageText: + + Internal. Async op is required.%0 + + + + + MessageId: MF_E_NET_BWLEVEL_NOT_SUPPORTED + + MessageText: + + Internal. Bandwidth levels are not supported.%0 + + + + + MessageId: MF_E_NET_STREAMGROUPS_NOT_SUPPORTED + + MessageText: + + Internal. Stream groups are not supported.%0 + + + + + MessageId: MF_E_NET_MANUALSS_NOT_SUPPORTED + + MessageText: + + Manual stream selection is not supported.%0 + + + + + MessageId: MF_E_NET_INVALID_PRESENTATION_DESCRIPTOR + + MessageText: + + Invalid presentation descriptor.%0 + + + + + MessageId: MF_E_NET_CACHESTREAM_NOT_FOUND + + MessageText: + + Cannot find cache stream.%0 + + + + + MessageId: MF_I_MANUAL_PROXY + + MessageText: + + The proxy setting is manual.%0 + + + + duplicate removed + MessageId=17011 Severity=Informational Facility=MEDIAFOUNDATION SymbolicName=MF_E_INVALID_REQUEST + Language=English + The request is invalid in the current state.%0 + . + + MessageId: MF_E_NET_REQUIRE_INPUT + + MessageText: + + Internal. Entry cannot complete operation without input.%0 + + + + + MessageId: MF_E_NET_REDIRECT + + MessageText: + + The client redirected to another server.%0 + + + + + MessageId: MF_E_NET_REDIRECT_TO_PROXY + + MessageText: + + The client is redirected to a proxy server.%0 + + + + + MessageId: MF_E_NET_TOO_MANY_REDIRECTS + + MessageText: + + The client reached maximum redirection limit.%0 + + + + + MessageId: MF_E_NET_TIMEOUT + + MessageText: + + The server, a computer set up to offer multimedia content to other computers, could not handle your request for multimedia content in a timely manner. Please try again later.%0 + + + + + MessageId: MF_E_NET_CLIENT_CLOSE + + MessageText: + + The control socket is closed by the client.%0 + + + + + MessageId: MF_E_NET_BAD_CONTROL_DATA + + MessageText: + + The server received invalid data from the client on the control connection.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_SERVER + + MessageText: + + The server is not a compatible streaming media server.%0 + + + + + MessageId: MF_E_NET_UNSAFE_URL + + MessageText: + + Url.%0 + + + + + MessageId: MF_E_NET_CACHE_NO_DATA + + MessageText: + + Data is not available.%0 + + + + + MessageId: MF_E_NET_EOL + + MessageText: + + End of line.%0 + + + + + MessageId: MF_E_NET_BAD_REQUEST + + MessageText: + + The request could not be understood by the server.%0 + + + + + MessageId: MF_E_NET_INTERNAL_SERVER_ERROR + + MessageText: + + The server encountered an unexpected condition which prevented it from fulfilling the request.%0 + + + + + MessageId: MF_E_NET_SESSION_NOT_FOUND + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_NET_NOCONNECTION + + MessageText: + + There is no connection established with the Windows Media server. The operation failed.%0 + + + + + MessageId: MF_E_NET_CONNECTION_FAILURE + + MessageText: + + The network connection has failed.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_PUSHSERVER + + MessageText: + + The Server service that received the HTTP push request is not a compatible version of Windows Media Services (WMS). This error may indicate the push request was received by IIS instead of WMS. Ensure WMS is started and has the HTTP Server control protocol properly enabled and try again.%0 + + + + + MessageId: MF_E_NET_SERVER_ACCESSDENIED + + MessageText: + + The Windows Media server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_PROXY_ACCESSDENIED + + MessageText: + + The proxy server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_CANNOTCONNECT + + MessageText: + + Unable to establish a connection to the server.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_TEMPLATE + + MessageText: + + The specified push template is invalid.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_PUBLISHING_POINT + + MessageText: + + The specified push publishing point is invalid.%0 + + + + + MessageId: MF_E_NET_BUSY + + MessageText: + + The requested resource is in use.%0 + + + + + MessageId: MF_E_NET_RESOURCE_GONE + + MessageText: + + The Publishing Point or file on the Windows Media Server is no longer available.%0 + + + + + MessageId: MF_E_NET_ERROR_FROM_PROXY + + MessageText: + + The proxy experienced an error while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_PROXY_TIMEOUT + + MessageText: + + The proxy did not receive a timely response while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_SERVER_UNAVAILABLE + + MessageText: + + The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.%0 + + + + + MessageId: MF_E_NET_TOO_MUCH_DATA + + MessageText: + + The encoding process was unable to keep up with the amount of supplied data.%0 + + + + + MessageId: MF_E_NET_SESSION_INVALID + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_OFFLINE_MODE + + MessageText: + + The requested URL is not available in offline mode.%0 + + + + + MessageId: MF_E_NET_UDP_BLOCKED + + MessageText: + + A device in the network is blocking UDP traffic.%0 + + + + + MessageId: MF_E_NET_UNSUPPORTED_CONFIGURATION + + MessageText: + + The specified configuration value is not supported.%0 + + + + + MessageId: MF_E_NET_PROTOCOL_DISABLED + + MessageText: + + The networking protocol is disabled.%0 + + + + + MessageId: MF_E_ALREADY_INITIALIZED + + MessageText: + + This object has already been initialized and cannot be re-initialized at this time.%0 + + + + + MessageId: MF_E_BANDWIDTH_OVERRUN + + MessageText: + + The amount of data passed in exceeds the given bitrate and buffer window.%0 + + + + + MessageId: MF_E_LATE_SAMPLE + + MessageText: + + The sample was passed in too late to be correctly processed.%0 + + + + + MessageId: MF_E_FLUSH_NEEDED + + MessageText: + + The requested action cannot be carried out until the object is flushed and the queue is emptied.%0 + + + + + MessageId: MF_E_INVALID_PROFILE + + MessageText: + + The profile is invalid.%0 + + + + + MessageId: MF_E_INDEX_NOT_COMMITTED + + MessageText: + + The index that is being generated needs to be committed before the requested action can be carried out.%0 + + + + + MessageId: MF_E_NO_INDEX + + MessageText: + + The index that is necessary for the requested action is not found.%0 + + + + + MessageId: MF_E_CANNOT_INDEX_IN_PLACE + + MessageText: + + The requested index cannot be added in-place to the specified ASF content.%0 + + + + + MessageId: MF_E_MISSING_ASF_LEAKYBUCKET + + MessageText: + + The ASF leaky bucket parameters must be specified in order to carry out this request.%0 + + + + + MessageId: MF_E_INVALID_ASF_STREAMID + + MessageText: + + The stream id is invalid. The valid range for ASF stream id is from 1 to 127.%0 + + + + + MessageId: MF_E_STREAMSINK_REMOVED + + MessageText: + + The requested Stream Sink has been removed and cannot be used.%0 + + + + + MessageId: MF_E_STREAMSINKS_OUT_OF_SYNC + + MessageText: + + The various Stream Sinks in this Media Sink are too far out of sync for the requested action to take place.%0 + + + + + MessageId: MF_E_STREAMSINKS_FIXED + + MessageText: + + Stream Sinks cannot be added to or removed from this Media Sink because its set of streams is fixed.%0 + + + + + MessageId: MF_E_STREAMSINK_EXISTS + + MessageText: + + The given Stream Sink already exists.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_CANCELED + + MessageText: + + Sample allocations have been canceled.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_EMPTY + + MessageText: + + The sample allocator is currently empty, due to outstanding requests.%0 + + + + + MessageId: MF_E_SINK_ALREADYSTOPPED + + MessageText: + + When we try to sopt a stream sink, it is already stopped %0 + + + + + MessageId: MF_E_ASF_FILESINK_BITRATE_UNKNOWN + + MessageText: + + The ASF file sink could not reserve AVIO because the bitrate is unknown.%0 + + + + + MessageId: MF_E_SINK_NO_STREAMS + + MessageText: + + No streams are selected in sink presentation descriptor.%0 + + + + + MessageId: MF_S_SINK_NOT_FINALIZED + + MessageText: + + The sink has not been finalized before shut down. This may cause sink generate a corrupted content.%0 + + + + + MessageId: MF_E_METADATA_TOO_LONG + + MessageText: + + A metadata item was too long to write to the output container.%0 + + + + + MessageId: MF_E_SINK_NO_SAMPLES_PROCESSED + + MessageText: + + The operation failed because no samples were processed by the sink.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_PROCAMP_HW + + MessageText: + + There is no available procamp hardware with which to perform color correction.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_DEINTERLACE_HW + + MessageText: + + There is no available deinterlacing hardware with which to deinterlace the video stream.%0 + + + + + MessageId: MF_E_VIDEO_REN_COPYPROT_FAILED + + MessageText: + + A video stream requires copy protection to be enabled, but there was a failure in attempting to enable copy protection.%0 + + + + + MessageId: MF_E_VIDEO_REN_SURFACE_NOT_SHARED + + MessageText: + + A component is attempting to access a surface for sharing that is not shared.%0 + + + + + MessageId: MF_E_VIDEO_DEVICE_LOCKED + + MessageText: + + A component is attempting to access a shared device that is already locked by another component.%0 + + + + + MessageId: MF_E_NEW_VIDEO_DEVICE + + MessageText: + + The device is no longer available. The handle should be closed and a new one opened.%0 + + + + + MessageId: MF_E_NO_VIDEO_SAMPLE_AVAILABLE + + MessageText: + + A video sample is not currently queued on a stream that is required for mixing.%0 + + + + + MessageId: MF_E_NO_AUDIO_PLAYBACK_DEVICE + + MessageText: + + No audio playback device was found.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_IN_USE + + MessageText: + + The requested audio playback device is currently in use.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_INVALIDATED + + MessageText: + + The audio playback device is no longer present.%0 + + + + + MessageId: MF_E_AUDIO_SERVICE_NOT_RUNNING + + MessageText: + + The audio service is not running.%0 + + + + + MessageId: MF_E_TOPO_INVALID_OPTIONAL_NODE + + MessageText: + + The topology contains an invalid optional node. Possible reasons are incorrect number of outputs and inputs or optional node is at the beginning or end of a segment. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_FIND_DECRYPTOR + + MessageText: + + No suitable transform was found to decrypt the content. %0 + + + + + MessageId: MF_E_TOPO_CODEC_NOT_FOUND + + MessageText: + + No suitable transform was found to encode or decode the content. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_CONNECT + + MessageText: + + Unable to find a way to connect nodes%0 + + + + + MessageId: MF_E_TOPO_UNSUPPORTED + + MessageText: + + Unsupported operations in topoloader%0 + + + + + MessageId: MF_E_TOPO_INVALID_TIME_ATTRIBUTES + + MessageText: + + The topology or its nodes contain incorrectly set time attributes%0 + + + + + MessageId: MF_E_TOPO_LOOPS_IN_TOPOLOGY + + MessageText: + + The topology contains loops, which are unsupported in media foundation topologies%0 + + + + + MessageId: MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_STREAM_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a stream descriptor%0 + + + + + MessageId: MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED + + MessageText: + + A stream descriptor was set on a source stream node but it was not selected on the presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_SOURCE + + MessageText: + + A source stream node in the topology does not have a source%0 + + + + + MessageId: MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED + + MessageText: + + The topology loader does not support sink activates on output nodes.%0 + + + + + MessageId: MF_E_SEQUENCER_UNKNOWN_SEGMENT_ID + + MessageText: + + The sequencer cannot find a segment with the given ID.%0\n. + + + + + MessageId: MF_S_SEQUENCER_CONTEXT_CANCELED + + MessageText: + + The context was canceled.%0\n. + + + + + MessageId: MF_E_NO_SOURCE_IN_CACHE + + MessageText: + + Cannot find source in source cache.%0\n. + + + + + MessageId: MF_S_SEQUENCER_SEGMENT_AT_END_OF_STREAM + + MessageText: + + Cannot update topology flags.%0\n. + + + + + MessageId: MF_E_TRANSFORM_TYPE_NOT_SET + + MessageText: + + A valid type has not been set for this stream or a stream that it depends on.%0 + + + + + MessageId: MF_E_TRANSFORM_STREAM_CHANGE + + MessageText: + + A stream change has occurred. Output cannot be produced until the streams have been renegotiated.%0 + + + + + MessageId: MF_E_TRANSFORM_INPUT_REMAINING + + MessageText: + + The transform cannot take the requested action until all of the input data it currently holds is processed or flushed.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_MISSING + + MessageText: + + The transform requires a profile but no profile was supplied or found.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_INVALID_OR_CORRUPT + + MessageText: + + The transform requires a profile but the supplied profile was invalid or corrupt.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_TRUNCATED + + MessageText: + + The transform requires a profile but the supplied profile ended unexpectedly while parsing.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_PID_NOT_RECOGNIZED + + MessageText: + + The property ID does not match any property supported by the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VARIANT_TYPE_WRONG + + MessageText: + + The variant does not have the type expected for this property ID.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_NOT_WRITEABLE + + MessageText: + + An attempt was made to set the value on a read-only property.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_ARRAY_VALUE_WRONG_NUM_DIM + + MessageText: + + The array property value has an unexpected number of dimensions.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_SIZE_WRONG + + MessageText: + + The array or blob property value has an unexpected size.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_OUT_OF_RANGE + + MessageText: + + The property value is out of range for this transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_INCOMPATIBLE + + MessageText: + + The property value is incompatible with some other property or mediatype set on the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_OUTPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set output mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_INPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set input mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION + + MessageText: + + The requested operation is not supported for the currently set combination of mediatypes.%0 + + + + + MessageId: MF_E_TRANSFORM_CONFLICTS_WITH_OTHER_CURRENTLY_ENABLED_FEATURES + + MessageText: + + The requested feature is not supported in combination with some other currently enabled feature.%0 + + + + + MessageId: MF_E_TRANSFORM_NEED_MORE_INPUT + + MessageText: + + The transform cannot produce output until it gets more input samples.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_SPKR_CONFIG + + MessageText: + + The requested operation is not supported for the current speaker configuration.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING + + MessageText: + + The transform cannot accept mediatype changes in the middle of processing.%0 + + + + + MessageId: MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT + + MessageText: + + The caller should not propagate this event to downstream components.%0 + + + + + MessageId: MF_E_UNSUPPORTED_D3D_TYPE + + MessageText: + + The input type is not supported for D3D device.%0 + + + + + MessageId: MF_E_TRANSFORM_ASYNC_LOCKED + + MessageText: + + The caller does not appear to support this transform's asynchronous capabilities.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_INITIALIZE_ACM_DRIVER + + MessageText: + + An audio compression manager driver could not be initialized by the transform.%0 + + + + + MessageId: MF_E_LICENSE_INCORRECT_RIGHTS + + MessageText: + + You are not allowed to open this file. Contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_OUTOFDATE + + MessageText: + + The license for this media file has expired. Get a new license or contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_REQUIRED + + MessageText: + + You need a license to perform the requested operation on this media file.%0 + + + + + MessageId: MF_E_DRM_HARDWARE_INCONSISTENT + + MessageText: + + The licenses for your media files are corrupted. Contact Microsoft product support.%0 + + + + + MessageId: MF_E_NO_CONTENT_PROTECTION_MANAGER + + MessageText: + + The APP needs to provide IMFContentProtectionManager callback to access the protected media file.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NO_RIGHTS + + MessageText: + + Client does not have rights to restore licenses.%0 + + + + + MessageId: MF_E_BACKUP_RESTRICTED_LICENSE + + MessageText: + + Licenses are restricted and hence can not be backed up.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NEEDS_INDIVIDUALIZATION + + MessageText: + + License restore requires machine to be individualized.%0 + + + + + MessageId: MF_S_PROTECTION_NOT_REQUIRED + + MessageText: + + Protection for stream is not required.%0 + + + + + MessageId: MF_E_COMPONENT_REVOKED + + MessageText: + + Component is revoked.%0 + + + + + MessageId: MF_E_TRUST_DISABLED + + MessageText: + + Trusted functionality is currently disabled on this component.%0 + + + + + MessageId: MF_E_WMDRMOTA_NO_ACTION + + MessageText: + + No Action is set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_ALREADY_SET + + MessageText: + + Action is already set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_HEADER_NOT_AVAILABLE + + MessageText: + + DRM Heaader is not available.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_ENCRYPTION_SCHEME_NOT_SUPPORTED + + MessageText: + + Current encryption scheme is not supported.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_MISMATCH + + MessageText: + + Action does not match with current configuration.%0 + + + + + MessageId: MF_E_WMDRMOTA_INVALID_POLICY + + MessageText: + + Invalid policy for WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_POLICY_UNSUPPORTED + + MessageText: + + The policies that the Input Trust Authority requires to be enforced are unsupported by the outputs.%0 + + + + + MessageId: MF_E_OPL_NOT_SUPPORTED + + MessageText: + + The OPL that the license requires to be enforced are not supported by the Input Trust Authority.%0 + + + + + MessageId: MF_E_TOPOLOGY_VERIFICATION_FAILED + + MessageText: + + The topology could not be successfully verified.%0 + + + + + MessageId: MF_E_SIGNATURE_VERIFICATION_FAILED + + MessageText: + + Signature verification could not be completed successfully for this component.%0 + + + + + MessageId: MF_E_DEBUGGING_NOT_ALLOWED + + MessageText: + + Running this process under a debugger while using protected content is not allowed.%0 + + + + + MessageId: MF_E_CODE_EXPIRED + + MessageText: + + MF component has expired.%0 + + + + + MessageId: MF_E_GRL_VERSION_TOO_LOW + + MessageText: + + The current GRL on the machine does not meet the minimum version requirements.%0 + + + + + MessageId: MF_E_GRL_RENEWAL_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any renewal entries for the specified revocation.%0 + + + + + MessageId: MF_E_GRL_EXTENSIBLE_ENTRY_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any extensible entries for the specified extension GUID.%0 + + + + + MessageId: MF_E_KERNEL_UNTRUSTED + + MessageText: + + The kernel isn't secure for high security level content.%0 + + + + + MessageId: MF_E_PEAUTH_UNTRUSTED + + MessageText: + + The response from protected environment driver isn't valid.%0 + + + + + MessageId: MF_E_NON_PE_PROCESS + + MessageText: + + A non-PE process tried to talk to PEAuth.%0 + + + + + MessageId: MF_E_REBOOT_REQUIRED + + MessageText: + + We need to reboot the machine.%0 + + + + + MessageId: MF_S_WAIT_FOR_POLICY_SET + + MessageText: + + Protection for this stream is not guaranteed to be enforced until the MEPolicySet event is fired.%0 + + + + + MessageId: MF_S_VIDEO_DISABLED_WITH_UNKNOWN_SOFTWARE_OUTPUT + + MessageText: + + This video stream is disabled because it is being sent to an unknown software output.%0 + + + + + MessageId: MF_E_GRL_INVALID_FORMAT + + MessageText: + + The GRL file is not correctly formed, it may have been corrupted or overwritten.%0 + + + + + MessageId: MF_E_GRL_UNRECOGNIZED_FORMAT + + MessageText: + + The GRL file is in a format newer than those recognized by this GRL Reader.%0 + + + + + MessageId: MF_E_ALL_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and required all processes that can run protected media to restart.%0 + + + + + MessageId: MF_E_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and the current process needs to restart.%0 + + + + + MessageId: MF_E_USERMODE_UNTRUSTED + + MessageText: + + The user space is untrusted for protected content play.%0 + + + + + MessageId: MF_E_PEAUTH_SESSION_NOT_STARTED + + MessageText: + + PEAuth communication session hasn't been started.%0 + + + + + MessageId: MF_E_PEAUTH_PUBLICKEY_REVOKED + + MessageText: + + PEAuth's public key is revoked.%0 + + + + + MessageId: MF_E_GRL_ABSENT + + MessageText: + + The GRL is absent.%0 + + + + + MessageId: MF_S_PE_TRUSTED + + MessageText: + + The Protected Environment is trusted.%0 + + + + + MessageId: MF_E_PE_UNTRUSTED + + MessageText: + + The Protected Environment is untrusted.%0 + + + + + MessageId: MF_E_PEAUTH_NOT_STARTED + + MessageText: + + The Protected Environment Authorization service (PEAUTH) has not been started.%0 + + + + + MessageId: MF_E_INCOMPATIBLE_SAMPLE_PROTECTION + + MessageText: + + The sample protection algorithms supported by components are not compatible.%0 + + + + + MessageId: MF_E_PE_SESSIONS_MAXED + + MessageText: + + No more protected environment sessions can be supported.%0 + + + + + MessageId: MF_E_HIGH_SECURITY_LEVEL_CONTENT_NOT_ALLOWED + + MessageText: + + WMDRM ITA does not allow protected content with high security level for this release.%0 + + + + + MessageId: MF_E_TEST_SIGNED_COMPONENTS_NOT_ALLOWED + + MessageText: + + WMDRM ITA cannot allow the requested action for the content as one or more components is not properly signed.%0 + + + + + MessageId: MF_E_ITA_UNSUPPORTED_ACTION + + MessageText: + + WMDRM ITA does not support the requested action.%0 + + + + + MessageId: MF_E_ITA_ERROR_PARSING_SAP_PARAMETERS + + MessageText: + + WMDRM ITA encountered an error in parsing the Secure Audio Path parameters.%0 + + + + + MessageId: MF_E_POLICY_MGR_ACTION_OUTOFBOUNDS + + MessageText: + + The Policy Manager action passed in is invalid.%0 + + + + + MessageId: MF_E_BAD_OPL_STRUCTURE_FORMAT + + MessageText: + + The structure specifying Output Protection Level is not the correct format.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_PROTECTION_GUID + + MessageText: + + WMDRM ITA does not recognize the Explicite Analog Video Output Protection guid specified in the license.%0 + + + + + MessageId: MF_E_NO_PMP_HOST + + MessageText: + + IMFPMPHost object not available.%0 + + + + + MessageId: MF_E_ITA_OPL_DATA_NOT_INITIALIZED + + MessageText: + + WMDRM ITA could not initialize the Output Protection Level data.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Analog Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_DIGITAL_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Digital Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_CLOCK_INVALID_CONTINUITY_KEY + + MessageText: + + The continuity key supplied is not currently valid.%0 + + + + + MessageId: MF_E_CLOCK_NO_TIME_SOURCE + + MessageText: + + No Presentation Time Source has been specified.%0 + + + + + MessageId: MF_E_CLOCK_STATE_ALREADY_SET + + MessageText: + + The clock is already in the requested state.%0 + + + + + MessageId: MF_E_CLOCK_NOT_SIMPLE + + MessageText: + + The clock has too many advanced features to carry out the request.%0 + + + + + MessageId: MF_S_CLOCK_STOPPED + + MessageText: + + Timer::SetTimer returns this success code if called happened while timer is stopped. Timer is not going to be dispatched until clock is running%0 + + + + + MessageId: MF_E_NO_MORE_DROP_MODES + + MessageText: + + The component does not support any more drop modes.%0 + + + + + MessageId: MF_E_NO_MORE_QUALITY_LEVELS + + MessageText: + + The component does not support any more quality levels.%0 + + + + + MessageId: MF_E_DROPTIME_NOT_SUPPORTED + + MessageText: + + The component does not support drop time functionality.%0 + + + + + MessageId: MF_E_QUALITYKNOB_WAIT_LONGER + + MessageText: + + Quality Manager needs to wait longer before bumping the Quality Level up.%0 + + + + + MessageId: MF_E_QM_INVALIDSTATE + + MessageText: + + Quality Manager is in an invalid state. Quality Management is off at this moment.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_CONTAINERTYPE + + MessageText: + + No transcode output container type is specified.%0 + + + + + MessageId: MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS + + MessageText: + + The profile does not have a media type configuration for any selected source streams.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_MATCHING_ENCODER + + MessageText: + + Cannot find an encoder MFT that accepts the user preferred output type.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_INITIALIZED + + MessageText: + + Memory allocator is not initialized.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_COMMITED + + MessageText: + + Memory allocator is not committed yet.%0 + + + + + MessageId: MF_E_ALLOCATOR_ALREADY_COMMITED + + MessageText: + + Memory allocator has already been committed.%0 + + + + + MessageId: MF_E_STREAM_ERROR + + MessageText: + + An error occurred in media stream.%0 + + + + + MessageId: MF_E_INVALID_STREAM_STATE + + MessageText: + + Stream is not in a state to handle the request.%0 + + + + + MessageId: MF_E_HW_STREAM_NOT_CONNECTED + + MessageText: + + Hardware stream is not connected yet.%0 + + + + + Main interface for using Media Foundation with NAudio + + + + + initializes MediaFoundation - only needs to be called once per process + + + + + Enumerate the installed MediaFoundation transforms in the specified category + + A category from MediaFoundationTransformCategories + + + + + uninitializes MediaFoundation + + + + + Creates a Media type + + + + + Creates a media type from a WaveFormat + + + + + Creates a memory buffer of the specified size + + Memory buffer size in bytes + The memory buffer + + + + Creates a sample object + + The sample object + + + + Creates a new attributes store + + Initial size + The attributes store + + + + Creates a media foundation byte stream based on a stream object + (usable with WinRT streams) + + The input stream + A media foundation byte stream + + + + Creates a source reader based on a byte stream + + The byte stream + A media foundation source reader + + + + Interop definitions for MediaFoundation + thanks to Lucian Wischik for the initial work on many of these definitions (also various interfaces) + n.b. the goal is to make as much of this internal as possible, and provide + better .NET APIs using the MediaFoundationApi class instead + + + + + Initializes Microsoft Media Foundation. + + + + + Shuts down the Microsoft Media Foundation platform + + + + + Creates an empty media type. + + + + + Initializes a media type from a WAVEFORMATEX structure. + + + + + Converts a Media Foundation audio media type to a WAVEFORMATEX structure. + + TODO: try making second parameter out WaveFormatExtraData + + + + Creates the source reader from a URL. + + + + + Creates the source reader from a byte stream. + + + + + Creates the sink writer from a URL or byte stream. + + + + + Creates a Microsoft Media Foundation byte stream that wraps an IRandomAccessStream object. + + + + + Gets a list of Microsoft Media Foundation transforms (MFTs) that match specified search criteria. + + + + + Creates an empty media sample. + + + + + Allocates system memory and creates a media buffer to manage it. + + + + + Creates an empty attribute store. + + + + + Gets a list of output formats from an audio encoder. + + + + + All streams + + + + + First audio stream + + + + + First video stream + + + + + Media source + + + + + Media Foundation SDK Version + + + + + Media Foundation API Version + + + + + Media Foundation Version + + + + + An abstract base class for simplifying working with Media Foundation Transforms + You need to override the method that actually creates and configures the transform + + + + + The Source Provider + + + + + The Output WaveFormat + + + + + Constructs a new MediaFoundationTransform wrapper + Will read one second at a time + + The source provider for input data to the transform + The desired output format + + + + To be implemented by overriding classes. Create the transform object, set up its input and output types, + and configure any custom properties in here + + An object implementing IMFTrasform + + + + Disposes this MediaFoundation transform + + + + + Disposes this Media Foundation Transform + + + + + Destructor + + + + + The output WaveFormat of this Media Foundation Transform + + + + + Reads data out of the source, passing it through the transform + + Output buffer + Offset within buffer to write to + Desired byte count + Number of bytes read + + + + Attempts to read from the transform + Some useful info here: + http://msdn.microsoft.com/en-gb/library/windows/desktop/aa965264%28v=vs.85%29.aspx#process_data + + + + + + Indicate that the source has been repositioned and completely drain out the transforms buffers + + + + + Media Foundation Transform Categories + + + + + MFT_CATEGORY_VIDEO_DECODER + + + + + MFT_CATEGORY_VIDEO_ENCODER + + + + + MFT_CATEGORY_VIDEO_EFFECT + + + + + MFT_CATEGORY_MULTIPLEXER + + + + + MFT_CATEGORY_DEMULTIPLEXER + + + + + MFT_CATEGORY_AUDIO_DECODER + + + + + MFT_CATEGORY_AUDIO_ENCODER + + + + + MFT_CATEGORY_AUDIO_EFFECT + + + + + MFT_CATEGORY_VIDEO_PROCESSOR + + + + + MFT_CATEGORY_OTHER + + + + + Media Type helper class, simplifying working with IMFMediaType + (will probably change in the future, to inherit from an attributes class) + Currently does not release the COM object, so you must do that yourself + + + + + Wraps an existing IMFMediaType object + + The IMFMediaType object + + + + Creates and wraps a new IMFMediaType object + + + + + Creates and wraps a new IMFMediaType object based on a WaveFormat + + WaveFormat + + + + Tries to get a UINT32 value, returning a default value if it doesn't exist + + Attribute key + Default value + Value or default if key doesn't exist + + + + The Sample Rate (valid for audio media types) + + + + + The number of Channels (valid for audio media types) + + + + + The number of bits per sample (n.b. not always valid for compressed audio types) + + + + + The average bytes per second (valid for audio media types) + + + + + The Media Subtype. For audio, is a value from the AudioSubtypes class + + + + + The Major type, e.g. audio or video (from the MediaTypes class) + + + + + Access to the actual IMFMediaType object + Use to pass to MF APIs or Marshal.ReleaseComObject when you are finished with it + + + + + Major Media Types + http://msdn.microsoft.com/en-us/library/windows/desktop/aa367377%28v=vs.85%29.aspx + + + + + Default + + + + + Audio + + + + + Video + + + + + Protected Media + + + + + Synchronized Accessible Media Interchange (SAMI) captions. + + + + + Script stream + + + + + Still image stream. + + + + + HTML stream. + + + + + Binary stream. + + + + + A stream that contains data files. + + + + + Contains information about an input stream on a Media Foundation transform (MFT) + + + + + Maximum amount of time between an input sample and the corresponding output sample, in 100-nanosecond units. + + + + + Bitwise OR of zero or more flags from the _MFT_INPUT_STREAM_INFO_FLAGS enumeration. + + + + + The minimum size of each input buffer, in bytes. + + + + + Maximum amount of input data, in bytes, that the MFT holds to perform lookahead. + + + + + The memory alignment required for input buffers. If the MFT does not require a specific alignment, the value is zero. + + + + + Defines messages for a Media Foundation transform (MFT). + + + + + Requests the MFT to flush all stored data. + + + + + Requests the MFT to drain any stored data. + + + + + Sets or clears the Direct3D Device Manager for DirectX Video Accereration (DXVA). + + + + + Drop samples - requires Windows 7 + + + + + Command Tick - requires Windows 8 + + + + + Notifies the MFT that streaming is about to begin. + + + + + Notifies the MFT that streaming is about to end. + + + + + Notifies the MFT that an input stream has ended. + + + + + Notifies the MFT that the first sample is about to be processed. + + + + + Marks a point in the stream. This message applies only to asynchronous MFTs. Requires Windows 7 + + + + + Contains information about an output buffer for a Media Foundation transform. + + + + + Output stream identifier. + + + + + Pointer to the IMFSample interface. + + + + + Before calling ProcessOutput, set this member to zero. + + + + + Before calling ProcessOutput, set this member to NULL. + + + + + Contains information about an output stream on a Media Foundation transform (MFT). + + + + + Bitwise OR of zero or more flags from the _MFT_OUTPUT_STREAM_INFO_FLAGS enumeration. + + + + + Minimum size of each output buffer, in bytes. + + + + + The memory alignment required for output buffers. + + + + + Contains media type information for registering a Media Foundation transform (MFT). + + + + + The major media type. + + + + + The Media Subtype + + + + + Contains statistics about the performance of the sink writer. + + + + + The size of the structure, in bytes. + + + + + The time stamp of the most recent sample given to the sink writer. + + + + + The time stamp of the most recent sample to be encoded. + + + + + The time stamp of the most recent sample given to the media sink. + + + + + The time stamp of the most recent stream tick. + + + + + The system time of the most recent sample request from the media sink. + + + + + The number of samples received. + + + + + The number of samples encoded. + + + + + The number of samples given to the media sink. + + + + + The number of stream ticks received. + + + + + The amount of data, in bytes, currently waiting to be processed. + + + + + The total amount of data, in bytes, that has been sent to the media sink. + + + + + The number of pending sample requests. + + + + + The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer. + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink. + + + + + Contains flags for registering and enumeration Media Foundation transforms (MFTs). + + + + + None + + + + + The MFT performs synchronous data processing in software. + + + + + The MFT performs asynchronous data processing in software. + + + + + The MFT performs hardware-based data processing, using either the AVStream driver or a GPU-based proxy MFT. + + + + + The MFT that must be unlocked by the application before use. + + + + + For enumeration, include MFTs that were registered in the caller's process. + + + + + The MFT is optimized for transcoding rather than playback. + + + + + For enumeration, sort and filter the results. + + + + + Bitwise OR of all the flags, excluding MFT_ENUM_FLAG_SORTANDFILTER. + + + + + Indicates the status of an input stream on a Media Foundation transform (MFT). + + + + + None + + + + + The input stream can receive more data at this time. + + + + + Describes an input stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of input data must contain complete, unbroken units of data. + + + + + Each media sample that the client provides as input must contain exactly one unit of data, as defined for the MFT_INPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All input samples must be the same size. + + + + + MTF Input Stream Holds buffers + + + + + The MFT does not hold input samples after the IMFTransform::ProcessInput method returns. + + + + + This input stream can be removed by calling IMFTransform::DeleteInputStream. + + + + + This input stream is optional. + + + + + The MFT can perform in-place processing. + + + + + Defines flags for the IMFTransform::ProcessOutput method. + + + + + None + + + + + The MFT can still generate output from this stream without receiving any more input. + + + + + The format has changed on this output stream, or there is a new preferred format for this stream. + + + + + The MFT has removed this output stream. + + + + + There is no sample ready for this stream. + + + + + Indicates whether a Media Foundation transform (MFT) can produce output data. + + + + + None + + + + + There is a sample available for at least one output stream. + + + + + Describes an output stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of output data from the MFT contains complete, unbroken units of data. + + + + + Each output sample contains exactly one unit of data, as defined for the MFT_OUTPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All output samples are the same size. + + + + + The MFT can discard the output data from this output stream, if requested by the client. + + + + + This output stream is optional. + + + + + The MFT provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. + + + + + The MFT can either provide output samples for this stream or it can use samples that the client allocates. + + + + + The MFT does not require the client to process the output for this stream. + + + + + The MFT might remove this output stream during streaming. + + + + + Defines flags for processing output samples in a Media Foundation transform (MFT). + + + + + None + + + + + Do not produce output for streams in which the pSample member of the MFT_OUTPUT_DATA_BUFFER structure is NULL. + + + + + Regenerates the last output sample. + + + + + Process Output Status flags + + + + + None + + + + + The Media Foundation transform (MFT) has created one or more new output streams. + + + + + Defines flags for the setting or testing the media type on a Media Foundation transform (MFT). + + + + + None + + + + + Test the proposed media type, but do not set it. + + + + + Represents a MIDI Channel AfterTouch Event. + + + + + Creates a new ChannelAfterTouchEvent from raw MIDI data + + A binary reader + + + + Creates a new Channel After-Touch Event + + Absolute time + Channel + After-touch pressure + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The aftertouch pressure value + + + + + Represents a MIDI control change event + + + + + Reads a control change event from a MIDI stream + + Binary reader on the MIDI stream + + + + Creates a control change event + + Time + MIDI Channel Number + The MIDI Controller + Controller value + + + + Describes this control change event + + A string describing this event + + + + + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The controller number + + + + + The controller value + + + + + Represents a MIDI key signature event event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new Key signature event with the specified data + + + + + Creates a deep clone of this MIDI event. + + + + + Number of sharps or flats + + + + + Major or Minor key + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event + + + + + Gets the type of this meta event + + + + + Empty constructor + + + + + Custom constructor for use by derived types, who will manage the data themselves + + Meta event type + Meta data length + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Reads a meta-event from a stream + + A binary reader based on the stream of MIDI data + A new MetaEvent object + + + + Describes this meta event + + + + + + + + + + MIDI MetaEvent Type + + + + Track sequence number + + + Text event + + + Copyright + + + Sequence track name + + + Track instrument name + + + Lyric + + + Marker + + + Cue point + + + Program (patch) name + + + Device (port) name + + + MIDI Channel (not official?) + + + MIDI Port (not official?) + + + End track + + + Set tempo + + + SMPTE offset + + + Time signature + + + Key signature + + + Sequencer specific + + + + MIDI command codes + + + + Note Off + + + Note On + + + Key After-touch + + + Control change + + + Patch change + + + Channel after-touch + + + Pitch wheel change + + + Sysex message + + + Eox (comes at end of a sysex message) + + + Timing clock (used when synchronization is required) + + + Start sequence + + + Continue sequence + + + Stop sequence + + + Auto-Sensing + + + Meta-event + + + + MidiController enumeration + http://www.midi.org/techspecs/midimessages.php#3 + + + + Bank Select (MSB) + + + Modulation (MSB) + + + Breath Controller + + + Foot controller (MSB) + + + Main volume + + + Pan + + + Expression + + + Bank Select LSB + + + Sustain + + + Portamento On/Off + + + Sostenuto On/Off + + + Soft Pedal On/Off + + + Legato Footswitch + + + Reset all controllers + + + All notes off + + + + Represents an individual MIDI event + + + + The MIDI command code + + + + Creates a MidiEvent from a raw message received using + the MME MIDI In APIs + + The short MIDI message + A new MIDI Event + + + + Constructs a MidiEvent from a BinaryStream + + The binary stream of MIDI data + The previous MIDI event (pass null for first event) + A new MidiEvent + + + + Converts this MIDI event to a short message (32 bit integer) that + can be sent by the Windows MIDI out short message APIs + Cannot be implemented for all MIDI messages + + A short message + + + + Default constructor + + + + + Creates a MIDI event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + + + + Creates a deep clone of this MIDI event. + + + + + The MIDI Channel Number for this event (1-16) + + + + + The Delta time for this event + + + + + The absolute time for this event + + + + + The command code for this event + + + + + Whether this is a note off event + + + + + Whether this is a note on event + + + + + Determines if this is an end track event + + + + + Displays a summary of the MIDI event + + A string containing a brief description of this MIDI event + + + + Utility function that can read a variable length integer from a binary stream + + The binary stream + The integer read + + + + Writes a variable length integer to a binary stream + + Binary stream + The value to write + + + + Exports this MIDI event's data + Overriden in derived classes, but they should call this version + + Absolute time used to calculate delta. + Is updated ready for the next delta calculation + Stream to write to + + + + A helper class to manage collection of MIDI events + It has the ability to organise them in tracks + + + + + Creates a new Midi Event collection + + Initial file type + Delta Ticks Per Quarter Note + + + + The number of tracks + + + + + The absolute time that should be considered as time zero + Not directly used here, but useful for timeshifting applications + + + + + The number of ticks per quarter note + + + + + Gets events on a specified track + + Track number + The list of events + + + + Gets events on a specific track + + Track number + The list of events + + + + Adds a new track + + The new track event list + + + + Adds a new track + + Initial events to add to the new track + The new track event list + + + + Removes a track + + Track number to remove + + + + Clears all events + + + + + The MIDI file type + + + + + Adds an event to the appropriate track depending on file type + + The event to be added + The original (or desired) track number + When adding events in type 0 mode, the originalTrack parameter + is ignored. If in type 1 mode, it will use the original track number to + store the new events. If the original track was 0 and this is a channel based + event, it will create new tracks if necessary and put it on the track corresponding + to its channel number + + + + Sorts, removes empty tracks and adds end track markers + + + + + Gets an enumerator for the lists of track events + + + + + Gets an enumerator for the lists of track events + + + + + Utility class for comparing MidiEvent objects + + + + + Compares two MidiEvents + Sorts by time, with EndTrack always sorted to the end + + + + + Class able to read a MIDI file + + + + + Opens a MIDI file for reading + + Name of MIDI file + + + + MIDI File format + + + + + Opens a MIDI file for reading + + Name of MIDI file + If true will error on non-paired note events + + + + Opens a MIDI file stream for reading + + The input stream containing a MIDI file + If true will error on non-paired note events + + + + The collection of events in this MIDI file + + + + + Number of tracks in this MIDI file + + + + + Delta Ticks Per Quarter Note + + + + + Describes the MIDI file + + A string describing the MIDI file and its events + + + + Exports a MIDI file + + Filename to export to + Events to export + + + + Represents a MIDI in device + + + + + Called when a MIDI message is received + + + + + An invalid MIDI message + + + + + Gets the number of MIDI input devices available in the system + + + + + Opens a specified MIDI in device + + The device number + + + + Closes this MIDI in device + + + + + Closes this MIDI in device + + + + + Start the MIDI in device + + + + + Stop the MIDI in device + + + + + Reset the MIDI in device + + + + + Gets the MIDI in device info + + + + + Closes the MIDI out device + + True if called from Dispose + + + + Cleanup + + + + + MIDI In Device Capabilities + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name + + + + + Support - Reserved + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + MIDI In Message Information + + + + + Create a new MIDI In Message EventArgs + + + + + + + The Raw message received from the MIDI In API + + + + + The raw message interpreted as a MidiEvent + + + + + The timestamp in milliseconds for this message + + + + + MIM_OPEN + + + + + MIM_CLOSE + + + + + MIM_DATA + + + + + MIM_LONGDATA + + + + + MIM_ERROR + + + + + MIM_LONGERROR + + + + + MIM_MOREDATA + + + + + MOM_OPEN + + + + + MOM_CLOSE + + + + + MOM_DONE + + + + + Represents a MIDI message + + + + + Creates a new MIDI message + + Status + Data parameter 1 + Data parameter 2 + + + + Creates a new MIDI message from a raw message + + A packed MIDI message from an MMIO function + + + + Creates a Note On message + + Note number (0 to 127) + Volume (0 to 127) + MIDI channel (1 to 16) + A new MidiMessage object + + + + Creates a Note Off message + + Note number + Volume + MIDI channel (1-16) + A new MidiMessage object + + + + Creates a patch change message + + The patch number + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Creates a Control Change message + + The controller number to change + The value to set the controller to + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Returns the raw MIDI message data + + + + + Represents a MIDI out device + + + + + Gets the number of MIDI devices available in the system + + + + + Gets the MIDI Out device info + + + + + Opens a specified MIDI out device + + The device number + + + + Closes this MIDI out device + + + + + Closes this MIDI out device + + + + + Gets or sets the volume for this MIDI out device + + + + + Resets the MIDI out device + + + + + Sends a MIDI out message + + Message + Parameter 1 + Parameter 2 + + + + Sends a MIDI message to the MIDI out device + + The message to send + + + + Closes the MIDI out device + + True if called from Dispose + + + + Send a long message, for example sysex. + + The bytes to send. + + + + Cleanup + + + + + class representing the capabilities of a MIDI out device + MIDIOUTCAPS: http://msdn.microsoft.com/en-us/library/dd798467%28VS.85%29.aspx + + + + + MIDICAPS_VOLUME + + + + + separate left-right volume control + MIDICAPS_LRVOLUME + + + + + MIDICAPS_CACHE + + + + + MIDICAPS_STREAM + driver supports midiStreamOut directly + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + Returns the number of supported voices + + + + + Gets the polyphony of the device + + + + + Returns true if the device supports all channels + + + + + Queries whether a particular channel is supported + + Channel number to test + True if the channel is supported + + + + Returns true if the device supports patch caching + + + + + Returns true if the device supports separate left and right volume + + + + + Returns true if the device supports MIDI stream out + + + + + Returns true if the device supports volume control + + + + + Returns the type of technology used by this MIDI out device + + + + + Represents the different types of technology used by a MIDI out device + + from mmsystem.h + + + The device is a MIDI port + + + The device is a MIDI synth + + + The device is a square wave synth + + + The device is an FM synth + + + The device is a MIDI mapper + + + The device is a WaveTable synth + + + The device is a software synth + + + + Represents a note MIDI event + + + + + Reads a NoteEvent from a stream of MIDI data + + Binary Reader for the stream + + + + Creates a MIDI Note Event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + MIDI Note Number + MIDI Note Velocity + + + + + + + + + The MIDI note number + + + + + The note velocity + + + + + The note name + + + + + Describes the Note Event + + Note event as a string + + + + + + + + + Represents a MIDI note on event + + + + + Reads a new Note On event from a stream of MIDI data + + Binary reader on the MIDI data stream + + + + Creates a NoteOn event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI note number + MIDI note velocity + MIDI note duration + + + + Creates a deep clone of this MIDI event. + + + + + The associated Note off event + + + + + Get or set the Note Number, updating the off event at the same time + + + + + Get or set the channel, updating the off event at the same time + + + + + The duration of this note + + + There must be a note off event + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI patch change event + + + + + Gets the default MIDI instrument names + + + + + Reads a new patch change event from a MIDI stream + + Binary reader for the MIDI stream + + + + Creates a new patch change event + + Time of the event + Channel number + Patch number + + + + The Patch Number + + + + + Describes this patch change event + + String describing the patch change event + + + + Gets as a short message for sending with the midiOutShortMsg API + + short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI pitch wheel change event + + + + + Reads a pitch wheel change event from a MIDI stream + + The MIDI stream to read from + + + + Creates a new pitch wheel change event + + Absolute event time + Channel + Pitch wheel value + + + + Describes this pitch wheel change event + + String describing this pitch wheel change event + + + + Pitch Wheel Value 0 is minimum, 0x2000 (8192) is default, 0x3FFF (16383) is maximum + + + + + Gets a short message + + Integer to sent as short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event with raw data + + + + + Raw data contained in the meta event + + + + + Creates a meta event with raw data + + + + + Creates a deep clone of this MIDI event. + + + + + Describes this meta event + + + + + + + + + + Represents a Sequencer Specific event + + + + + Reads a new sequencer specific event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new Sequencer Specific event + + The sequencer specific data + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this sequencer specific + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + SMPTE Offset Event + + + + + Creates a new time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a deep clone of this MIDI event. + + + + + Hours + + + + + Minutes + + + + + Seconds + + + + + Frames + + + + + SubFrames + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI sysex message + + + + + Reads a sysex message from a MIDI stream + + Stream of MIDI data + a new sysex message + + + + Creates a deep clone of this MIDI event. + + + + + Describes this sysex message + + A string describing the sysex message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI tempo event + + + + + Reads a new tempo event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new tempo event with specified settings + + Microseconds per quarter note + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Describes this tempo event + + String describing the tempo event + + + + Microseconds per quarter note + + + + + Tempo + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI text event + + + + + Reads a new text event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TextEvent + + The text in this type + MetaEvent type (must be one that is + associated with text data) + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this text event + + + + + The raw contents of this text event + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TimeSignatureEvent + + Time at which to create this event + Numerator + Denominator + Ticks in Metronome Click + No of 32nd Notes in Quarter Click + + + + Creates a deep clone of this MIDI event. + + + + + Numerator (number of beats in a bar) + + + + + Denominator (Beat unit), + 1 means 2, 2 means 4 (crochet), 3 means 8 (quaver), 4 means 16 and 5 means 32 + + + + + Ticks in a metronome click + + + + + Number of 32nd notes in a quarter note + + + + + The time signature + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI track sequence number event event + + + + + Creates a new track sequence number event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a deep clone of this MIDI event. + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Boolean mixer control + + + + + Gets the details for this control + + memory pointer + + + + The current value of the control + + + + + Custom Mixer control + + + + + Get the data for this custom control + + pointer to memory to receive data + + + + List text mixer control + + + + + Get the details for this control + + Memory location to read to + + + Represents a Windows mixer device + + + The number of mixer devices available + + + Connects to the specified mixer + The index of the mixer to use. + This should be between zero and NumberOfDevices - 1 + + + The number of destinations this mixer supports + + + The name of this mixer device + + + The manufacturer code for this mixer device + + + The product identifier code for this mixer device + + + Retrieve the specified MixerDestination object + The ID of the destination to use. + Should be between 0 and DestinationCount - 1 + + + + A way to enumerate the destinations + + + + + A way to enumerate all available devices + + + + + Represents a mixer control + + + + + Mixer Handle + + + + + Number of Channels + + + + + Mixer Handle Type + + + + + Gets all the mixer controls + + Mixer Handle + Mixer Line + Mixer Handle Type + + + + + Gets a specified Mixer Control + + Mixer Handle + Line ID + Control ID + Number of Channels + Flags to use (indicates the meaning of mixerHandle) + + + + + Gets the control details + + + + + Gets the control details + + + + + + Mixer control name + + + + + Mixer control type + + + + + Returns true if this is a boolean control + + Control type + + + + Is this a boolean control + + + + + Determines whether a specified mixer control type is a list text control + + + + + True if this is a list text control + + + + + True if this is a signed control + + + + + True if this is an unsigned control + + + + + True if this is a custom control + + + + + String representation for debug purposes + + + + + Mixer control types + + + + Custom + + + Boolean meter + + + Signed meter + + + Peak meter + + + Unsigned meter + + + Boolean + + + On Off + + + Mute + + + Mono + + + Loudness + + + Stereo Enhance + + + Button + + + Decibels + + + Signed + + + Unsigned + + + Percent + + + Slider + + + Pan + + + Q-sound pan + + + Fader + + + Volume + + + Bass + + + Treble + + + Equaliser + + + Single Select + + + Mux + + + Multiple select + + + Mixer + + + Micro time + + + Milli time + + + + Mixer Interop Flags + + + + + MIXER_OBJECTF_HANDLE = 0x80000000; + + + + + MIXER_OBJECTF_MIXER = 0x00000000; + + + + + MIXER_OBJECTF_HMIXER + + + + + MIXER_OBJECTF_WAVEOUT + + + + + MIXER_OBJECTF_HWAVEOUT + + + + + MIXER_OBJECTF_WAVEIN + + + + + MIXER_OBJECTF_HWAVEIN + + + + + MIXER_OBJECTF_MIDIOUT + + + + + MIXER_OBJECTF_HMIDIOUT + + + + + MIXER_OBJECTF_MIDIIN + + + + + MIXER_OBJECTF_HMIDIIN + + + + + MIXER_OBJECTF_AUX + + + + + MIXER_GETCONTROLDETAILSF_VALUE = 0x00000000; + MIXER_SETCONTROLDETAILSF_VALUE = 0x00000000; + + + + + MIXER_GETCONTROLDETAILSF_LISTTEXT = 0x00000001; + MIXER_SETCONTROLDETAILSF_LISTTEXT = 0x00000001; + + + + + MIXER_GETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_SETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_GETLINECONTROLSF_QUERYMASK = 0x0000000F; + + + + + MIXER_GETLINECONTROLSF_ALL = 0x00000000; + + + + + MIXER_GETLINECONTROLSF_ONEBYID = 0x00000001; + + + + + MIXER_GETLINECONTROLSF_ONEBYTYPE = 0x00000002; + + + + + MIXER_GETLINEINFOF_DESTINATION = 0x00000000; + + + + + MIXER_GETLINEINFOF_SOURCE = 0x00000001; + + + + + MIXER_GETLINEINFOF_LINEID = 0x00000002; + + + + + MIXER_GETLINEINFOF_COMPONENTTYPE = 0x00000003; + + + + + MIXER_GETLINEINFOF_TARGETTYPE = 0x00000004; + + + + + MIXER_GETLINEINFOF_QUERYMASK = 0x0000000F; + + + + + Mixer Line Flags + + + + + Audio line is active. An active line indicates that a signal is probably passing + through the line. + + + + + Audio line is disconnected. A disconnected line's associated controls can still be + modified, but the changes have no effect until the line is connected. + + + + + Audio line is an audio source line associated with a single audio destination line. + If this flag is not set, this line is an audio destination line associated with zero + or more audio source lines. + + + + + BOUNDS structure + + + + + dwMinimum / lMinimum / reserved 0 + + + + + dwMaximum / lMaximum / reserved 1 + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + METRICS structure + + + + + cSteps / reserved[0] + + + + + cbCustomData / reserved[1], number of bytes for control details + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + MIXERCONTROL struct + http://msdn.microsoft.com/en-us/library/dd757293%28VS.85%29.aspx + + + + + Represents a mixer line (source or destination) + + + + + Creates a new mixer destination + + Mixer Handle + Destination Index + Mixer Handle Type + + + + Creates a new Mixer Source For a Specified Source + + Mixer Handle + Destination Index + Source Index + Flag indicating the meaning of mixerHandle + + + + Creates a new Mixer Source + + Wave In Device + + + + Mixer Line Name + + + + + Mixer Line short name + + + + + The line ID + + + + + Component Type + + + + + Mixer destination type description + + + + + Number of channels + + + + + Number of sources + + + + + Number of controls + + + + + Is this destination active + + + + + Is this destination disconnected + + + + + Is this destination a source + + + + + Gets the specified source + + + + + Enumerator for the controls on this Mixer Limne + + + + + Enumerator for the sources on this Mixer Line + + + + + The name of the target output device + + + + + Describes this Mixer Line (for diagnostic purposes) + + + + + Mixer Line Component type enumeration + + + + + Audio line is a destination that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_DST_UNDEFINED + + + + + Audio line is a digital destination (for example, digital input to a DAT or CD audio device). + MIXERLINE_COMPONENTTYPE_DST_DIGITAL + + + + + Audio line is a line level destination (for example, line level input from a CD audio device) that will be the final recording source for the analog-to-digital converter (ADC). Because most audio cards for personal computers provide some sort of gain for the recording audio source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_DST_WAVEIN type. + MIXERLINE_COMPONENTTYPE_DST_LINE + + + + + Audio line is a destination used for a monitor. + MIXERLINE_COMPONENTTYPE_DST_MONITOR + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive speakers. This is the typical component type for the audio output of audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_SPEAKERS + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive headphones. Most audio cards use the same audio destination line for speakers and headphones, in which case the mixer device simply uses the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS type. + MIXERLINE_COMPONENTTYPE_DST_HEADPHONES + + + + + Audio line is a destination that will be routed to a telephone line. + MIXERLINE_COMPONENTTYPE_DST_TELEPHONE + + + + + Audio line is a destination that will be the final recording source for the waveform-audio input (ADC). This line typically provides some sort of gain or attenuation. This is the typical component type for the recording line of most audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_WAVEIN + + + + + Audio line is a destination that will be the final recording source for voice input. This component type is exactly like MIXERLINE_COMPONENTTYPE_DST_WAVEIN but is intended specifically for settings used during voice recording/recognition. Support for this line is optional for a mixer device. Many mixer devices provide only MIXERLINE_COMPONENTTYPE_DST_WAVEIN. + MIXERLINE_COMPONENTTYPE_DST_VOICEIN + + + + + Audio line is a source that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED + + + + + Audio line is a digital source (for example, digital output from a DAT or audio CD). + MIXERLINE_COMPONENTTYPE_SRC_DIGITAL + + + + + Audio line is a line-level source (for example, line-level input from an external stereo) that can be used as an optional recording source. Because most audio cards for personal computers provide some sort of gain for the recording source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY type. + MIXERLINE_COMPONENTTYPE_SRC_LINE + + + + + Audio line is a microphone recording source. Most audio cards for personal computers provide at least two types of recording sources: an auxiliary audio line and microphone input. A microphone audio line typically provides some sort of gain. Audio cards that use a single input for use with a microphone or auxiliary audio line should use the MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE component type. + MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE + + + + + Audio line is a source originating from the output of an internal synthesizer. Most audio cards for personal computers provide some sort of MIDI synthesizer (for example, an Adlib®-compatible or OPL/3 FM synthesizer). + MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER + + + + + Audio line is a source originating from the output of an internal audio CD. This component type is provided for audio cards that provide an audio source line intended to be connected to an audio CD (or CD-ROM playing an audio CD). + MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC + + + + + Audio line is a source originating from an incoming telephone line. + MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE + + + + + Audio line is a source originating from personal computer speaker. Several audio cards for personal computers provide the ability to mix what would typically be played on the internal speaker with the output of an audio card. Some audio cards support the ability to use this output as a recording source. + MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER + + + + + Audio line is a source originating from the waveform-audio output digital-to-analog converter (DAC). Most audio cards for personal computers provide this component type as a source to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination. Some cards also allow this source to be routed to the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT + + + + + Audio line is a source originating from the auxiliary audio line. This line type is intended as a source with gain or attenuation that can be routed to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination and/or recorded from the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY + + + + + Audio line is an analog source (for example, analog output from a video-cassette tape). + MIXERLINE_COMPONENTTYPE_SRC_ANALOG + + + + + Represents a signed mixer control + + + + + Gets details for this contrl + + + + + The value of the control + + + + + Minimum value for this control + + + + + Maximum value for this control + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + + Represents an unsigned mixer control + + + + + Gets the details for this control + + + + + The control value + + + + + The control's minimum value + + + + + The control's maximum value + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + Helper methods for working with audio buffers + + + + + Ensures the buffer is big enough + + + + + + + + Ensures the buffer is big enough + + + + + + + + these will become extension methods once we move to .NET 3.5 + + + + + Checks if the buffer passed in is entirely full of nulls + + + + + Converts to a string containing the buffer described in hex + + + + + Decodes the buffer using the specified encoding, stopping at the first null + + + + + Concatenates the given arrays into a single array. + + The arrays to concatenate + The concatenated resulting array. + + + + An encoding for use with file types that have one byte per character + + + + + The one and only instance of this class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chunk Identifier helpers + + + + + Chunk identifier to Int32 (replaces mmioStringToFOURCC) + + four character chunk identifier + Chunk identifier as int 32 + + + + A very basic circular buffer implementation + + + + + Create a new circular buffer + + Max buffer size in bytes + + + + Write data to the buffer + + Data to write + Offset into data + Number of bytes to write + number of bytes written + + + + Read from the buffer + + Buffer to read into + Offset into read buffer + Bytes to read + Number of bytes actually read + + + + Maximum length of this circular buffer + + + + + Number of bytes currently stored in the circular buffer + + + + + Resets the buffer + + + + + Advances the buffer, discarding bytes + + Bytes to advance + + + + A util class for conversions + + + + + linear to dB conversion + + linear value + decibel value + + + + dB to linear conversion + + decibel value + linear value + + + + Allows us to add descriptions to interop members + + + + + The description + + + + + Field description + + + + + String representation + + + + + + Helper to get descriptions + + + + + Describes the Guid by looking for a FieldDescription attribute on the specified class + + + + + HResult + + + + + S_OK + + + + + S_FALSE + + + + + E_INVALIDARG (from winerror.h) + + + + + MAKE_HRESULT macro + + + + + Helper to deal with the fact that in Win Store apps, + the HResult property name has changed + + COM Exception + The HResult + + + + Methods for converting between IEEE 80-bit extended double precision + and standard C# double precision. + + + + + Converts a C# double precision number to an 80-bit + IEEE extended double precision number (occupying 10 bytes). + + The double precision number to convert to IEEE extended. + An array of 10 bytes containing the IEEE extended number. + + + + Converts an IEEE 80-bit extended precision number to a + C# double precision number. + + The 80-bit IEEE extended number (as an array of 10 bytes). + A C# double precision number that is a close representation of the IEEE extended number. + + + + Pass-through stream that ignores Dispose + Useful for dealing with MemoryStreams that you want to re-use + + + + + The source stream all other methods fall through to + + + + + If true the Dispose will be ignored, if false, will pass through to the SourceStream + Set to true by default + + + + + Creates a new IgnoreDisposeStream + + The source stream + + + + Can Read + + + + + Can Seek + + + + + Can write to the underlying stream + + + + + Flushes the underlying stream + + + + + Gets the length of the underlying stream + + + + + Gets or sets the position of the underlying stream + + + + + Reads from the underlying stream + + + + + Seeks on the underlying stream + + + + + Sets the length of the underlying stream + + + + + Writes to the underlying stream + + + + + Dispose - by default (IgnoreDispose = true) will do nothing, + leaving the underlying stream undisposed + + + + + Support for Marshal Methods in both UWP and .NET 3.5 + + + + + SizeOf a structure + + + + + Offset of a field in a structure + + + + + Pointer to Structure + + + + + In-place and stable implementation of MergeSort + + + + + MergeSort a list of comparable items + + + + + MergeSort a list + + + + + General purpose native methods for internal NAudio use + + + + + WavePosition extension methods + + + + + Get Position as timespan + + + + + Manufacturer codes from mmreg.h + + + + Microsoft Corporation + + + Creative Labs, Inc + + + Media Vision, Inc. + + + Fujitsu Corp. + + + Artisoft, Inc. + + + Turtle Beach, Inc. + + + IBM Corporation + + + Vocaltec LTD. + + + Roland + + + DSP Solutions, Inc. + + + NEC + + + ATI + + + Wang Laboratories, Inc + + + Tandy Corporation + + + Voyetra + + + Antex Electronics Corporation + + + ICL Personal Systems + + + Intel Corporation + + + Advanced Gravis + + + Video Associates Labs, Inc. + + + InterActive Inc + + + Yamaha Corporation of America + + + Everex Systems, Inc + + + Echo Speech Corporation + + + Sierra Semiconductor Corp + + + Computer Aided Technologies + + + APPS Software International + + + DSP Group, Inc + + + microEngineering Labs + + + Computer Friends, Inc. + + + ESS Technology + + + Audio, Inc. + + + Motorola, Inc. + + + Canopus, co., Ltd. + + + Seiko Epson Corporation + + + Truevision + + + Aztech Labs, Inc. + + + Videologic + + + SCALACS + + + Korg Inc. + + + Audio Processing Technology + + + Integrated Circuit Systems, Inc. + + + Iterated Systems, Inc. + + + Metheus + + + Logitech, Inc. + + + Winnov, Inc. + + + NCR Corporation + + + EXAN + + + AST Research Inc. + + + Willow Pond Corporation + + + Sonic Foundry + + + Vitec Multimedia + + + MOSCOM Corporation + + + Silicon Soft, Inc. + + + Supermac + + + Audio Processing Technology + + + Speech Compression + + + Ahead, Inc. + + + Dolby Laboratories + + + OKI + + + AuraVision Corporation + + + Ing C. Olivetti & C., S.p.A. + + + I/O Magic Corporation + + + Matsushita Electric Industrial Co., LTD. + + + Control Resources Limited + + + Xebec Multimedia Solutions Limited + + + New Media Corporation + + + Natural MicroSystems + + + Lyrrus Inc. + + + Compusic + + + OPTi Computers Inc. + + + Adlib Accessories Inc. + + + Compaq Computer Corp. + + + Dialogic Corporation + + + InSoft, Inc. + + + M.P. Technologies, Inc. + + + Weitek + + + Lernout & Hauspie + + + Quanta Computer Inc. + + + Apple Computer, Inc. + + + Digital Equipment Corporation + + + Mark of the Unicorn + + + Workbit Corporation + + + Ositech Communications Inc. + + + miro Computer Products AG + + + Cirrus Logic + + + ISOLUTION B.V. + + + Horizons Technology, Inc + + + Computer Concepts Ltd + + + Voice Technologies Group, Inc. + + + Radius + + + Rockwell International + + + Co. XYZ for testing + + + Opcode Systems + + + Voxware Inc + + + Northern Telecom Limited + + + APICOM + + + Grande Software + + + ADDX + + + Wildcat Canyon Software + + + Rhetorex Inc + + + Brooktree Corporation + + + ENSONIQ Corporation + + + FAST Multimedia AG + + + NVidia Corporation + + + OKSORI Co., Ltd. + + + DiAcoustics, Inc. + + + Gulbransen, Inc. + + + Kay Elemetrics, Inc. + + + Crystal Semiconductor Corporation + + + Splash Studios + + + Quarterdeck Corporation + + + TDK Corporation + + + Digital Audio Labs, Inc. + + + Seer Systems, Inc. + + + PictureTel Corporation + + + AT&T Microelectronics + + + Osprey Technologies, Inc. + + + Mediatrix Peripherals + + + SounDesignS M.C.S. Ltd. + + + A.L. Digital Ltd. + + + Spectrum Signal Processing, Inc. + + + Electronic Courseware Systems, Inc. + + + AMD + + + Core Dynamics + + + CANAM Computers + + + Softsound, Ltd. + + + Norris Communications, Inc. + + + Danka Data Devices + + + EuPhonics + + + Precept Software, Inc. + + + Crystal Net Corporation + + + Chromatic Research, Inc + + + Voice Information Systems, Inc + + + Vienna Systems + + + Connectix Corporation + + + Gadget Labs LLC + + + Frontier Design Group LLC + + + Viona Development GmbH + + + Casio Computer Co., LTD + + + Diamond Multimedia + + + S3 + + + Fraunhofer + + + + Summary description for MmException. + + + + + Creates a new MmException + + The result returned by the Windows API call + The name of the Windows API that failed + + + + Helper function to automatically raise an exception on failure + + The result of the API call + The API function name + + + + Returns the Windows API result + + + + + Windows multimedia error codes from mmsystem.h. + + + + no error, MMSYSERR_NOERROR + + + unspecified error, MMSYSERR_ERROR + + + device ID out of range, MMSYSERR_BADDEVICEID + + + driver failed enable, MMSYSERR_NOTENABLED + + + device already allocated, MMSYSERR_ALLOCATED + + + device handle is invalid, MMSYSERR_INVALHANDLE + + + no device driver present, MMSYSERR_NODRIVER + + + memory allocation error, MMSYSERR_NOMEM + + + function isn't supported, MMSYSERR_NOTSUPPORTED + + + error value out of range, MMSYSERR_BADERRNUM + + + invalid flag passed, MMSYSERR_INVALFLAG + + + invalid parameter passed, MMSYSERR_INVALPARAM + + + handle being used simultaneously on another thread (eg callback),MMSYSERR_HANDLEBUSY + + + specified alias not found, MMSYSERR_INVALIDALIAS + + + bad registry database, MMSYSERR_BADDB + + + registry key not found, MMSYSERR_KEYNOTFOUND + + + registry read error, MMSYSERR_READERROR + + + registry write error, MMSYSERR_WRITEERROR + + + registry delete error, MMSYSERR_DELETEERROR + + + registry value not found, MMSYSERR_VALNOTFOUND + + + driver does not call DriverCallback, MMSYSERR_NODRIVERCB + + + more data to be returned, MMSYSERR_MOREDATA + + + unsupported wave format, WAVERR_BADFORMAT + + + still something playing, WAVERR_STILLPLAYING + + + header not prepared, WAVERR_UNPREPARED + + + device is synchronous, WAVERR_SYNC + + + Conversion not possible (ACMERR_NOTPOSSIBLE) + + + Busy (ACMERR_BUSY) + + + Header Unprepared (ACMERR_UNPREPARED) + + + Cancelled (ACMERR_CANCELED) + + + invalid line (MIXERR_INVALLINE) + + + invalid control (MIXERR_INVALCONTROL) + + + invalid value (MIXERR_INVALVALUE) + + + diff --git a/packages/NAudio.1.10.0/lib/uap10.0/NAudio.dll b/packages/NAudio.1.10.0/lib/uap10.0/NAudio.dll new file mode 100644 index 0000000000000000000000000000000000000000..cbe4ee77e16277bf3c57c2fd666f124974bb7799 GIT binary patch literal 406016 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 literal 0 HcmV?d00001 diff --git a/packages/NAudio.1.10.0/lib/uap10.0/NAudio.pri b/packages/NAudio.1.10.0/lib/uap10.0/NAudio.pri new file mode 100644 index 0000000000000000000000000000000000000000..a61cc639a1802b1f16b68bedaaaa553ba7fe95dc GIT binary patch literal 648 zcmaJ>#zYhBg*!;Ya}dlk>~B2XBY zo706Sw~2h|^3vE$cqJikXIbB6`unYM+Gfp4Pwpo`7x{nQr#>z5BlT;H1e~rSHd_Dv z)z9V4oN1}AKd4`Yki>xKQ)jL|)<#Qkho#`QFne9rnKf>wl#+O`&*jHc^er6jk)e@s z!Ws`UUhs?~3RF1A4uAHegx881#K%Ygw-+~f%zN(NyU7LC3!nWYIJ%1o@=fk}p2$BU V#(6#ZH-db>^EmYEH?|l1?+0s$WrzR( literal 0 HcmV?d00001 diff --git a/packages/NAudio.1.10.0/lib/uap10.0/NAudio.xml b/packages/NAudio.1.10.0/lib/uap10.0/NAudio.xml new file mode 100644 index 0000000..d76252f --- /dev/null +++ b/packages/NAudio.1.10.0/lib/uap10.0/NAudio.xml @@ -0,0 +1,19517 @@ + + + + NAudio + + + + + a-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts an a-law encoded byte to a 16 bit linear sample + + a-law encoded byte + Linear sample + + + + A-law encoder + + + + + Encodes a single 16 bit sample to a-law + + 16 bit PCM sample + a-law encoded byte + + + + SpanDSP - a series of DSP components for telephony + + g722_decode.c - The ITU G.722 codec, decode part. + + Written by Steve Underwood <steveu@coppice.org> + + Copyright (C) 2005 Steve Underwood + Ported to C# by Mark Heath 2011 + + Despite my general liking of the GPL, I place my own contributions + to this code in the public domain for the benefit of all mankind - + even the slimy ones who might try to proprietize my work and use it + to my detriment. + + Based in part on a single channel G.722 codec which is: + Copyright (c) CMU 1993 + Computer Science, Speech Group + Chengxiang Lu and Alex Hauptmann + + + + + hard limits to 16 bit samples + + + + + Decodes a buffer of G722 + + Codec state + Output buffer (to contain decompressed PCM samples) + + Number of bytes in input G722 data to decode + Number of samples written into output buffer + + + + Encodes a buffer of G722 + + Codec state + Output buffer (to contain encoded G722) + PCM 16 bit samples to encode + Number of samples in the input buffer to encode + Number of encoded bytes written into output buffer + + + + Stores state to be used between calls to Encode or Decode + + + + + ITU Test Mode + TRUE if the operating in the special ITU test mode, with the band split filters disabled. + + + + + TRUE if the G.722 data is packed + + + + + 8kHz Sampling + TRUE if encode from 8k samples/second + + + + + Bits Per Sample + 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. + + + + + Signal history for the QMF (x) + + + + + Band + + + + + In bit buffer + + + + + Number of bits in InBuffer + + + + + Out bit buffer + + + + + Number of bits in OutBuffer + + + + + Creates a new instance of G722 Codec State for a + new encode or decode session + + Bitrate (typically 64000) + Special options + + + + Band data for G722 Codec + + + + s + + + sp + + + sz + + + r + + + a + + + ap + + + p + + + d + + + b + + + bp + + + sg + + + nb + + + det + + + + G722 Flags + + + + + None + + + + + Using a G722 sample rate of 8000 + + + + + Packed + + + + + mu-law decoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + only 512 bytes required, so just use a lookup + + + + + Converts a mu-law encoded byte to a 16 bit linear sample + + mu-law encoded byte + Linear sample + + + + mu-law encoder + based on code from: + http://hazelware.luggle.com/tutorials/mulawcompression.html + + + + + Encodes a single 16 bit sample to mu-law + + 16 bit PCM sample + mu-law encoded byte + + + + Audio Capture Client + + + + + Gets a pointer to the buffer + + Pointer to the buffer + + + + Gets a pointer to the buffer + + Number of frames to read + Buffer flags + Pointer to the buffer + + + + Gets the size of the next packet + + + + + Release buffer + + Number of frames written + + + + Release the COM object + + + + + Windows CoreAudio AudioClient + + + + + Retrieves the stream format that the audio engine uses for its internal processing of shared-mode streams. + Can be called before initialize + + + + + Initializes the Audio Client + + Share Mode + Stream Flags + Buffer Duration + Periodicity + Wave Format + Audio Session GUID (can be null) + + + + Retrieves the size (maximum capacity) of the audio buffer associated with the endpoint. (must initialize first) + + + + + Retrieves the maximum latency for the current stream and can be called any time after the stream has been initialized. + + + + + Retrieves the number of frames of padding in the endpoint buffer (must initialize first) + + + + + Retrieves the length of the periodic interval separating successive processing passes by the audio engine on the data in the endpoint buffer. + (can be called before initialize) + + + + + Gets the minimum device period + (can be called before initialize) + + + + + Returns the AudioStreamVolume service for this AudioClient. + + + This returns the AudioStreamVolume object ONLY for shared audio streams. + + + This is thrown when an exclusive audio stream is being used. + + + + + Gets the AudioClockClient service + + + + + Gets the AudioRenderClient service + + + + + Gets the AudioCaptureClient service + + + + + Determines whether if the specified output format is supported + + The share mode. + The desired format. + True if the format is supported + + + + Determines if the specified output format is supported in shared mode + + Share Mode + Desired Format + Output The closest match format. + True if the format is supported + + + + Starts the audio stream + + + + + Stops the audio stream. + + + + + Set the Event Handle for buffer synchro. + + The Wait Handle to setup + + + + Resets the audio stream + Reset is a control method that the client calls to reset a stopped audio stream. + Resetting the stream flushes all pending data and resets the audio clock stream + position to 0. This method fails if it is called on a stream that is not stopped + + + + + Dispose + + + + + Audio Client Buffer Flags + + + + + None + + + + + AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY + + + + + AUDCLNT_BUFFERFLAGS_SILENT + + + + + AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR + + + + + The AudioClientProperties structure is used to set the parameters that describe the properties of the client's audio stream. + + http://msdn.microsoft.com/en-us/library/windows/desktop/hh968105(v=vs.85).aspx + + + + The size of the buffer for the audio stream. + + + + + Boolean value to indicate whether or not the audio stream is hardware-offloaded + + + + + An enumeration that is used to specify the category of the audio stream. + + + + + A bit-field describing the characteristics of the stream. Supported in Windows 8.1 and later. + + + + + AUDCLNT_SHAREMODE + + + + + AUDCLNT_SHAREMODE_SHARED, + + + + + AUDCLNT_SHAREMODE_EXCLUSIVE + + + + + AUDCLNT_STREAMFLAGS + + + + + None + + + + + AUDCLNT_STREAMFLAGS_CROSSPROCESS + + + + + AUDCLNT_STREAMFLAGS_LOOPBACK + + + + + AUDCLNT_STREAMFLAGS_EVENTCALLBACK + + + + + AUDCLNT_STREAMFLAGS_NOPERSIST + + + + + Defines values that describe the characteristics of an audio stream. + + + + + No stream options. + + + + + The audio stream is a 'raw' stream that bypasses all signal processing except for endpoint specific, always-on processing in the APO, driver, and hardware. + + + + + Audio Clock Client + + + + + Characteristics + + + + + Frequency + + + + + Get Position + + + + + Adjusted Position + + + + + Can Adjust Position + + + + + Dispose + + + + + Audio Endpoint Volume + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + On Volume Notification + + + + + Volume Range + + + + + Hardware Support + + + + + Step Information + + + + + Channels + + + + + Master Volume Level + + + + + Master Volume Level Scalar + + + + + Mute + + + + + Volume Step Up + + + + + Volume Step Down + + + + + Creates a new Audio endpoint volume + + IAudioEndpointVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Audio Endpoint Volume Channel + + + + + GUID to pass to AudioEndpointVolumeCallback + + + + + Volume Level + + + + + Volume Level Scalar + + + + + Audio Endpoint Volume Channels + + + + + Channel Count + + + + + Indexer - get a specific channel + + + + + Audio Endpoint Volume Notifiaction Delegate + + Audio Volume Notification Data + + + + Audio Endpoint Volume Step Information + + + + + Step + + + + + StepCount + + + + + Audio Endpoint Volume Volume Range + + + + + Minimum Decibels + + + + + Maximum Decibels + + + + + Increment Decibels + + + + + Audio Meter Information + + + + + Peak Values + + + + + Hardware Support + + + + + Master Peak Value + + + + + Audio Meter Information Channels + + + + + Metering Channel Count + + + + + Get Peak value + + Channel index + Peak value + + + + Audio Render Client + + + + + Gets a pointer to the buffer + + Number of frames requested + Pointer to the buffer + + + + Release buffer + + Number of frames written + Buffer flags + + + + Release the COM object + + + + + AudioSessionControl object for information + regarding an audio session + + + + + Constructor. + + + + + + Dispose + + + + + Finalizer + + + + + Audio meter information of the audio session. + + + + + Simple audio volume of the audio session (for volume and mute status). + + + + + The current state of the audio session. + + + + + The name of the audio session. + + + + + the path to the icon shown in the mixer. + + + + + The session identifier of the audio session. + + + + + The session instance identifier of the audio session. + + + + + The process identifier of the audio session. + + + + + Is the session a system sounds session. + + + + + the grouping param for an audio session grouping + + + + + + For chanigng the grouping param and supplying the context of said change + + + + + + + Registers an even client for callbacks + + + + + + Unregisters an event client from receiving callbacks + + + + + + AudioSessionEvents callback implementation + + + + + Constructor. + + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + AudioSessionManager + + Designed to manage audio sessions and in particuar the + SimpleAudioVolume interface to adjust a session volume + + + + + Session created delegate + + + + + Occurs when audio session has been added (for example run another program that use audio playback). + + + + + SimpleAudioVolume object + for adjusting the volume for the user session + + + + + AudioSessionControl object + for registring for callbacks and other session information + + + + + Refresh session of current device. + + + + + Returns list of sessions of current device. + + + + + Dispose. + + + + + Finalizer. + + + + + Specifies the category of an audio stream. + + + + + Other audio stream. + + + + + Media that will only stream when the app is in the foreground. + + + + + Media that can be streamed when the app is in the background. + + + + + Real-time communications, such as VOIP or chat. + + + + + Alert sounds. + + + + + Sound effects. + + + + + Game sound effects. + + + + + Background audio for games. + + + + + Manages the AudioStreamVolume for the . + + + + + Verify that the channel index is valid. + + + + + + + Return the current stream volumes for all channels + + An array of volume levels between 0.0 and 1.0 for each channel in the audio stream. + + + + Returns the current number of channels in this audio stream. + + + + + Return the current volume for the requested channel. + + The 0 based index into the channels. + The volume level for the channel between 0.0 and 1.0. + + + + Set the volume level for each channel of the audio stream. + + An array of volume levels (between 0.0 and 1.0) one for each channel. + + A volume level MUST be supplied for reach channel in the audio stream. + + + Thrown when does not contain elements. + + + + + Sets the volume level for one channel in the audio stream. + + The 0-based index into the channels to adjust the volume of. + The volume level between 0.0 and 1.0 for this channel of the audio stream. + + + + Dispose + + + + + Release/cleanup objects during Dispose/finalization. + + True if disposing and false if being finalized. + + + + Audio Volume Notification Data + + + + + Event Context + + + + + Muted + + + + + Guid that raised the event + + + + + Master Volume + + + + + Channels + + + + + Channel Volume + + + + + Audio Volume Notification Data + + + + + + + + + + Connector + + + + + Connects this connector to a connector in another device-topology object + + + + + Retreives the type of this connector + + + + + Retreives the data flow of this connector + + + + + Disconnects this connector from it's connected connector (if connected) + + + + + Indicates whether this connector is connected to another connector + + + + + Retreives the connector this connector is connected to (if connected) + + + + + Retreives the global ID of the connector this connector is connected to (if connected) + + + + + Retreives the device ID of the audio device this connector is connected to (if connected) + + + + + Connector Type + + + + + The connector is part of a connection of unknown type. + + + + + The connector is part of a physical connection to an auxiliary device that is installed inside the system chassis + + + + + The connector is part of a physical connection to an external device. + + + + + The connector is part of a software-configured I/O connection (typically a DMA channel) between system memory and an audio hardware device on an audio adapter. + + + + + The connector is part of a permanent connection that is fixed and cannot be configured under software control. + + + + + The connector is part of a connection to a network. + + + + + The EDataFlow enumeration defines constants that indicate the direction + in which audio data flows between an audio endpoint device and an application + + + + + Audio rendering stream. + Audio data flows from the application to the audio endpoint device, which renders the stream. + + + + + Audio capture stream. Audio data flows from the audio endpoint device that captures the stream, + to the application + + + + + Audio rendering or capture stream. Audio data can flow either from the application to the audio + endpoint device, or from the audio endpoint device to the application. + + + + + Device State + + + + + DEVICE_STATE_ACTIVE + + + + + DEVICE_STATE_DISABLED + + + + + DEVICE_STATE_NOTPRESENT + + + + + DEVICE_STATE_UNPLUGGED + + + + + DEVICE_STATEMASK_ALL + + + + + Windows CoreAudio DeviceTopology + + + + + Retrieves the number of connections associated with this device-topology object + + + + + Retrieves the connector at the supplied index + + + + + Retrieves the device id of the device represented by this device-topology object + + + + + Endpoint Hardware Support + + + + + Volume + + + + + Mute + + + + + Meter + + + + + Representation of binary large object container. + + + + + Length of binary object. + + + + + Pointer to buffer storing data. + + + + + is defined in WTypes.h + + + + + Audio Client WASAPI Error Codes (HResult) + + + + + AUDCLNT_E_NOT_INITIALIZED + + + + + AUDCLNT_E_UNSUPPORTED_FORMAT + + + + + AUDCLNT_E_DEVICE_IN_USE + + + + + AUDCLNT_E_RESOURCES_INVALIDATED + + + + + Windows CoreAudio IAudioClient interface + Defined in AudioClient.h + + + + + The GetBufferSize method retrieves the size (maximum capacity) of the endpoint buffer. + + + + + The GetService method accesses additional services from the audio client object. + + The interface ID for the requested service. + Pointer to a pointer variable into which the method writes the address of an instance of the requested interface. + + + + Defined in AudioClient.h + + + + + Defined in AudioClient.h + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Retrieves the current state of the audio session. + + Receives the current session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the display name for the audio session. + + Receives a string that contains the display name. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display name to the current audio session. + + A string that contains the new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the path for the display icon for the audio session. + + Receives a string that specifies the fully qualified path of the file that contains the icon. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a display icon to the current session. + + A string that specifies the fully qualified path of the file that contains the new icon. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the grouping parameter of the audio session. + + Receives the grouping parameter ID. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Assigns a session to a grouping of sessions. + + The new grouping parameter ID. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Registers the client to receive notifications of session events, including changes in the session state. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Deletes a previous registration by the client to receive notifications. + + A client-implemented interface. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier for the audio session. + + Receives the session identifier. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the identifier of the audio session instance. + + Receives the identifier of a particular instance. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the process identifier of the audio session. + + Receives the process identifier of the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Indicates whether the session is a system sounds session. + + An HRESULT code indicating whether the operation succeeded of failed. + + + + Enables or disables the default stream attenuation experience (auto-ducking) provided by the system. + + A variable that enables or disables system auto-ducking. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Defines constants that indicate the current state of an audio session. + + + MSDN Reference: http://msdn.microsoft.com/en-us/library/dd370792.aspx + + + + + The audio session is inactive. + + + + + The audio session is active. + + + + + The audio session has expired. + + + + + Defines constants that indicate a reason for an audio session being disconnected. + + + MSDN Reference: Unknown + + + + + The user removed the audio endpoint device. + + + + + The Windows audio service has stopped. + + + + + The stream format changed for the device that the audio session is connected to. + + + + + The user logged off the WTS session that the audio session was running in. + + + + + The WTS session that the audio session was running in was disconnected. + + + + + The (shared-mode) audio session was disconnected to make the audio endpoint device available for an exclusive-mode connection. + + + + + Windows CoreAudio IAudioSessionControl interface + Defined in AudioPolicy.h + + + + + Notifies the client that the display name for the session has changed. + + The new display name for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the display icon for the session has changed. + + The path for the new display icon for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level or muting state of the session has changed. + + The new volume level for the audio session. + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the volume level of an audio channel in the session submix has changed. + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the grouping parameter for the session has changed. + + The new grouping parameter for the session. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the stream-activity state of the session has changed. + + The new session state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Notifies the client that the session has been disconnected. + + The reason that the audio session was disconnected. + An HRESULT code indicating whether the operation succeeded of failed. + + + + interface to receive session related events + + + + + notification of volume changes including muting of audio session + + the current volume + the current mute state, true muted, false otherwise + + + + notification of display name changed + + the current display name + + + + notification of icon path changed + + the current icon path + + + + notification of the client that the volume level of an audio channel in the session submix has changed + + The channel count. + An array of volumnes cooresponding with each channel index. + The number of the channel whose volume level changed. + + + + notification of the client that the grouping parameter for the session has changed + + >The new grouping parameter for the session. + + + + notification of the client that the stream-activity state of the session has changed + + The new session state. + + + + notification of the client that the session has been disconnected + + The reason that the audio session was disconnected. + + + + Windows CoreAudio IAudioSessionManager interface + Defined in AudioPolicy.h + + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves an audio session control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves a simple audio volume control. + + A new or existing session ID. + Audio session flags. + Receives an interface for the audio session. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IAudioSessionNotification interface + Defined in AudioPolicy.h + + + + + + + session being added + An HRESULT code indicating whether the operation succeeded of failed. + + + + Windows CoreAudio IConnector interface + Defined in devicetopology.h + + + + + Windows CoreAudio IDeviceTopology interface + Defined in devicetopology.h + + + + + defined in MMDeviceAPI.h + + + + + IMMNotificationClient + + + + + Device State Changed + + + + + Device Added + + + + + Device Removed + + + + + Default Device Changed + + + + + Property Value Changed + + + + + + + Windows CoreAudio IPart interface + Defined in devicetopology.h + + + + + Windows CoreAudio IPartsList interface + Defined in devicetopology.h + + + + + is defined in propsys.h + + + + + Windows CoreAudio ISimpleAudioVolume interface + Defined in AudioClient.h + + + + + Sets the master volume level for the audio session. + + The new volume level expressed as a normalized value between 0.0 and 1.0. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the client volume level for the audio session. + + Receives the volume level expressed as a normalized value between 0.0 and 1.0. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Sets the muting state for the audio session. + + The new muting state. + A user context value that is passed to the notification callback. + An HRESULT code indicating whether the operation succeeded of failed. + + + + Retrieves the current muting state for the audio session. + + Receives the muting state. + An HRESULT code indicating whether the operation succeeded of failed. + + + + implements IMMDeviceEnumerator + + + + + MMDevice STGM enumeration + + + + + Read-only access mode. + + + + + Write-only access mode. + + + + + Read-write access mode. + + + + + from Propidl.h. + http://msdn.microsoft.com/en-us/library/aa380072(VS.85).aspx + contains a union so we have to do an explicit layout + + + + + Value type tag. + + + + + Reserved1. + + + + + Reserved2. + + + + + Reserved3. + + + + + cVal. + + + + + bVal. + + + + + iVal. + + + + + uiVal. + + + + + lVal. + + + + + ulVal. + + + + + intVal. + + + + + uintVal. + + + + + hVal. + + + + + uhVal. + + + + + fltVal. + + + + + dblVal. + + + + + boolVal. + + + + + scode. + + + + + Date time. + + + + + Binary large object. + + + + + Pointer value. + + + + + Creates a new PropVariant containing a long value + + + + + Helper method to gets blob data + + + + + Interprets a blob as an array of structs + + + + + Gets the type of data in this PropVariant + + + + + Property value + + + + + allows freeing up memory, might turn this into a Dispose method? + + + + + Clears with a known pointer + + + + + MM Device + + + + + Initializes the device's property store. + + The storage-access mode to open store for. + Administrative client is required for Write and ReadWrite modes. + + + + Audio Client + Makes a new one each call to allow caller to manage when to dispose + n.b. should probably not be a property anymore + + + + + Audio Meter Information + + + + + Audio Endpoint Volume + + + + + AudioSessionManager instance + + + + + DeviceTopology instance + + + + + Properties + + + + + Friendly name for the endpoint + + + + + Friendly name of device + + + + + Icon path of device + + + + + Device Instance Id of Device + + + + + Device ID + + + + + Data Flow + + + + + Device State + + + + + To string + + + + + Dispose + + + + + Finalizer + + + + + Multimedia Device Collection + + + + + Device count + + + + + Get device by index + + Device index + Device at the specified index + + + + Get Enumerator + + Device enumerator + + + + MM Device Enumerator + + + + + Creates a new MM Device Enumerator + + + + + Enumerate Audio Endpoints + + Desired DataFlow + State Mask + Device Collection + + + + Get Default Endpoint + + Data Flow + Role + Device + + + + Check to see if a default audio end point exists without needing an exception. + + Data Flow + Role + True if one exists, and false if one does not exist. + + + + Get device by ID + + Device ID + Device + + + + Registers a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + Unregisters a call back for Device Events + + Object implementing IMMNotificationClient type casted as IMMNotificationClient interface + + + + + + + + Called to dispose/finalize contained objects. + + True if disposing, false if called from a finalizer. + + + + PROPERTYKEY is defined in wtypes.h + + + + + Format ID + + + + + Property ID + + + + + + + + + + + Property Keys + + + + + PKEY_DeviceInterface_FriendlyName + + + + + PKEY_AudioEndpoint_FormFactor + + + + + PKEY_AudioEndpoint_ControlPanelPageProvider + + + + + PKEY_AudioEndpoint_Association + + + + + PKEY_AudioEndpoint_PhysicalSpeakers + + + + + PKEY_AudioEndpoint_GUID + + + + + PKEY_AudioEndpoint_Disable_SysFx + + + + + PKEY_AudioEndpoint_FullRangeSpeakers + + + + + PKEY_AudioEndpoint_Supports_EventDriven_Mode + + + + + PKEY_AudioEndpoint_JackSubType + + + + + PKEY_AudioEngine_DeviceFormat + + + + + PKEY_AudioEngine_OEMFormat + + + + + PKEY _Devie_FriendlyName + + + + + PKEY _Device_IconPath + + + + + Device description property. + + + + + Id of controller device for endpoint device property. + + + + + Device interface key property. + + + + + System-supplied device instance identification string, assigned by PnP manager, persistent across system restarts. + + + + + Property Store class, only supports reading properties at the moment. + + + + + Property Count + + + + + Gets property by index + + Property index + The property + + + + Contains property guid + + Looks for a specific key + True if found + + + + Indexer by guid + + Property Key + Property or null if not found + + + + Gets property key at sepecified index + + Index + Property key + + + + Gets property value at specified index + + Index + Property value + + + + Sets property value at specified key. + + Key of property to set. + Value to write. + + + + Saves a property change. + + + + + Creates a new property store + + IPropertyStore COM interface + + + + Property Store Property + + + + + Property Key + + + + + Property Value + + + + + The ERole enumeration defines constants that indicate the role + that the system has assigned to an audio endpoint device + + + + + Games, system notification sounds, and voice commands. + + + + + Music, movies, narration, and live music recording + + + + + Voice communications (talking to another person). + + + + + Collection of sessions. + + + + + Returns session at index. + + + + + + + Number of current sessions. + + + + + Windows CoreAudio SimpleAudioVolume + + + + + Creates a new Audio endpoint volume + + ISimpleAudioVolume COM interface + + + + Dispose + + + + + Finalizer + + + + + Allows the user to adjust the volume from + 0.0 to 1.0 + + + + + Mute + + + + + Represents state of a capture device + + + + + Not recording + + + + + Beginning to record + + + + + Recording in progress + + + + + Requesting stop + + + + + Contains the name and CLSID of a DirectX Media Object + + + + + Name + + + + + CLSID + + + + + Initializes a new instance of DmoDescriptor + + + + + DirectX Media Object Enumerator + + + + + Get audio effect names + + Audio effect names + + + + Get audio encoder names + + Audio encoder names + + + + Get audio decoder names + + Audio decoder names + + + + DMO Guids for use with DMOEnum + dmoreg.h + + + + + MediaErr.h + + + + + DMO Inplace Process Flags + + + + + DMO_INPLACE_NORMAL + + + + + DMO_INPLACE_ZERO + + + + + Return value when Process is executed with IMediaObjectInPlace + + + + + Success. There is no remaining data to process. + + + + + Success. There is still data to process. + + + + + DMO Input Data Buffer Flags + + + + + None + + + + + DMO_INPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_INPUT_DATA_BUFFERF_TIME + + + + + DMO_INPUT_DATA_BUFFERF_TIMELENGTH + + + + + http://msdn.microsoft.com/en-us/library/aa929922.aspx + DMO_MEDIA_TYPE + + + + + Major type + + + + + Major type name + + + + + Subtype + + + + + Subtype name + + + + + Fixed size samples + + + + + Sample size + + + + + Format type + + + + + Format type name + + + + + Gets the structure as a Wave format (if it is one) + + + + + Sets this object up to point to a wave format + + Wave format structure + + + + DMO Output Data Buffer + + + + + Creates a new DMO Output Data Buffer structure + + Maximum buffer size + + + + Dispose + + + + + Media Buffer + + + + + Length of data in buffer + + + + + Status Flags + + + + + Timestamp + + + + + Duration + + + + + Retrives the data in this buffer + + Buffer to receive data + Offset into buffer + + + + Is more data available + If true, ProcessOuput should be called again + + + + + DMO Output Data Buffer Flags + + + + + None + + + + + DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT + + + + + DMO_OUTPUT_DATA_BUFFERF_TIME + + + + + DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH + + + + + DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE + + + + + DMO_PARTIAL_MEDIATYPE + + + + + DMO Process Output Flags + + + + + None + + + + + DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER + + + + + IMediaBuffer Interface + + + + + Set Length + + Length + HRESULT + + + + Get Max Length + + Max Length + HRESULT + + + + Get Buffer and Length + + Pointer to variable into which to write the Buffer Pointer + Pointer to variable into which to write the Valid Data Length + HRESULT + + + + defined in mediaobj.h + + + + + defined in mediaobj.h + + + + + defined in Medparam.h + + + + + Windows Media Resampler Props + wmcodecdsp.h + + + + + Range is 1 to 60 + + + + + Specifies the channel matrix. + + + + + Attempting to implement the COM IMediaBuffer interface as a .NET object + Not sure what will happen when I pass this to an unmanaged object + + + + + Creates a new Media Buffer + + Maximum length in bytes + + + + Dispose and free memory for buffer + + + + + Finalizer + + + + + Set length of valid data in the buffer + + length + HRESULT + + + + Gets the maximum length of the buffer + + Max length (output parameter) + HRESULT + + + + Gets buffer and / or length + + Pointer to variable into which buffer pointer should be written + Pointer to variable into which valid data length should be written + HRESULT + + + + Length of data in the media buffer + + + + + Loads data into this buffer + + Data to load + Number of bytes to load + + + + Retrieves the data in the output buffer + + buffer to retrieve into + offset within that buffer + + + + Media Object + + + + + Creates a new Media Object + + Media Object COM interface + + + + Number of input streams + + + + + Number of output streams + + + + + Gets the input media type for the specified input stream + + Input stream index + Input type index + DMO Media Type or null if there are no more input types + + + + Gets the DMO Media Output type + + The output stream + Output type index + DMO Media Type or null if no more available + + + + retrieves the media type that was set for an output stream, if any + + Output stream index + DMO Media Type or null if no more available + + + + Enumerates the supported input types + + Input stream index + Enumeration of input types + + + + Enumerates the output types + + Output stream index + Enumeration of supported output types + + + + Querys whether a specified input type is supported + + Input stream index + Media type to check + true if supports + + + + Sets the input type helper method + + Input stream index + Media type + Flags (can be used to test rather than set) + + + + Sets the input type + + Input stream index + Media Type + + + + Sets the input type to the specified Wave format + + Input stream index + Wave format + + + + Requests whether the specified Wave format is supported as an input + + Input stream index + Wave format + true if supported + + + + Helper function to make a DMO Media Type to represent a particular WaveFormat + + + + + Checks if a specified output type is supported + n.b. you may need to set the input type first + + Output stream index + Media type + True if supported + + + + Tests if the specified Wave Format is supported for output + n.b. may need to set the input type first + + Output stream index + Wave format + True if supported + + + + Helper method to call SetOutputType + + + + + Sets the output type + n.b. may need to set the input type first + + Output stream index + Media type to set + + + + Set output type to the specified wave format + n.b. may need to set input type first + + Output stream index + Wave format + + + + Get Input Size Info + + Input Stream Index + Input Size Info + + + + Get Output Size Info + + Output Stream Index + Output Size Info + + + + Process Input + + Input Stream index + Media Buffer + Flags + Timestamp + Duration + + + + Process Output + + Flags + Output buffer count + Output buffers + + + + Gives the DMO a chance to allocate any resources needed for streaming + + + + + Tells the DMO to free any resources needed for streaming + + + + + Gets maximum input latency + + input stream index + Maximum input latency as a ref-time + + + + Flushes all buffered data + + + + + Report a discontinuity on the specified input stream + + Input Stream index + + + + Is this input stream accepting data? + + Input Stream index + true if accepting data + + + + Experimental code, not currently being called + Not sure if it is necessary anyway + + + + + Media Object InPlace + + + + + Creates a new Media Object InPlace + + Media Object InPlace COM Interface + + + + Processes a block of data. + The application supplies a pointer to a block of input data. The DMO processes the data in place. + + Size of the data, in bytes. + offset into buffer + In/Out Data Buffer + Start time of the data. + DmoInplaceProcessFlags + Return value when Process is executed with IMediaObjectInPlace + + + + Creates a copy of the DMO in its current state. + + Copyed MediaObjectInPlace + + + + Retrieves the latency introduced by this DMO. + + The latency, in 100-nanosecond units + + + + Get Media Object + + Media Object + + + + Dispose code + + + + + Media Object Size Info + + + + + Minimum Buffer Size, in bytes + + + + + Max Lookahead + + + + + Alignment + + + + + Media Object Size Info + + + + + ToString + + + + + MP_PARAMINFO + + + + + MP_TYPE + + + + + MPT_INT + + + + + MPT_FLOAT + + + + + MPT_BOOL + + + + + MPT_ENUM + + + + + MPT_MAX + + + + + MP_CURVE_TYPE + + + + + uuids.h, ksuuids.h + + + + + From wmcodecsdp.h + Implements: + - IMediaObject + - IMFTransform (Media foundation - we will leave this for now as there is loads of MF stuff) + - IPropertyStore + - IWMResamplerProps + Can resample PCM or IEEE + + + + + DMO Resampler + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + implements IMediaObject (DirectX Media Object) + implements IMFTransform (Media Foundation Transform) + On Windows XP, it is always an MM (if present at all) + + + + + Windows Media MP3 Decoder (as a DMO) + WORK IN PROGRESS - DO NOT USE! + + + + + Creates a new Resampler based on the DMO Resampler + + + + + Media Object + + + + + Dispose code - experimental at the moment + Was added trying to track down why Resampler crashes NUnit + This code not currently being called by ResamplerDmoStream + + + + + BiQuad filter + + + + + Passes a single sample through the filter + + Input sample + Output sample + + + + Set this up as a low pass filter + + Sample Rate + Cut-off Frequency + Bandwidth + + + + Set this up as a peaking EQ + + Sample Rate + Centre Frequency + Bandwidth (Q) + Gain in decibels + + + + Set this as a high pass filter + + + + + Create a low pass filter + + + + + Create a High pass filter + + + + + Create a bandpass filter with constant skirt gain + + + + + Create a bandpass filter with constant peak gain + + + + + Creates a notch filter + + + + + Creaes an all pass filter + + + + + Create a Peaking EQ + + + + + H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) + + + + a "shelf slope" parameter (for shelving EQ only). + When S = 1, the shelf slope is as steep as it can be and remain monotonically + increasing or decreasing gain with frequency. The shelf slope, in dB/octave, + remains proportional to S for all other values for a fixed f0/Fs and dBgain. + Gain in decibels + + + + H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) + + + + + + + + + + Type to represent complex number + + + + + Real Part + + + + + Imaginary Part + + + + + Envelope generator (ADSR) + + + + + Envelope State + + + + + Idle + + + + + Attack + + + + + Decay + + + + + Sustain + + + + + Release + + + + + Creates and Initializes an Envelope Generator + + + + + Attack Rate (seconds * SamplesPerSecond) + + + + + Decay Rate (seconds * SamplesPerSecond) + + + + + Release Rate (seconds * SamplesPerSecond) + + + + + Sustain Level (1 = 100%) + + + + + Sets the attack curve + + + + + Sets the decay release curve + + + + + Read the next volume multiplier from the envelope generator + + A volume multiplier + + + + Trigger the gate + + If true, enter attack phase, if false enter release phase (unless already idle) + + + + Current envelope state + + + + + Reset to idle state + + + + + Get the current output level + + + + + Summary description for FastFourierTransform. + + + + + This computes an in-place complex-to-complex FFT + x and y are the real and imaginary arrays of 2^m points. + + + + + Applies a Hamming Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hamming window + + + + Applies a Hann Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Hann window + + + + Applies a Blackman-Harris Window + + Index into frame + Frame size (e.g. 1024) + Multiplier for Blackmann-Harris window + + + + Summary description for ImpulseResponseConvolution. + + + + + A very simple mono convolution algorithm + + + This will be very slow + + + + + This is actually a downwards normalize for data that will clip + + + + + SMB Pitch Shifter + + + + + Pitch Shift + + + + + Pitch Shift + + + + + Short Time Fourier Transform + + + + + Fully managed resampler, based on Cockos WDL Resampler + + + + + Creates a new Resampler + + + + + sets the mode + if sinc set, it overrides interp or filtercnt + + + + + Sets the filter parameters + used for filtercnt>0 but not sinc + + + + + Set feed mode + + if true, that means the first parameter to ResamplePrepare will specify however much input you have, not how much you want + + + + Reset + + + + + Prepare + note that it is safe to call ResamplePrepare without calling ResampleOut (the next call of ResamplePrepare will function as normal) + nb inbuffer was WDL_ResampleSample **, returning a place to put the in buffer, so we return a buffer and offset + + req_samples is output samples desired if !wantInputDriven, or if wantInputDriven is input samples that we have + + + + returns number of samples desired (put these into *inbuffer) + + + + Channel Mode + + + + + Stereo + + + + + Joint Stereo + + + + + Dual Channel + + + + + Mono + + + + + An ID3v2 Tag + + + + + Reads an ID3v2 tag from a stream + + + + + Creates a new ID3v2 tag from a collection of key-value pairs. + + A collection of key-value pairs containing the tags to include in the ID3v2 tag. + A new ID3v2 tag + + + + Convert the frame size to a byte array. + + The frame body size. + + + + + Creates an ID3v2 frame for the given key-value pair. + + + + + + + + Gets the Id3v2 Header size. The size is encoded so that only 7 bits per byte are actually used. + + + + + + + Creates the Id3v2 tag header and returns is as a byte array. + + The Id3v2 frames that will be included in the file. This is used to calculate the ID3v2 tag size. + + + + + Creates the Id3v2 tag for the given key-value pairs and returns it in the a stream. + + + + + + + Raw data from this tag + + + + + Interface for MP3 frame by frame decoder + + + + + Decompress a single MP3 frame + + Frame to decompress + Output buffer + Offset within output buffer + Bytes written to output buffer + + + + Tell the decoder that we have repositioned + + + + + PCM format that we are converting into + + + + + Represents an MP3 Frame + + + + + Reads an MP3 frame from a stream + + input stream + A valid MP3 frame, or null if none found + + + Reads an MP3Frame from a stream + http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm has some good info + also see http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx + + A valid MP3 frame, or null if none found + + + + Constructs an MP3 frame + + + + + checks if the four bytes represent a valid header, + if they are, will parse the values into Mp3Frame + + + + + Sample rate of this frame + + + + + Frame length in bytes + + + + + Bit Rate + + + + + Raw frame data (includes header bytes) + + + + + MPEG Version + + + + + MPEG Layer + + + + + Channel Mode + + + + + The number of samples in this frame + + + + + The channel extension bits + + + + + The bitrate index (directly from the header) + + + + + Whether the Copyright bit is set + + + + + Whether a CRC is present + + + + + Not part of the MP3 frame itself - indicates where in the stream we found this header + + + + + MPEG Layer flags + + + + + Reserved + + + + + Layer 3 + + + + + Layer 2 + + + + + Layer 1 + + + + + MPEG Version Flags + + + + + Version 2.5 + + + + + Reserved + + + + + Version 2 + + + + + Version 1 + + + + + Represents a Xing VBR header + + + + + Load Xing Header + + Frame + Xing Header + + + + Sees if a frame contains a Xing header + + + + + Number of frames + + + + + Number of bytes + + + + + VBR Scale property + + + + + The MP3 frame + + + + + Wave Callback Strategy + + + + + Use a function + + + + + Create a new window (should only be done if on GUI thread) + + + + + Use an existing window handle + + + + + Use an event handle + + + + + WaveHeader interop structure (WAVEHDR) + http://msdn.microsoft.com/en-us/library/dd743837%28VS.85%29.aspx + + + + pointer to locked data buffer (lpData) + + + length of data buffer (dwBufferLength) + + + used for input only (dwBytesRecorded) + + + for client's use (dwUser) + + + assorted flags (dwFlags) + + + loop control counter (dwLoops) + + + PWaveHdr, reserved for driver (lpNext) + + + reserved for driver + + + + Wave Header Flags enumeration + + + + + WHDR_BEGINLOOP + This buffer is the first buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_DONE + Set by the device driver to indicate that it is finished with the buffer and is returning it to the application. + + + + + WHDR_ENDLOOP + This buffer is the last buffer in a loop. This flag is used only with output buffers. + + + + + WHDR_INQUEUE + Set by Windows to indicate that the buffer is queued for playback. + + + + + WHDR_PREPARED + Set by Windows to indicate that the buffer has been prepared with the waveInPrepareHeader or waveOutPrepareHeader function. + + + + + WaveInCapabilities structure (based on WAVEINCAPS2 from mmsystem.h) + http://msdn.microsoft.com/en-us/library/ms713726(VS.85).aspx + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Number of channels supported + + + + + The product name + + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + Event Args for WaveInStream event + + + + + Creates new WaveInEventArgs + + + + + Buffer containing recorded data. Note that it might not be completely + full. + + + + + The number of recorded bytes in Buffer. + + + + + MME Wave function interop + + + + + CALLBACK_NULL + No callback + + + + + CALLBACK_FUNCTION + dwCallback is a FARPROC + + + + + CALLBACK_EVENT + dwCallback is an EVENT handle + + + + + CALLBACK_WINDOW + dwCallback is a HWND + + + + + CALLBACK_THREAD + callback is a thread ID + + + + + WIM_OPEN + + + + + WIM_CLOSE + + + + + WIM_DATA + + + + + WOM_CLOSE + + + + + WOM_DONE + + + + + WOM_OPEN + + + + + WaveOutCapabilities structure (based on WAVEOUTCAPS2 from mmsystem.h) + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_waveoutcaps_str.asp + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name (szPname) + + + + + Supported formats (bit flags) dwFormats + + + + + Supported channels (1 for mono 2 for stereo) (wChannels) + Seems to be set to -1 on a lot of devices + + + + + wReserved1 + + + + + Optional functionality supported by the device + + + + + Number of channels supported + + + + + Whether playback control is supported + + + + + The product name + + + + + Checks to see if a given SupportedWaveFormat is supported + + The SupportedWaveFormat + true if supported + + + + The device name Guid (if provided) + + + + + The product name Guid (if provided) + + + + + The manufacturer guid (if provided) + + + + + Supported wave formats for WaveOutCapabilities + + + + + 11.025 kHz, Mono, 8-bit + + + + + 11.025 kHz, Stereo, 8-bit + + + + + 11.025 kHz, Mono, 16-bit + + + + + 11.025 kHz, Stereo, 16-bit + + + + + 22.05 kHz, Mono, 8-bit + + + + + 22.05 kHz, Stereo, 8-bit + + + + + 22.05 kHz, Mono, 16-bit + + + + + 22.05 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 44.1 kHz, Mono, 8-bit + + + + + 44.1 kHz, Stereo, 8-bit + + + + + 44.1 kHz, Mono, 16-bit + + + + + 44.1 kHz, Stereo, 16-bit + + + + + 48 kHz, Mono, 8-bit + + + + + 48 kHz, Stereo, 8-bit + + + + + 48 kHz, Mono, 16-bit + + + + + 48 kHz, Stereo, 16-bit + + + + + 96 kHz, Mono, 8-bit + + + + + 96 kHz, Stereo, 8-bit + + + + + 96 kHz, Mono, 16-bit + + + + + 96 kHz, Stereo, 16-bit + + + + + Flags indicating what features this WaveOut device supports + + + + supports pitch control (WAVECAPS_PITCH) + + + supports playback rate control (WAVECAPS_PLAYBACKRATE) + + + supports volume control (WAVECAPS_VOLUME) + + + supports separate left-right volume control (WAVECAPS_LRVOLUME) + + + (WAVECAPS_SYNC) + + + (WAVECAPS_SAMPLEACCURATE) + + + + Sample provider interface to make WaveChannel32 extensible + Still a bit ugly, hence internal at the moment - and might even make these into + bit depth converting WaveProviders + + + + + ADSR sample provider allowing you to specify attack, decay, sustain and release values + + + + + Creates a new AdsrSampleProvider with default values + + + + + Attack time in seconds + + + + + Release time in seconds + + + + + Reads audio from this sample provider + + + + + Enters the Release phase + + + + + The output WaveFormat + + + + + Sample Provider to concatenate multiple sample providers together + + + + + Creates a new ConcatenatingSampleProvider + + The source providers to play one after the other. Must all share the same sample rate and channel count + + + + The WaveFormat of this Sample Provider + + + + + Read Samples from this sample provider + + + + + Sample Provider to allow fading in and out + + + + + Creates a new FadeInOutSampleProvider + + The source stream with the audio to be faded in or out + If true, we start faded out + + + + Requests that a fade-in begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Requests that a fade-out begins (will start on the next call to Read) + + Duration of fade in milliseconds + + + + Reads samples from this sample provider + + Buffer to read into + Offset within buffer to write to + Number of samples desired + Number of samples read + + + + WaveFormat of this SampleProvider + + + + + Simple SampleProvider that passes through audio unchanged and raises + an event every n samples with the maximum sample value from the period + for metering purposes + + + + + Number of Samples per notification + + + + + Raised periodically to inform the user of the max volume + + + + + Initialises a new instance of MeteringSampleProvider that raises 10 stream volume + events per second + + Source sample provider + + + + Initialises a new instance of MeteringSampleProvider + + source sampler provider + Number of samples between notifications + + + + The WaveFormat of this sample provider + + + + + Reads samples from this Sample Provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Event args for aggregated stream volume + + + + + Max sample values array (one for each channel) + + + + + A sample provider mixer, allowing inputs to be added and removed + + + + + Creates a new MixingSampleProvider, with no inputs, but a specified WaveFormat + + The WaveFormat of this mixer. All inputs must be in this format + + + + Creates a new MixingSampleProvider, based on the given inputs + + Mixer inputs - must all have the same waveformat, and must + all be of the same WaveFormat. There must be at least one input + + + + Returns the mixer inputs (read-only - use AddMixerInput to add an input + + + + + When set to true, the Read method always returns the number + of samples requested, even if there are no inputs, or if the + current inputs reach their end. Setting this to true effectively + makes this a never-ending sample provider, so take care if you plan + to write it out to a file. + + + + + Adds a WaveProvider as a Mixer input. + Must be PCM or IEEE float already + + IWaveProvider mixer input + + + + Adds a new mixer input + + Mixer input + + + + Raised when a mixer input has been removed because it has ended + + + + + Removes a mixer input + + Mixer input to remove + + + + Removes all mixer inputs + + + + + The output WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + SampleProvider event args + + + + + Constructs a new SampleProviderEventArgs + + + + + The Sample Provider + + + + + No nonsense mono to stereo provider, no volume adjustment, + just copies input to left and right. + + + + + Initializes a new instance of MonoToStereoSampleProvider + + Source sample provider + + + + WaveFormat of this provider + + + + + Reads samples from this provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Multiplier for left channel (default is 1.0) + + + + + Multiplier for right channel (default is 1.0) + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing sample provider, allowing re-patching of input channels to different + output channels + + Input sample providers. Must all be of the same sample rate, but can have any number of channels + Desired number of output channels. + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads samples from this sample provider + + Buffer to be filled with sample data + Offset into buffer to start writing to, usually 0 + Number of samples required + Number of samples read + + + + The output WaveFormat for this SampleProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Simple class that raises an event on every sample + + + + + Initializes a new instance of NotifyingSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Sample notifier + + + + + Allows you to: + 1. insert a pre-delay of silence before the source begins + 2. skip over a certain amount of the beginning of the source + 3. only play a set amount from the source + 4. insert silence at the end after the source is complete + + + + + Number of samples of silence to insert before playing source + + + + + Amount of silence to insert before playing + + + + + Number of samples in source to discard + + + + + Amount of audio to skip over from the source before beginning playback + + + + + Number of samples to read from source (if 0, then read it all) + + + + + Amount of audio to take from the source (TimeSpan.Zero means play to end) + + + + + Number of samples of silence to insert after playing source + + + + + Amount of silence to insert after playing source + + + + + Creates a new instance of offsetSampleProvider + + The Source Sample Provider to read from + + + + The WaveFormat of this SampleProvider + + + + + Reads from this sample provider + + Sample buffer + Offset within sample buffer to read to + Number of samples required + Number of samples read + + + + Converts a mono sample provider to stereo, with a customisable pan strategy + + + + + Initialises a new instance of the PanningSampleProvider + + Source sample provider, must be mono + + + + Pan value, must be between -1 (left) and 1 (right) + + + + + The pan strategy currently in use + + + + + The WaveFormat of this sample provider + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Pair of floating point values, representing samples or multipliers + + + + + Left value + + + + + Right value + + + + + Required Interface for a Panning Strategy + + + + + Gets the left and right multipliers for a given pan value + + Pan value from -1 to 1 + Left and right multipliers in a stereo sample pair + + + + Simplistic "balance" control - treating the mono input as if it was stereo + In the centre, both channels full volume. Opposite channel decays linearly + as balance is turned to to one side + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Square Root Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Sinus Pan, thanks to Yuval Naveh + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Linear Pan + + + + + Gets the left and right channel multipliers for this pan value + + Pan value, between -1 and 1 + Left and right multipliers + + + + Converts an IWaveProvider containing 16 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm16BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Samples required + Number of samples read + + + + Converts an IWaveProvider containing 24 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm24BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 32 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm32BitToSampleProvider + + Source Wave Provider + + + + Reads floating point samples from this sample provider + + sample buffer + offset within sample buffer to write to + number of samples required + number of samples provided + + + + Converts an IWaveProvider containing 8 bit PCM to an + ISampleProvider + + + + + Initialises a new instance of Pcm8BitToSampleProvider + + Source wave provider + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples to read + Number of samples read + + + + Utility class that takes an IWaveProvider input at any bit depth + and exposes it as an ISampleProvider. Can turn mono inputs into stereo, + and allows adjusting of volume + (The eventual successor to WaveChannel32) + This class also serves as an example of how you can link together several simple + Sample Providers to form a more useful class. + + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + + + + Initialises a new instance of SampleChannel + + Source wave provider, must be PCM or IEEE + force mono inputs to become stereo + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + The WaveFormat of this Sample Provider + + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Raised periodically to inform the user of the max volume + (before the volume meter) + + + + + Helper base class for classes converting to ISampleProvider + + + + + Source Wave Provider + + + + + Source buffer (to avoid constantly creating small buffers during playback) + + + + + Initialises a new instance of SampleProviderConverterBase + + Source Wave provider + + + + Wave format of this wave provider + + + + + Reads samples from the source wave provider + + Sample buffer + Offset into sample buffer + Number of samples required + Number of samples read + + + + Ensure the source buffer exists and is big enough + + Bytes required + + + + Utility class for converting to SampleProvider + + + + + Helper function to go from IWaveProvider to a SampleProvider + Must already be PCM or IEEE float + + The WaveProvider to convert + A sample provider + + + + Helper class for when you need to convert back to an IWaveProvider from + an ISampleProvider. Keeps it as IEEE float + + + + + Initializes a new instance of the WaveProviderFloatToWaveProvider class + + Source wave provider + + + + Reads from this provider + + + + + The waveformat of this WaveProvider (same as the source) + + + + + Converts a sample provider to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts a sample provider to 24 bit PCM, optionally clipping and adjusting volume along the way + + + + + Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. + Number of channels and sample rate remain unchanged. + + The input source provider + + + + Reads bytes from this wave stream, clipping if necessary + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + The Format of this IWaveProvider + + + + + + Volume of this channel. 1.0 = full scale, 0.0 to mute + + + + + Signal Generator + Sin, Square, Triangle, SawTooth, White Noise, Pink Noise, Sweep. + + + Posibility to change ISampleProvider + Example : + --------- + WaveOut _waveOutGene = new WaveOut(); + WaveGenerator wg = new SignalGenerator(); + wg.Type = ... + wg.Frequency = ... + wg ... + _waveOutGene.Init(wg); + _waveOutGene.Play(); + + + + + Initializes a new instance for the Generator (Default :: 44.1Khz, 2 channels, Sinus, Frequency = 440, Gain = 1) + + + + + Initializes a new instance for the Generator (UserDef SampleRate & Channels) + + Desired sample rate + Number of channels + + + + The waveformat of this WaveProvider (same as the source) + + + + + Frequency for the Generator. (20.0 - 20000.0 Hz) + Sin, Square, Triangle, SawTooth, Sweep (Start Frequency). + + + + + Return Log of Frequency Start (Read only) + + + + + End Frequency for the Sweep Generator. (Start Frequency in Frequency) + + + + + Return Log of Frequency End (Read only) + + + + + Gain for the Generator. (0.0 to 1.0) + + + + + Channel PhaseReverse + + + + + Type of Generator. + + + + + Length Seconds for the Sweep Generator. + + + + + Reads from this provider. + + + + + Private :: Random for WhiteNoise & Pink Noise (Value form -1 to 1) + + Random value from -1 to +1 + + + + Signal Generator type + + + + + Pink noise + + + + + White noise + + + + + Sweep + + + + + Sine wave + + + + + Square wave + + + + + Triangle Wave + + + + + Sawtooth wave + + + + + Author: Freefall + Date: 05.08.16 + Based on: the port of Stephan M. Bernsee´s pitch shifting class + Port site: https://sites.google.com/site/mikescoderama/pitch-shifting + Test application and github site: https://github.com/Freefall63/NAudio-Pitchshifter + + NOTE: I strongly advice to add a Limiter for post-processing. + For my needs the FastAttackCompressor1175 provides acceptable results: + https://github.com/Jiyuu/SkypeFX/blob/master/JSNet/FastAttackCompressor1175.cs + + UPDATE: Added a simple Limiter based on the pydirac implementation. + https://github.com/echonest/remix/blob/master/external/pydirac225/source/Dirac_LE.cpp + + + + + + Creates a new SMB Pitch Shifting Sample Provider with default settings + + Source provider + + + + Creates a new SMB Pitch Shifting Sample Provider with custom settings + + Source provider + FFT Size (any power of two <= 4096: 4096, 2048, 1024, 512, ...) + Oversampling (number of overlapping windows) + Initial pitch (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + Read from this sample provider + + + + + WaveFormat + + + + + Pitch Factor (0.5f = octave down, 1.0f = normal, 2.0f = octave up) + + + + + Takes a stereo input and turns it to mono + + + + + Creates a new mono ISampleProvider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this SampleProvider + + + + + Very simple sample provider supporting adjustable gain + + + + + Initializes a new instance of VolumeSampleProvider + + Source Sample Provider + + + + WaveFormat + + + + + Reads samples from this sample provider + + Sample buffer + Offset into sample buffer + Number of samples desired + Number of samples read + + + + Allows adjusting the volume, 1.0f = full volume + + + + + Helper class turning an already 32 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Helper class turning an already 64 bit floating point IWaveProvider + into an ISampleProvider - hopefully not needed for most applications + + + + + Initializes a new instance of the WaveToSampleProvider class + + Source wave provider, must be IEEE float + + + + Reads from this provider + + + + + Fully managed resampling sample provider, based on the WDL Resampler + + + + + Constructs a new resampler + + Source to resample + Desired output sample rate + + + + Reads from this sample provider + + + + + Output WaveFormat + + + + + Useful extension methods to make switching between WaveAndSampleProvider easier + + + + + Converts a WaveProvider into a SampleProvider (only works for PCM) + + WaveProvider to convert + + + + + Turns WaveFormatExtensible into a standard waveformat if possible + + Input wave format + A standard PCM or IEEE waveformat, or the original waveformat + + + + Converts a ISampleProvider to a IWaveProvider but still 32 bit float + + SampleProvider to convert + An IWaveProvider + + + + Converts a ISampleProvider to a IWaveProvider but and convert to 16 bit + + SampleProvider to convert + A 16 bit IWaveProvider + + + + Concatenates one Sample Provider on the end of another + + The sample provider to play first + The sample provider to play next + A single sampleprovider to play one after the other + + + + Concatenates one Sample Provider on the end of another with silence inserted + + The sample provider to play first + Silence duration to insert between the two + The sample provider to play next + A single sample provider + + + + Skips over a specified amount of time (by consuming source stream) + + Source sample provider + Duration to skip over + A sample provider that skips over the specified amount of time + + + + Takes a specified amount of time from the source stream + + Source sample provider + Duration to take + A sample provider that reads up to the specified amount of time + + + + Converts a Stereo Sample Provider to mono, allowing mixing of channel volume + + Stereo Source Provider + Amount of left channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + Amount of right channel to mix in (0 = mute, 1 = full, 0.5 for mixing half from each channel) + A mono SampleProvider + + + + Converts a Mono ISampleProvider to stereo + + Mono Source Provider + Amount to mix to left channel (1.0 is full volume) + Amount to mix to right channel (1.0 is full volume) + + + + + Microsoft ADPCM + See http://icculus.org/SDL_sound/downloads/external_documentation/wavecomp.htm + + + + + Empty constructor needed for marshalling from a pointer + + + + + Samples per block + + + + + Number of coefficients + + + + + Coefficients + + + + + Microsoft ADPCM + + Sample Rate + Channels + + + + Serializes this wave format + + Binary writer + + + + String Description of this WaveFormat + + + + + GSM 610 + + + + + Creates a GSM 610 WaveFormat + For now hardcoded to 13kbps + + + + + Samples per block + + + + + Writes this structure to a BinaryWriter + + + + + IMA/DVI ADPCM Wave Format + Work in progress + + + + + parameterless constructor for Marshalling + + + + + Creates a new IMA / DVI ADPCM Wave Format + + Sample Rate + Number of channels + Bits Per Sample + + + + MP3 WaveFormat, MPEGLAYER3WAVEFORMAT from mmreg.h + + + + + Wave format ID (wID) + + + + + Padding flags (fdwFlags) + + + + + Block Size (nBlockSize) + + + + + Frames per block (nFramesPerBlock) + + + + + Codec Delay (nCodecDelay) + + + + + Creates a new MP3 WaveFormat + + + + + Wave Format Padding Flags + + + + + MPEGLAYER3_FLAG_PADDING_ISO + + + + + MPEGLAYER3_FLAG_PADDING_ON + + + + + MPEGLAYER3_FLAG_PADDING_OFF + + + + + Wave Format ID + + + + MPEGLAYER3_ID_UNKNOWN + + + MPEGLAYER3_ID_MPEG + + + MPEGLAYER3_ID_CONSTANTFRAMESIZE + + + + DSP Group TrueSpeech + + + + + DSP Group TrueSpeech WaveFormat + + + + + Writes this structure to a BinaryWriter + + + + + Represents a Wave file format + + + + format type + + + number of channels + + + sample rate + + + for buffer estimation + + + block size of data + + + number of bits per sample of mono data + + + number of following bytes + + + + Creates a new PCM 44.1Khz stereo 16 bit format + + + + + Creates a new 16 bit wave format with the specified sample + rate and channel count + + Sample Rate + Number of channels + + + + Gets the size of a wave buffer equivalent to the latency in milliseconds. + + The milliseconds. + + + + + Creates a WaveFormat with custom members + + The encoding + Sample Rate + Number of channels + Average Bytes Per Second + Block Align + Bits Per Sample + + + + + Creates an A-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a Mu-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a new PCM format with the specified sample rate, bit depth and channels + + + + + Creates a new 32 bit IEEE floating point wave format + + sample rate + number of channels + + + + Helper function to retrieve a WaveFormat structure from a pointer + + WaveFormat structure + + + + + Helper function to marshal WaveFormat to an IntPtr + + WaveFormat + IntPtr to WaveFormat structure (needs to be freed by callee) + + + + Reads in a WaveFormat (with extra data) from a fmt chunk (chunk identifier and + length should already have been read) + + Binary reader + Format chunk length + A WaveFormatExtraData + + + + Reads a new WaveFormat object from a stream + + A binary reader that wraps the stream + + + + Reports this WaveFormat as a string + + String describing the wave format + + + + Compares with another WaveFormat object + + Object to compare to + True if the objects are the same + + + + Provides a Hashcode for this WaveFormat + + A hashcode + + + + Returns the encoding type used + + + + + Writes this WaveFormat object to a stream + + the output stream + + + + Returns the number of channels (1=mono,2=stereo etc) + + + + + Returns the sample rate (samples per second) + + + + + Returns the average number of bytes used per second + + + + + Returns the block alignment + + + + + Returns the number of bits per sample (usually 16 or 32, sometimes 24 or 8) + Can be 0 for some codecs + + + + + Returns the number of extra bytes used by this waveformat. Often 0, + except for compressed formats which store extra data after the WAVEFORMATEX header + + + + + Summary description for WaveFormatEncoding. + + + + WAVE_FORMAT_UNKNOWN, Microsoft Corporation + + + WAVE_FORMAT_PCM Microsoft Corporation + + + WAVE_FORMAT_ADPCM Microsoft Corporation + + + WAVE_FORMAT_IEEE_FLOAT Microsoft Corporation + + + WAVE_FORMAT_VSELP Compaq Computer Corp. + + + WAVE_FORMAT_IBM_CVSD IBM Corporation + + + WAVE_FORMAT_ALAW Microsoft Corporation + + + WAVE_FORMAT_MULAW Microsoft Corporation + + + WAVE_FORMAT_DTS Microsoft Corporation + + + WAVE_FORMAT_DRM Microsoft Corporation + + + WAVE_FORMAT_WMAVOICE9 + + + WAVE_FORMAT_OKI_ADPCM OKI + + + WAVE_FORMAT_DVI_ADPCM Intel Corporation + + + WAVE_FORMAT_IMA_ADPCM Intel Corporation + + + WAVE_FORMAT_MEDIASPACE_ADPCM Videologic + + + WAVE_FORMAT_SIERRA_ADPCM Sierra Semiconductor Corp + + + WAVE_FORMAT_G723_ADPCM Antex Electronics Corporation + + + WAVE_FORMAT_DIGISTD DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIFIX DSP Solutions, Inc. + + + WAVE_FORMAT_DIALOGIC_OKI_ADPCM Dialogic Corporation + + + WAVE_FORMAT_MEDIAVISION_ADPCM Media Vision, Inc. + + + WAVE_FORMAT_CU_CODEC Hewlett-Packard Company + + + WAVE_FORMAT_YAMAHA_ADPCM Yamaha Corporation of America + + + WAVE_FORMAT_SONARC Speech Compression + + + WAVE_FORMAT_DSPGROUP_TRUESPEECH DSP Group, Inc + + + WAVE_FORMAT_ECHOSC1 Echo Speech Corporation + + + WAVE_FORMAT_AUDIOFILE_AF36, Virtual Music, Inc. + + + WAVE_FORMAT_APTX Audio Processing Technology + + + WAVE_FORMAT_AUDIOFILE_AF10, Virtual Music, Inc. + + + WAVE_FORMAT_PROSODY_1612, Aculab plc + + + WAVE_FORMAT_LRC, Merging Technologies S.A. + + + WAVE_FORMAT_DOLBY_AC2, Dolby Laboratories + + + WAVE_FORMAT_GSM610, Microsoft Corporation + + + WAVE_FORMAT_MSNAUDIO, Microsoft Corporation + + + WAVE_FORMAT_ANTEX_ADPCME, Antex Electronics Corporation + + + WAVE_FORMAT_CONTROL_RES_VQLPC, Control Resources Limited + + + WAVE_FORMAT_DIGIREAL, DSP Solutions, Inc. + + + WAVE_FORMAT_DIGIADPCM, DSP Solutions, Inc. + + + WAVE_FORMAT_CONTROL_RES_CR10, Control Resources Limited + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_MPEG, Microsoft Corporation + + + + + + + + + WAVE_FORMAT_MPEGLAYER3, ISO/MPEG Layer3 Format Tag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WAVE_FORMAT_GSM + + + WAVE_FORMAT_G729 + + + WAVE_FORMAT_G723 + + + WAVE_FORMAT_ACELP + + + + WAVE_FORMAT_RAW_AAC1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Windows Media Audio, WAVE_FORMAT_WMAUDIO2, Microsoft Corporation + + + + + Windows Media Audio Professional WAVE_FORMAT_WMAUDIO3, Microsoft Corporation + + + + + Windows Media Audio Lossless, WAVE_FORMAT_WMAUDIO_LOSSLESS + + + + + Windows Media Audio Professional over SPDIF WAVE_FORMAT_WMASPDIF (0x0164) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Advanced Audio Coding (AAC) audio in Audio Data Transport Stream (ADTS) format. + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_ADTS_AAC. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral band replication (SBR) or parametric stereo (PS) tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + + Source wmCodec.h + + + + MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_LOAS. + + + The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, + prior to applying spectral SBR or PS tools, if present. + No additional data is required after the WAVEFORMATEX structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + NOKIA_MPEG_ADTS_AAC + Source wmCodec.h + + + NOKIA_MPEG_RAW_AAC + Source wmCodec.h + + + VODAFONE_MPEG_ADTS_AAC + Source wmCodec.h + + + VODAFONE_MPEG_RAW_AAC + Source wmCodec.h + + + + High-Efficiency Advanced Audio Coding (HE-AAC) stream. + The format block is an HEAACWAVEFORMAT structure. + + http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx + + + WAVE_FORMAT_DVM + + + WAVE_FORMAT_VORBIS1 "Og" Original stream compatible + + + WAVE_FORMAT_VORBIS2 "Pg" Have independent header + + + WAVE_FORMAT_VORBIS3 "Qg" Have no codebook header + + + WAVE_FORMAT_VORBIS1P "og" Original stream compatible + + + WAVE_FORMAT_VORBIS2P "pg" Have independent headere + + + WAVE_FORMAT_VORBIS3P "qg" Have no codebook header + + + WAVE_FORMAT_EXTENSIBLE + + + + + + + WaveFormatExtensible + http://www.microsoft.com/whdc/device/audio/multichaud.mspx + + + + + Parameterless constructor for marshalling + + + + + Creates a new WaveFormatExtensible for PCM or IEEE + + + + + WaveFormatExtensible for PCM or floating point can be awkward to work with + This creates a regular WaveFormat structure representing the same audio format + Returns the WaveFormat unchanged for non PCM or IEEE float + + + + + + SubFormat (may be one of AudioMediaSubtypes) + + + + + Serialize + + + + + + String representation + + + + + This class used for marshalling from unmanaged code + + + + + Allows the extra data to be read + + + + + parameterless constructor for marshalling + + + + + Reads this structure from a BinaryReader + + + + + Writes this structure to a BinaryWriter + + + + + The WMA wave format. + May not be much use because WMA codec is a DirectShow DMO not an ACM + + + + + Generic interface for wave recording + + + + + Recording WaveFormat + + + + + Start Recording + + + + + Stop Recording + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + Audio Capture using Wasapi + See http://msdn.microsoft.com/en-us/library/dd370800%28VS.85%29.aspx + + + + + Indicates recorded data is available + + + + + Indicates that all recorded data has now been received. + + + + + The effective latency in milliseconds + + + + + Initialises a new instance of the WASAPI capture class + + + + + Initialises a new instance of the WASAPI capture class + + Capture device to use + + + + Recording wave format + + + + + Way of enumerating all the audio capture devices available on the system + + + + + + Gets the default audio capture device + + The default audio capture device + + + + Initializes the capture device. Must be called on the UI (STA) thread. + If not called manually then StartRecording() will call it internally. + + + + + To allow overrides to specify different flags (e.g. loopback) + + + + + Start Recording + + + + + Stop Recording + + + + + Dispose + + + + + This class writes audio data to a .aif file on disk + + + + + Creates an Aiff file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Aiff File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + AiffFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new AiffFileWriter + + The filename to write to + The Wave Format of the output data + + + + The aiff file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + WaveFormat of this aiff file + + + + + Returns false: Cannot read from a AiffFileWriter + + + + + Returns true: Can write to a AiffFileWriter + + + + + Returns false: Cannot seek within a AiffFileWriter + + + + + Read is not supported for a AiffFileWriter + + + + + Seek is not supported for a AiffFileWriter + + + + + SetLength is not supported for AiffFileWriter + + + + + + Gets the Position in the AiffFile (i.e. number of bytes written so far) + + + + + Appends bytes to the AiffFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Aiff file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Aiff file + They will be converted to the appropriate bit depth depending on the WaveFormat of the AIF file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Aiff file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this AiffFileWriter + + + + + https://tech.ebu.ch/docs/tech/tech3285.pdf + + + + + Constructs a new BextChunkInfo + + + + + Description (max 256 chars) + + + + + Originator (max 32 chars) + + + + + Originator Reference (max 32 chars) + + + + + Originator Date Time + + + + + Origination Date as string + + + + + Origination as time + + + + + Time reference (first sample count since midnight) + + + + + version 2 has loudness stuff which we don't know so using version 1 + + + + + 64 bytes http://en.wikipedia.org/wiki/UMID + + + + + for version 2 = 180 bytes (10 before are loudness values), using version 1 = 190 bytes + + + + + Coding history arbitrary length string at end of structure + http://www.ebu.ch/CMSimages/fr/tec_text_r98-1999_tcm7-4709.pdf + A=PCM,F=48000,W=16,M=stereo,T=original,CR/LF + + + + + Broadcast WAVE File Writer + + + + + Createa a new BwfWriter + + Rarget filename + WaveFormat + Chunk information + + + + Write audio data to this BWF + + + + + Flush writer, and fix up header sizes + + + + + Disposes this writer + + + + + A wave file writer that adds cue support + + + + + Writes a wave file, including a cues chunk + + + + + Adds a cue to the Wave file + + Sample position + Label text + + + + Updates the header, and writes the cues out + + + + + IWaveBuffer interface use to store wave datas. + Data can be manipulated with arrays (,, + , ) that are pointing to the same memory buffer. + This is a requirement for all subclasses. + + Use the associated Count property based on the type of buffer to get the number of data in the + buffer. + + for the standard implementation using C# unions. + + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets the byte buffer count. + + The byte buffer count. + + + + Gets the float buffer count. + + The float buffer count. + + + + Gets the short buffer count. + + The short buffer count. + + + + Gets the int buffer count. + + The int buffer count. + + + + Represents the interface to a device that can play a WaveFile + + + + + Begin playback + + + + + Stop playback + + + + + Pause Playback + + + + + Obsolete init method + + + + + + + Initialise playback + + Function to create the waveprovider to be played + Called on the playback thread + + + + Current playback state + + + + + Indicates that playback has gone into a stopped state due to + reaching the end of the input stream or an error has been encountered during playback + + + + + Interface for IWavePlayers that can report position + + + + + Position (in terms of bytes played - does not necessarily translate directly to the position within the source audio file) + + Position in bytes + + + + Gets a instance indicating the format the hardware is using. + + + + + Generic interface for all WaveProviders. + + + + + Gets the WaveFormat of this WaveProvider. + + The wave format. + + + + Fill the specified buffer with wave data. + + The buffer to fill of wave data. + Offset into buffer + The number of bytes to read + the number of bytes written to the buffer. + + + + Like IWaveProvider, but makes it much simpler to put together a 32 bit floating + point mixing engine + + + + + Gets the WaveFormat of this Sample Provider. + + The wave format. + + + + Fill the specified buffer with 32 bit floating point samples + + The buffer to fill with samples. + Offset into buffer + The number of samples to read + the number of samples written to the buffer. + + + + Playback State + + + + + Stopped + + + + + Playing + + + + + Paused + + + + + Stopped Event Args + + + + + Initializes a new instance of StoppedEventArgs + + An exception to report (null if no exception) + + + + An exception. Will be null if the playback or record operation stopped due to + the user requesting stop or reached the end of the input audio + + + + + WASAPI Out for Windows RT + + + + + Playback Stopped + + + + + WASAPI Out using default audio endpoint + + ShareMode - shared or exclusive + Desired latency in milliseconds + + + + Creates a new WASAPI Output + + Device to use + + + + + + Properties of the client's audio stream. + Set before calling init + + + + + Sets the parameters that describe the properties of the client's audio stream. + + Boolean value to indicate whether or not the audio stream is hardware-offloaded. + An enumeration that is used to specify the category of the audio stream. + A bit-field describing the characteristics of the stream. Supported in Windows 8.1 and later. + + + + Begin Playback + + + + + Stop playback and flush buffers + + + + + Stop playback without flushing buffers + + + + + Old init implementation. Use the func one + + + + + + + Initializes with a function to create the provider that is made on the playback thread + + Creates the wave provider + + + + Initialize for playing the specified wave stream + + + + + Playback State + + + + + Dispose + + + + + Some useful native methods for Windows 8/10 support ( https://msdn.microsoft.com/en-us/library/windows/desktop/hh802935(v=vs.85).aspx ) + + + + + Enables Windows Store apps to access preexisting Component Object Model (COM) interfaces in the WASAPI family. + + A device interface ID for an audio device. This is normally retrieved from a DeviceInformation object or one of the methods of the MediaDevice class. + The IID of a COM interface in the WASAPI family, such as IAudioClient. + Interface-specific activation parameters. For more information, see the pActivationParams parameter in IMMDevice::Activate. + + + + + + The GetBufferSize method retrieves the size (maximum capacity) of the endpoint buffer. + + + + + The GetService method accesses additional services from the audio client object. + + The interface ID for the requested service. + Pointer to a pointer variable into which the method writes the address of an instance of the requested interface. + + + + WaveBuffer class use to store wave datas. Data can be manipulated with arrays + (,,, ) that are pointing to the + same memory buffer. Use the associated Count property based on the type of buffer to get the number of + data in the buffer. + Implicit casting is now supported to float[], byte[], int[], short[]. + You must not use Length on returned arrays. + + n.b. FieldOffset is 8 now to allow it to work natively on 64 bit + + + + + Number of Bytes + + + + + Initializes a new instance of the class. + + The number of bytes. The size of the final buffer will be aligned on 4 Bytes (upper bound) + + + + Initializes a new instance of the class binded to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Binds this WaveBuffer instance to a specific byte buffer. + + A byte buffer to bound the WaveBuffer to. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The wave buffer. + The result of the conversion. + + + + Gets the byte buffer. + + The byte buffer. + + + + Gets the float buffer. + + The float buffer. + + + + Gets the short buffer. + + The short buffer. + + + + Gets the int buffer. + + The int buffer. + + + + Gets the max size in bytes of the byte buffer.. + + Maximum number of bytes in the buffer. + + + + Gets or sets the byte buffer count. + + The byte buffer count. + + + + Gets or sets the float buffer count. + + The float buffer count. + + + + Gets or sets the short buffer count. + + The short buffer count. + + + + Gets or sets the int buffer count. + + The int buffer count. + + + + Clears the associated buffer. + + + + + Copy this WaveBuffer to a destination buffer up to ByteBufferCount bytes. + + + + + Checks the validity of the count parameters. + + Name of the arg. + The value. + The size of value. + + + + This class writes WAV data to a .wav file on disk + + + + + Creates a 16 bit Wave File from an ISampleProvider + BEWARE: the source provider must not return data indefinitely + + The filename to write to + The source sample provider + + + + Creates a Wave file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + Writes to a stream by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The stream the method will output to + The source WaveProvider + + + + WaveFileWriter that actually writes to a stream + + Stream to be written to + Wave format to use + + + + Creates a new WaveFileWriter + + The filename to write to + The Wave Format of the output data + + + + The wave file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + Total time (calculated from Length and average bytes per second) + + + + + WaveFormat of this wave file + + + + + Returns false: Cannot read from a WaveFileWriter + + + + + Returns true: Can write to a WaveFileWriter + + + + + Returns false: Cannot seek within a WaveFileWriter + + + + + Read is not supported for a WaveFileWriter + + + + + Seek is not supported for a WaveFileWriter + + + + + SetLength is not supported for WaveFileWriter + + + + + + Gets the Position in the WaveFile (i.e. number of bytes written so far) + + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Writes a single sample to the Wave file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Wave file + They will be converted to the appropriate bit depth depending on the WaveFormat of the WAV file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + Also updates header, so that WAV file will be valid up to the point currently written + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this WaveFileWriter + + + + + This class writes WAV data to a .wav file on disk + + + + + Creates a 16 bit Wave File from an ISampleProvider + BEWARE: the source provider must not return data indefinitely + + The filename to write to + The source sample provider + + + + Creates a Wave file by reading all the data from a WaveProvider + BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, + or the Wave File will grow indefinitely. + + The filename to use + The source WaveProvider + + + + WaveFileWriterRT that actually writes to a stream + + Stream to be written to + Wave format to use + + + + The wave file name or null if not applicable + + + + + Number of bytes of audio in the data chunk + + + + + WaveFormat of this wave file + + + + + Returns false: Cannot read from a WaveFileWriterRT + + + + + Returns true: Can write to a WaveFileWriterRT + + + + + Returns false: Cannot seek within a WaveFileWriterRT + + + + + Returns false: Cannot timeout within a WaveFileWriterRT + + + + + CopyToAsync is not supported for a WaveFileWriterRT + + + + + Read is not supported for a WaveFileWriterRT + + + + + ReadAsync is not supported for a WaveFileWriterRT + + + + + ReadByte is not supported for a WaveFileWriterRT + + + + + Seek is not supported for a WaveFileWriterRT + + + + + SetLength is not supported for WaveFileWriterRT + + + + + + Gets the Position in the WaveFile (i.e. number of bytes written so far) + + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + + + + Appends bytes to the WaveFile (assumes they are already in the correct format) + + the buffer containing the wave data + the offset from which to start writing + the number of bytes to write + Cancellation token + + + + WriteByte is not supported for a WaveFileWriterRT + Use instead + + value to write + + + + Writes a single sample to the Wave file + + the sample to write (assumed floating point with 1.0f as max value) + + + + Writes 32 bit floating point samples to the Wave file + They will be converted to the appropriate bit depth depending on the WaveFormat of the WAV file + + The buffer containing the floating point samples + The offset from which to start writing + The number of floating point samples to write + + + + Writes 16 bit samples to the Wave file + + The buffer containing the 16 bit samples + The offset from which to start writing + The number of 16 bit samples to write + + + + Ensures data is written to disk + + + + + Ensures data is written to disk + + + + + Actually performs the close,making sure the header contains the correct data + + True if called from Dispose + + + + Updates the header with file size information + + + + + Finaliser - should only be called if the user forgot to close this WaveFileWriterRT + + + + + Provides a buffered store of samples + Read method will return queued samples or fill buffer with zeroes + Now backed by a circular buffer + + + + + Creates a new buffered WaveProvider + + WaveFormat + + + + If true, always read the amount of data requested, padding with zeroes if necessary + By default is set to true + + + + + Buffer length in bytes + + + + + Buffer duration + + + + + If true, when the buffer is full, start throwing away data + if false, AddSamples will throw an exception when buffer is full + + + + + The number of buffered bytes + + + + + Buffered Duration + + + + + Gets the WaveFormat + + + + + Adds samples. Takes a copy of buffer, so that buffer can be reused if necessary + + + + + Reads from this WaveProvider + Will always return count bytes, since we will zero-fill the buffer if not enough available + + + + + Discards all audio from the buffer + + + + + WaveProvider that can mix together multiple 32 bit floating point input provider + All channels must have the same number of inputs and same sample rate + n.b. Work in Progress - not tested yet + + + + + Creates a new MixingWaveProvider32 + + + + + Creates a new 32 bit MixingWaveProvider32 + + inputs - must all have the same format. + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove an input from the mixer + + waveProvider to remove + + + + The number of inputs to this mixer + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Converts from mono to stereo, allowing freedom to route all, some, or none of the incoming signal to left or right channels + + + + + Creates a new stereo waveprovider based on a mono input + + Mono 16 bit PCM input + + + + 1.0 to copy the mono stream to the left channel without adjusting volume + + + + + 1.0 to copy the mono stream to the right channel without adjusting volume + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Allows any number of inputs to be patched to outputs + Uses could include swapping left and right channels, turning mono into stereo, + feeding different input sources to different soundcard outputs etc + + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels. Number of outputs is equal to total number of channels in inputs + + Input wave providers. Must all be of the same format, but can have any number of channels + + + + Creates a multiplexing wave provider, allowing re-patching of input channels to different + output channels + + Input wave providers. Must all be of the same format, but can have any number of channels + Desired number of output channels. (-1 means use total number of input channels) + + + + persistent temporary buffer to prevent creating work for garbage collector + + + + + Reads data from this WaveProvider + + Buffer to be filled with sample data + Offset to write to within buffer, usually 0 + Number of bytes required + Number of bytes read + + + + The WaveFormat of this WaveProvider + + + + + Connects a specified input channel to an output channel + + Input Channel index (zero based). Must be less than InputChannelCount + Output Channel index (zero based). Must be less than OutputChannelCount + + + + The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in + one stereo and one mono input provider, the number of input channels is three. + + + + + The number of output channels, as specified in the constructor. + + + + + Silence producing wave provider + Useful for playing silence when doing a WASAPI Loopback Capture + + + + + Creates a new silence producing wave provider + + Desired WaveFormat (should be PCM / IEE float + + + + Read silence from into the buffer + + + + + WaveFormat of this silence producing wave provider + + + + + Takes a stereo 16 bit input and turns it mono, allowing you to select left or right channel only or mix them together + + + + + Creates a new mono waveprovider based on a stereo input + + Stereo 16 bit PCM input + + + + 1.0 to mix the mono source entirely to the left channel + + + + + 1.0 to mix the mono source entirely to the right channel + + + + + Output Wave Format + + + + + Reads bytes from this WaveProvider + + + + + Helper class allowing us to modify the volume of a 16 bit stream without converting to IEEE float + + + + + Constructs a new VolumeWaveProvider16 + + Source provider, must be 16 bit PCM + + + + Gets or sets volume. + 1.0 is full scale, 0.0 is silence, anything over 1.0 will amplify but potentially clip + + + + + WaveFormat of this WaveProvider + + + + + Read bytes from this WaveProvider + + Buffer to read into + Offset within buffer to read to + Bytes desired + Bytes read + + + + Converts 16 bit PCM to IEEE float, optionally adjusting volume along the way + + + + + Creates a new Wave16toFloatProvider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Converts IEEE float to 16 bit PCM, optionally clipping and adjusting volume along the way + + + + + Creates a new WaveFloatTo16Provider + + the source provider + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Buffered WaveProvider taking source data from WaveIn + + + + + Creates a new WaveInProvider + n.b. Should make sure the WaveFormat is set correctly on IWaveIn before calling + + The source of wave data + + + + Reads data from the WaveInProvider + + + + + The WaveFormat + + + + + Base class for creating a 16 bit wave provider + + + + + Initializes a new instance of the WaveProvider16 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider16 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a short array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Base class for creating a 32 bit floating point wave provider + Can also be used as a base class for an ISampleProvider that can + be plugged straight into anything requiring an IWaveProvider + + + + + Initializes a new instance of the WaveProvider32 class + defaulting to 44.1kHz mono + + + + + Initializes a new instance of the WaveProvider32 class with the specified + sample rate and number of channels + + + + + Allows you to specify the sample rate and channels for this WaveProvider + (should be initialised before you pass it to a wave player) + + + + + Implements the Read method of IWaveProvider by delegating to the abstract + Read method taking a float array + + + + + Method to override in derived classes + Supply the requested number of samples into the buffer + + + + + The Wave Format + + + + + Utility class to intercept audio from an IWaveProvider and + save it to disk + + + + + Constructs a new WaveRecorder + + The location to write the WAV file to + The Source Wave Provider + + + + Read simply returns what the source returns, but writes to disk along the way + + + + + The WaveFormat + + + + + Closes the WAV file + + + + A read-only stream of AIFF data based on an aiff file + with an associated WaveFormat + originally contributed to NAudio by Giawa + + + + Supports opening a AIF file + The AIF is of similar nastiness to the WAV format. + This supports basic reading of uncompressed PCM AIF files, + with 8, 16, 24 and 32 bit PCM data. + + + + + Creates an Aiff File Reader based on an input stream + + The input stream containing a AIF file including header + + + + Ensures valid AIFF header and then finds data offset. + + The stream, positioned at the start of audio data + The format found + The position of the data chunk + The length of the data chunk + Additional chunks found + + + + Cleans up the resources associated with this AiffFileReader + + + + + + + + + + + + + + + Number of Samples (if possible to calculate) + + + + + Position in the AIFF file + + + + + + Reads bytes from the AIFF File + + + + + + AIFF Chunk + + + + + Chunk Name + + + + + Chunk Length + + + + + Chunk start + + + + + Creates a new AIFF Chunk + + + + + Helper stream that lets us read from compressed audio files with large block alignment + as though we could read any amount and reposition anywhere + + + + + Creates a new BlockAlignReductionStream + + the input stream + + + + Block alignment of this stream + + + + + Wave Format + + + + + Length of this Stream + + + + + Current position within stream + + + + + Disposes this WaveStream + + + + + Reads data from this stream + + + + + + + + + Implementation of Com IStream + + + + + Holds information on a cue: a labeled position within a Wave file + + + + + Cue position in samples + + + + + Label of the cue + + + + + Creates a Cue based on a sample position and label + + + + + + + Holds a list of cues + + + The specs for reading and writing cues from the cue and list RIFF chunks + are from http://www.sonicspot.com/guide/wavefiles.html and http://www.wotsit.org/ + ------------------------------ + The cues are stored like this: + ------------------------------ + struct CuePoint + { + Int32 dwIdentifier; + Int32 dwPosition; + Int32 fccChunk; + Int32 dwChunkStart; + Int32 dwBlockStart; + Int32 dwSampleOffset; + } + + struct CueChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwCuePoints; + CuePoint[] points; + } + ------------------------------ + Labels look like this: + ------------------------------ + struct ListHeader + { + Int32 listID; /* 'list' */ + Int32 chunkSize; /* includes the Type ID below */ + Int32 typeID; /* 'adtl' */ + } + + struct LabelChunk + { + Int32 chunkID; + Int32 chunkSize; + Int32 dwIdentifier; + Char[] dwText; /* Encoded with extended ASCII */ + } LabelChunk; + + + + + Creates an empty cue list + + + + + Adds an item to the list + + Cue + + + + Gets sample positions for the embedded cues + + Array containing the cue positions + + + + Gets labels for the embedded cues + + Array containing the labels + + + + Creates a cue list from the cue RIFF chunk and the list RIFF chunk + + The data contained in the cue chunk + The data contained in the list chunk + + + + Gets the cues as the concatenated cue and list RIFF chunks. + + RIFF chunks containing the cue data + + + + Number of cues + + + + + Accesses the cue at the specified index + + + + + + + Checks if the cue and list chunks exist and if so, creates a cue list + + + + + A wave file reader supporting cue reading + + + + + Loads a wavefile and supports reading cues + + + + + + Loads a wave from a stream and supports reading cues + + + + + + Cue List (can be null if cues not present) + + + + + An interface for WaveStreams which can report notification of individual samples + + + + + A sample has been detected + + + + + Sample event arguments + + + + + Left sample + + + + + Right sample + + + + + Constructor + + + + + Class for reading any file that Media Foundation can play + Will only work in Windows Vista and above + Automatically converts to PCM + If it is a video file with multiple audio streams, it will pick out the first audio stream + + + + + Allows customisation of this reader class + + + + + Sets up the default settings for MediaFoundationReader + + + + + Allows us to request IEEE float output (n.b. no guarantee this will be accepted) + + + + + If true, the reader object created in the constructor is used in Read + Should only be set to true if you are working entirely on an STA thread, or + entirely with MTA threads. + + + + + If true, the reposition does not happen immediately, but waits until the + next call to read to be processed. + + + + + Default constructor + + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename (can also be a URL e.g. http:// mms:// file://) + + + + Creates a new MediaFoundationReader based on the supplied file + + Filename + Advanced settings + + + + Initializes + + + + + Creates the reader (overridable by ) + + + + + Reads from this wave stream + + Buffer to read into + Offset in buffer + Bytes required + Number of bytes read; 0 indicates end of stream + + + + WaveFormat of this stream (n.b. this is after converting to PCM) + + + + + The bytesRequired of this stream in bytes (n.b may not be accurate) + + + + + Current position within this stream + + + + + Cleans up after finishing with this reader + + true if called from Dispose + + + + WaveFormat has changed + + + + + WaveStream that simply passes on data from its source stream + (e.g. a MemoryStream) + + + + + Initialises a new instance of RawSourceWaveStream + + The source stream containing raw audio + The waveformat of the audio in the source stream + + + + Initialises a new instance of RawSourceWaveStream + + The buffer containing raw audio + Offset in the source buffer to read from + Number of bytes to read in the buffer + The waveformat of the audio in the source stream + + + + The WaveFormat of this stream + + + + + The length in bytes of this stream (if supported) + + + + + The current position in this stream + + + + + Reads data from the stream + + + + + Wave Stream for converting between sample rates + + + + + WaveStream to resample using the DMO Resampler + + Input Stream + Desired Output Format + + + + Stream Wave Format + + + + + Stream length in bytes + + + + + Stream position in bytes + + + + + Reads data from input stream + + buffer + offset into buffer + Bytes required + Number of bytes read + + + + Dispose + + True if disposing (not from finalizer) + + + + Holds information about a RIFF file chunk + + + + + Creates a RiffChunk object + + + + + The chunk identifier + + + + + The chunk identifier converted to a string + + + + + The chunk length + + + + + The stream position this chunk is located at + + + + + A simple compressor + + + + + Create a new simple compressor stream + + Source stream + + + + Make-up Gain + + + + + Threshold + + + + + Ratio + + + + + Attack time + + + + + Release time + + + + + Turns gain on or off + + + + + Gets the WaveFormat of this stream + + + + + Reads bytes from this stream + + Buffer to read into + Offset in array to read into + Number of bytes to read + Number of bytes read + + + + MediaFoundationReader supporting reading from a stream + + + + + Constructs a new media foundation reader from a stream + + + + + Creates the reader + + + + + WaveStream that converts 32 bit audio back down to 16 bit, clipping if necessary + + + + + The method reuses the same buffer to prevent + unnecessary allocations. + + + + + Creates a new Wave32To16Stream + + the source stream + + + + Sets the volume for this stream. 1.0f is full scale + + + + + + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + Destination buffer + Offset into destination buffer + + Number of bytes read. + + + + Conversion to 16 bit and clipping + + + + + + + + + + Clip indicator. Can be reset. + + + + + Disposes this WaveStream + + + + + Represents Channel for the WaveMixerStream + 32 bit output and 16 bit input + It's output is always stereo + The input stream can be panned + + + + + Creates a new WaveChannel32 + + the source stream + stream volume (1 is 0dB) + pan control (-1 to 1) + + + + Creates a WaveChannel32 with default settings + + The source stream + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + If true, Read always returns the number of bytes requested + + + + + + + + + + Volume of this channel. 1.0 = full scale + + + + + Pan of this channel (from -1 to 1) + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + Sample + + + + + Raise the sample event (no check for null because it has already been done) + + + + This class supports the reading of WAV files, + providing a repositionable WaveStream that returns the raw data + contained in the WAV file + + + + Supports opening a WAV file + The WAV file format is a real mess, but we will only + support the basic WAV file format which actually covers the vast + majority of WAV files out there. For more WAV file format information + visit www.wotsit.org. If you have a WAV file that can't be read by + this class, email it to the NAudio project and we will probably + fix this reader to support it + + + + + Creates a Wave File Reader based on an input stream + + The input stream containing a WAV file including header + + + + Gets a list of the additional chunks found in this file + + + + + Gets the data for the specified chunk + + + + + Cleans up the resources associated with this WaveFileReader + + + + + + + + + + This is the length of audio data contained in this WAV file, in bytes + (i.e. the byte length of the data chunk, not the length of the WAV file itself) + + + + + + Number of Sample Frames (if possible to calculate) + This currently does not take into account number of channels + Multiply number of channels if you want the total number of samples + + + + + Position in the WAV data chunk. + + + + + + Reads bytes from the Wave File + + + + + + Attempts to read the next sample or group of samples as floating point normalised into the range -1.0f to 1.0f + + An array of samples, 1 for mono, 2 for stereo etc. Null indicates end of file reached + + + + + Attempts to read a sample into a float. n.b. only applicable for uncompressed formats + Will normalise the value read into the range -1.0f to 1.0f if it comes from a PCM encoding + + False if the end of the WAV data chunk was reached + + + + A buffer of Wave samples + + + + + creates a new wavebuffer + + WaveIn device to write to + Buffer size in bytes + + + + Place this buffer back to record more audio + + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + + Provides access to the actual record buffer (for reading only) + + + + + Indicates whether the Done flag is set on this buffer + + + + + Indicates whether the InQueue flag is set on this buffer + + + + + Number of bytes recorded + + + + + The buffer size in bytes + + + + + WaveStream that can mix together multiple 32 bit input streams + (Normally used with stereo input channels) + All channels must have the same number of inputs + + + + + Creates a new 32 bit WaveMixerStream + + + + + Creates a new 32 bit WaveMixerStream + + An Array of WaveStreams - must all have the same format. + Use WaveChannel is designed for this purpose. + Automatically stop when all inputs have been read + Thrown if the input streams are not 32 bit floating point, + or if they have different formats to each other + + + + Add a new input to the mixer + + The wave input to add + + + + Remove a WaveStream from the mixer + + waveStream to remove + + + + The number of inputs to this mixer + + + + + Automatically stop when all inputs have been read + + + + + Reads bytes from this wave stream + + buffer to read into + offset into buffer + number of bytes required + Number of bytes read. + Thrown if an invalid number of bytes requested + + + + Actually performs the mixing + + + + + + + + + + Length of this Wave Stream (in bytes) + + + + + + Position within this Wave Stream (in bytes) + + + + + + + + + + + Disposes this WaveStream + + + + + Simply shifts the input stream in time, optionally + clipping its start and end. + (n.b. may include looping in the future) + + + + + Creates a new WaveOffsetStream + + the source stream + the time at which we should start reading from the source stream + amount to trim off the front of the source stream + length of time to play from source stream + + + + Creates a WaveOffsetStream with default settings (no offset or pre-delay, + and whole length of source stream) + + The source stream + + + + The length of time before which no audio will be played + + + + + An offset into the source stream from which to start playing + + + + + Length of time to read from the source stream + + + + + Gets the block alignment for this WaveStream + + + + + Returns the stream length + + + + + Gets or sets the current position in the stream + + + + + Reads bytes from this wave stream + + The destination buffer + Offset into the destination buffer + Number of bytes read + Number of bytes read. + + + + + + + + + Determines whether this channel has any data to play + to allow optimisation to not read, but bump position forward + + + + + Disposes this WaveStream + + + + + A buffer of Wave samples for streaming to a Wave Output device + + + + + creates a new wavebuffer + + WaveOut device to write to + Buffer size in bytes + Stream to provide more data + Lock to protect WaveOut API's from being called on >1 thread + + + + Finalizer for this wave buffer + + + + + Releases resources held by this WaveBuffer + + + + + Releases resources held by this WaveBuffer + + + + this is called by the WAVE callback and should be used to refill the buffer + + + + Whether the header's in queue flag is set + + + + + The buffer size in bytes + + + + + Base class for all WaveStream classes. Derives from stream. + + + + + Retrieves the WaveFormat for this stream + + + + + We can read from this stream + + + + + We can seek within this stream + + + + + We can't write to this stream + + + + + Flush does not need to do anything + See + + + + + An alternative way of repositioning. + See + + + + + Sets the length of the WaveStream. Not Supported. + + + + + + Writes to the WaveStream. Not Supported. + + + + + The block alignment for this wavestream. Do not modify the Position + to anything that is not a whole multiple of this value + + + + + Moves forward or backwards the specified number of seconds in the stream + + Number of seconds to move, can be negative + + + + The current position in the stream in Time format + + + + + Total length in real-time of the stream (may be an estimate for compressed files) + + + + + Whether the WaveStream has non-zero sample data at the current position for the + specified count + + Number of bytes to read + + + + MP3 Frame decompressor using the Windows Media MP3 Decoder DMO object + + + + + Initializes a new instance of the DMO MP3 Frame decompressor + + + + + + Converted PCM WaveFormat + + + + + Decompress a single frame of MP3 + + + + + Alerts us that a reposition has occured so the MP3 decoder needs to reset its state + + + + + Dispose of this obejct and clean up resources + + + + + http://tech.ebu.ch/docs/tech/tech3306-2009.pdf + + + + + WaveFormat + + + + + Data Chunk Position + + + + + Data Chunk Length + + + + + Riff Chunks + + + + + Soundfont generator + + + + + Gets the generator type + + + + + Generator amount as an unsigned short + + + + + Generator amount as a signed short + + + + + Low byte amount + + + + + High byte amount + + + + + Instrument + + + + + Sample Header + + + + + + + + + + Generator types + + + + Start address offset + + + End address offset + + + Start loop address offset + + + End loop address offset + + + Start address coarse offset + + + Modulation LFO to pitch + + + Vibrato LFO to pitch + + + Modulation envelope to pitch + + + Initial filter cutoff frequency + + + Initial filter Q + + + Modulation LFO to filter Cutoff frequency + + + Modulation envelope to filter cutoff frequency + + + End address coarse offset + + + Modulation LFO to volume + + + Unused + + + Chorus effects send + + + Reverb effects send + + + Pan + + + Unused + + + Unused + + + Unused + + + Delay modulation LFO + + + Frequency modulation LFO + + + Delay vibrato LFO + + + Frequency vibrato LFO + + + Delay modulation envelope + + + Attack modulation envelope + + + Hold modulation envelope + + + Decay modulation envelope + + + Sustain modulation envelop + + + Release modulation envelope + + + Key number to modulation envelope hold + + + Key number to modulation envelope decay + + + Delay volume envelope + + + Attack volume envelope + + + Hold volume envelope + + + Decay volume envelope + + + Sustain volume envelope + + + Release volume envelope + + + Key number to volume envelope hold + + + Key number to volume envelope decay + + + Instrument + + + Reserved + + + Key range + + + Velocity range + + + Start loop address coarse offset + + + Key number + + + Velocity + + + Initial attenuation + + + Reserved + + + End loop address coarse offset + + + Coarse tune + + + Fine tune + + + Sample ID + + + Sample modes + + + Reserved + + + Scale tuning + + + Exclusive class + + + Overriding root key + + + Unused + + + Unused + + + + A soundfont info chunk + + + + + SoundFont Version + + + + + WaveTable sound engine + + + + + Bank name + + + + + Data ROM + + + + + Creation Date + + + + + Author + + + + + Target Product + + + + + Copyright + + + + + Comments + + + + + Tools + + + + + ROM Version + + + + + + + + + + SoundFont instrument + + + + + instrument name + + + + + Zones + + + + + + + + + + Instrument Builder + + + + + Transform Types + + + + + Linear + + + + + Modulator + + + + + Source Modulation data type + + + + + Destination generator type + + + + + Amount + + + + + Source Modulation Amount Type + + + + + Source Transform Type + + + + + + + + + + Controller Sources + + + + + No Controller + + + + + Note On Velocity + + + + + Note On Key Number + + + + + Poly Pressure + + + + + Channel Pressure + + + + + Pitch Wheel + + + + + Pitch Wheel Sensitivity + + + + + Source Types + + + + + Linear + + + + + Concave + + + + + Convex + + + + + Switch + + + + + Modulator Type + + + + + + + + + + + A SoundFont Preset + + + + + Preset name + + + + + Patch Number + + + + + Bank number + 0 - 127, GM percussion bank is 128 + + + + + Zones + + + + + + + + + + Class to read the SoundFont file presets chunk + + + + + The Presets contained in this chunk + + + + + The instruments contained in this chunk + + + + + The sample headers contained in this chunk + + + + + + + + + + just reads a chunk ID at the current position + + chunk ID + + + + reads a chunk at the current position + + + + + creates a new riffchunk from current position checking that we're not + at the end of this chunk first + + the new chunk + + + + useful for chunks that just contain a string + + chunk as string + + + + A SoundFont Sample Header + + + + + The sample name + + + + + Start offset + + + + + End offset + + + + + Start loop point + + + + + End loop point + + + + + Sample Rate + + + + + Original pitch + + + + + Pitch correction + + + + + Sample Link + + + + + SoundFont Sample Link Type + + + + + + + + + + SoundFont sample modes + + + + + No loop + + + + + Loop Continuously + + + + + Reserved no loop + + + + + Loop and continue + + + + + Sample Link Type + + + + + Mono Sample + + + + + Right Sample + + + + + Left Sample + + + + + Linked Sample + + + + + ROM Mono Sample + + + + + ROM Right Sample + + + + + ROM Left Sample + + + + + ROM Linked Sample + + + + + SoundFont Version Structure + + + + + Major Version + + + + + Minor Version + + + + + Builds a SoundFont version + + + + + Reads a SoundFont Version structure + + + + + Writes a SoundFont Version structure + + + + + Gets the length of this structure + + + + + Represents a SoundFont + + + + + Loads a SoundFont from a stream + + stream + + + + The File Info Chunk + + + + + The Presets + + + + + The Instruments + + + + + The Sample Headers + + + + + The Sample Data + + + + + + + + + + base class for structures that can read themselves + + + + + A SoundFont zone + + + + + + + + + + Modulators for this Zone + + + + + Generators for this Zone + + + + + Audio Subtype GUIDs + http://msdn.microsoft.com/en-us/library/windows/desktop/aa372553%28v=vs.85%29.aspx + + + + + Advanced Audio Coding (AAC). + + + + + Not used + + + + + Dolby AC-3 audio over Sony/Philips Digital Interface (S/PDIF). + + + + + Encrypted audio data used with secure audio path. + + + + + Digital Theater Systems (DTS) audio. + + + + + Uncompressed IEEE floating-point audio. + + + + + MPEG Audio Layer-3 (MP3). + + + + + MPEG-1 audio payload. + + + + + Windows Media Audio 9 Voice codec. + + + + + Uncompressed PCM audio. + + + + + Windows Media Audio 9 Professional codec over S/PDIF. + + + + + Windows Media Audio 9 Lossless codec or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 8 codec, Windows Media Audio 9 codec, or Windows Media Audio 9.1 codec. + + + + + Windows Media Audio 9 Professional codec or Windows Media Audio 9.1 Professional codec. + + + + + Dolby Digital (AC-3). + + + + + MPEG-4 and AAC Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + Dolby Audio Types + http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx + Reference : wmcodecdsp.h + + + + + μ-law coding + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Adaptive delta pulse code modulation (ADPCM) + http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx + Reference : Ksmedia.h + + + + + Dolby Digital Plus formatted for HDMI output. + http://msdn.microsoft.com/en-us/library/windows/hardware/ff538392(v=vs.85).aspx + Reference : internet + + + + + MSAudio1 - unknown meaning + Reference : wmcodecdsp.h + + + + + IMA ADPCM ACM Wrapper + + + + + WMSP2 - unknown meaning + Reference: wmsdkidl.h + + + + + IMFActivate, defined in mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Creates the object associated with this activation object. + + + + + Shuts down the created object. + + + + + Detaches the created object from the activation object. + + + + + Provides a generic way to store key/value pairs on an object. + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms704598%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + IMFByteStream + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms698720%28v=vs.85%29.aspx + + + + + Retrieves the characteristics of the byte stream. + virtual HRESULT STDMETHODCALLTYPE GetCapabilities(/*[out]*/ __RPC__out DWORD *pdwCapabilities) = 0; + + + + + Retrieves the length of the stream. + virtual HRESULT STDMETHODCALLTYPE GetLength(/*[out]*/ __RPC__out QWORD *pqwLength) = 0; + + + + + Sets the length of the stream. + virtual HRESULT STDMETHODCALLTYPE SetLength(/*[in]*/ QWORD qwLength) = 0; + + + + + Retrieves the current read or write position in the stream. + virtual HRESULT STDMETHODCALLTYPE GetCurrentPosition(/*[out]*/ __RPC__out QWORD *pqwPosition) = 0; + + + + + Sets the current read or write position. + virtual HRESULT STDMETHODCALLTYPE SetCurrentPosition(/*[in]*/ QWORD qwPosition) = 0; + + + + + Queries whether the current position has reached the end of the stream. + virtual HRESULT STDMETHODCALLTYPE IsEndOfStream(/*[out]*/ __RPC__out BOOL *pfEndOfStream) = 0; + + + + + Reads data from the stream. + virtual HRESULT STDMETHODCALLTYPE Read(/*[size_is][out]*/ __RPC__out_ecount_full(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbRead) = 0; + + + + + Begins an asynchronous read operation from the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginRead(/*[out]*/ _Out_writes_bytes_(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous read operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndRead(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbRead) = 0; + + + + + Writes data to the stream. + virtual HRESULT STDMETHODCALLTYPE Write(/*[size_is][in]*/ __RPC__in_ecount_full(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbWritten) = 0; + + + + + Begins an asynchronous write operation to the stream. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginWrite(/*[in]*/ _In_reads_bytes_(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; + + + + + Completes an asynchronous write operation. + virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndWrite(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbWritten) = 0; + + + + + Moves the current position in the stream by a specified offset. + virtual HRESULT STDMETHODCALLTYPE Seek(/*[in]*/ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, /*[in]*/ LONGLONG llSeekOffset, /*[in]*/ DWORD dwSeekFlags, /*[out]*/ __RPC__out QWORD *pqwCurrentPosition) = 0; + + + + + Clears any internal buffers used by the stream. + virtual HRESULT STDMETHODCALLTYPE Flush( void) = 0; + + + + + Closes the stream and releases any resources associated with the stream. + virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; + + + + + Represents a generic collection of IUnknown pointers. + + + + + Retrieves the number of objects in the collection. + + + + + Retrieves an object in the collection. + + + + + Adds an object to the collection. + + + + + Removes an object from the collection. + + + + + Removes an object from the collection. + + + + + Removes all items from the collection. + + + + + IMFMediaBuffer + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms696261%28v=vs.85%29.aspx + + + + + Gives the caller access to the memory in the buffer. + + + + + Unlocks a buffer that was previously locked. + + + + + Retrieves the length of the valid data in the buffer. + + + + + Sets the length of the valid data in the buffer. + + + + + Retrieves the allocated size of the buffer. + + + + + IMFMediaEvent - Represents an event generated by a Media Foundation object. Use this interface to get information about the event. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms702249%28v=vs.85%29.aspx + Mfobjects.h + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the event type. + + + virtual HRESULT STDMETHODCALLTYPE GetType( + /* [out] */ __RPC__out MediaEventType *pmet) = 0; + + + + + Retrieves the extended type of the event. + + + virtual HRESULT STDMETHODCALLTYPE GetExtendedType( + /* [out] */ __RPC__out GUID *pguidExtendedType) = 0; + + + + + Retrieves an HRESULT that specifies the event status. + + + virtual HRESULT STDMETHODCALLTYPE GetStatus( + /* [out] */ __RPC__out HRESULT *phrStatus) = 0; + + + + + Retrieves the value associated with the event, if any. + + + virtual HRESULT STDMETHODCALLTYPE GetValue( + /* [out] */ __RPC__out PROPVARIANT *pvValue) = 0; + + + + + Represents a description of a media format. + http://msdn.microsoft.com/en-us/library/windows/desktop/ms704850%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves the major type of the format. + + + + + Queries whether the media type is a compressed format. + + + + + Compares two media types and determines whether they are identical. + + + + + Retrieves an alternative representation of the media type. + + + + + Frees memory that was allocated by the GetRepresentation method. + + + + + Creates an instance of either the sink writer or the source reader. + + + + + Creates an instance of the sink writer or source reader, given a URL. + + + + + Creates an instance of the sink writer or source reader, given an IUnknown pointer. + + + + + CLSID_MFReadWriteClassFactory + + + + + http://msdn.microsoft.com/en-gb/library/windows/desktop/ms702192%28v=vs.85%29.aspx + + + + + Retrieves the value associated with a key. + + + + + Retrieves the data type of the value associated with a key. + + + + + Queries whether a stored attribute value equals a specified PROPVARIANT. + + + + + Compares the attributes on this object with the attributes on another object. + + + + + Retrieves a UINT32 value associated with a key. + + + + + Retrieves a UINT64 value associated with a key. + + + + + Retrieves a double value associated with a key. + + + + + Retrieves a GUID value associated with a key. + + + + + Retrieves the length of a string value associated with a key. + + + + + Retrieves a wide-character string associated with a key. + + + + + Retrieves a wide-character string associated with a key. This method allocates the memory for the string. + + + + + Retrieves the length of a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. + + + + + Retrieves a byte array associated with a key. This method allocates the memory for the array. + + + + + Retrieves an interface pointer associated with a key. + + + + + Associates an attribute value with a key. + + + + + Removes a key/value pair from the object's attribute list. + + + + + Removes all key/value pairs from the object's attribute list. + + + + + Associates a UINT32 value with a key. + + + + + Associates a UINT64 value with a key. + + + + + Associates a double value with a key. + + + + + Associates a GUID value with a key. + + + + + Associates a wide-character string with a key. + + + + + Associates a byte array with a key. + + + + + Associates an IUnknown pointer with a key. + + + + + Locks the attribute store so that no other thread can access it. + + + + + Unlocks the attribute store. + + + + + Retrieves the number of attributes that are set on this object. + + + + + Retrieves an attribute at the specified index. + + + + + Copies all of the attributes from this object into another attribute store. + + + + + Retrieves flags associated with the sample. + + + + + Sets flags associated with the sample. + + + + + Retrieves the presentation time of the sample. + + + + + Sets the presentation time of the sample. + + + + + Retrieves the duration of the sample. + + + + + Sets the duration of the sample. + + + + + Retrieves the number of buffers in the sample. + + + + + Retrieves a buffer from the sample. + + + + + Converts a sample with multiple buffers into a sample with a single buffer. + + + + + Adds a buffer to the end of the list of buffers in the sample. + + + + + Removes a buffer at a specified index from the sample. + + + + + Removes all buffers from the sample. + + + + + Retrieves the total length of the valid data in all of the buffers in the sample. + + + + + Copies the sample data to a buffer. + + + + + Implemented by the Microsoft Media Foundation sink writer object. + + + + + Adds a stream to the sink writer. + + + + + Sets the input format for a stream on the sink writer. + + + + + Initializes the sink writer for writing. + + + + + Delivers a sample to the sink writer. + + + + + Indicates a gap in an input stream. + + + + + Places a marker in the specified stream. + + + + + Notifies the media sink that a stream has reached the end of a segment. + + + + + Flushes one or more streams. + + + + + (Finalize) Completes all writing operations on the sink writer. + + + + + Queries the underlying media sink or encoder for an interface. + + + + + Gets statistics about the performance of the sink writer. + + + + + IMFSourceReader interface + http://msdn.microsoft.com/en-us/library/windows/desktop/dd374655%28v=vs.85%29.aspx + + + + + Queries whether a stream is selected. + + + + + Selects or deselects one or more streams. + + + + + Gets a format that is supported natively by the media source. + + + + + Gets the current media type for a stream. + + + + + Sets the media type for a stream. + + + + + Seeks to a new position in the media source. + + + + + Reads the next sample from the media source. + + + + + Flushes one or more streams. + + + + + Queries the underlying media source or decoder for an interface. + + + + + Gets an attribute from the underlying media source. + + + + + Contains flags that indicate the status of the IMFSourceReader::ReadSample method + http://msdn.microsoft.com/en-us/library/windows/desktop/dd375773(v=vs.85).aspx + + + + + No Error + + + + + An error occurred. If you receive this flag, do not make any further calls to IMFSourceReader methods. + + + + + The source reader reached the end of the stream. + + + + + One or more new streams were created + + + + + The native format has changed for one or more streams. The native format is the format delivered by the media source before any decoders are inserted. + + + + + The current media has type changed for one or more streams. To get the current media type, call the IMFSourceReader::GetCurrentMediaType method. + + + + + There is a gap in the stream. This flag corresponds to an MEStreamTick event from the media source. + + + + + All transforms inserted by the application have been removed for a particular stream. + + + + + IMFTransform, defined in mftransform.h + + + + + Retrieves the minimum and maximum number of input and output streams. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamLimits( + /* [out] */ __RPC__out DWORD *pdwInputMinimum, + /* [out] */ __RPC__out DWORD *pdwInputMaximum, + /* [out] */ __RPC__out DWORD *pdwOutputMinimum, + /* [out] */ __RPC__out DWORD *pdwOutputMaximum) = 0; + + + + + Retrieves the current number of input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamCount( + /* [out] */ __RPC__out DWORD *pcInputStreams, + /* [out] */ __RPC__out DWORD *pcOutputStreams) = 0; + + + + + Retrieves the stream identifiers for the input and output streams on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetStreamIDs( + DWORD dwInputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwInputIDArraySize) DWORD *pdwInputIDs, + DWORD dwOutputIDArraySize, + /* [size_is][out] */ __RPC__out_ecount_full(dwOutputIDArraySize) DWORD *pdwOutputIDs) = 0; + + + + + Gets the buffer requirements and other information for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamInfo( + DWORD dwInputStreamID, + /* [out] */ __RPC__out MFT_INPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the buffer requirements and other information for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamInfo( + DWORD dwOutputStreamID, + /* [out] */ __RPC__out MFT_OUTPUT_STREAM_INFO *pStreamInfo) = 0; + + + + + Gets the global attribute store for this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetAttributes( + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an input stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStreamAttributes( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Retrieves the attribute store for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStreamAttributes( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; + + + + + Removes an input stream from this MFT. + + + virtual HRESULT STDMETHODCALLTYPE DeleteInputStream( + DWORD dwStreamID) = 0; + + + + + Adds one or more new input streams to this MFT. + + + virtual HRESULT STDMETHODCALLTYPE AddInputStreams( + DWORD cStreams, + /* [in] */ __RPC__in DWORD *adwStreamIDs) = 0; + + + + + Gets an available media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputAvailableType( + DWORD dwInputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Retrieves an available media type for an output stream on this MFT. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputAvailableType( + DWORD dwOutputStreamID, + DWORD dwTypeIndex, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Sets, tests, or clears the media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetInputType( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Sets, tests, or clears the media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE SetOutputType( + DWORD dwOutputStreamID, + /* [in] */ __RPC__in_opt IMFMediaType *pType, + DWORD dwFlags) = 0; + + + + + Gets the current media type for an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetInputCurrentType( + DWORD dwInputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Gets the current media type for an output stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE GetOutputCurrentType( + DWORD dwOutputStreamID, + /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; + + + + + Queries whether an input stream on this Media Foundation transform (MFT) can accept more data. + + + virtual HRESULT STDMETHODCALLTYPE GetInputStatus( + DWORD dwInputStreamID, + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Queries whether the Media Foundation transform (MFT) is ready to produce output data. + + + virtual HRESULT STDMETHODCALLTYPE GetOutputStatus( + /* [out] */ __RPC__out DWORD *pdwFlags) = 0; + + + + + Sets the range of time stamps the client needs for output. + + + virtual HRESULT STDMETHODCALLTYPE SetOutputBounds( + LONGLONG hnsLowerBound, + LONGLONG hnsUpperBound) = 0; + + + + + Sends an event to an input stream on this Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessEvent( + DWORD dwInputStreamID, + /* [in] */ __RPC__in_opt IMFMediaEvent *pEvent) = 0; + + + + + Sends a message to the Media Foundation transform (MFT). + + + virtual HRESULT STDMETHODCALLTYPE ProcessMessage( + MFT_MESSAGE_TYPE eMessage, + ULONG_PTR ulParam) = 0; + + + + + Delivers data to an input stream on this Media Foundation transform (MFT). + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessInput( + DWORD dwInputStreamID, + IMFSample *pSample, + DWORD dwFlags) = 0; + + + + + Generates output from the current input data. + + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessOutput( + DWORD dwFlags, + DWORD cOutputBufferCount, + /* [size_is][out][in] */ MFT_OUTPUT_DATA_BUFFER *pOutputSamples, + /* [out] */ DWORD *pdwStatus) = 0; + + + + + See mfobjects.h + + + + + Unknown event type. + + + + + Signals a serious error. + + + + + Custom event type. + + + + + A non-fatal error occurred during streaming. + + + + + Session Unknown + + + + + Raised after the IMFMediaSession::SetTopology method completes asynchronously + + + + + Raised by the Media Session when the IMFMediaSession::ClearTopologies method completes asynchronously. + + + + + Raised when the IMFMediaSession::Start method completes asynchronously. + + + + + Raised when the IMFMediaSession::Pause method completes asynchronously. + + + + + Raised when the IMFMediaSession::Stop method completes asynchronously. + + + + + Raised when the IMFMediaSession::Close method completes asynchronously. + + + + + Raised by the Media Session when it has finished playing the last presentation in the playback queue. + + + + + Raised by the Media Session when the playback rate changes. + + + + + Raised by the Media Session when it completes a scrubbing request. + + + + + Raised by the Media Session when the session capabilities change. + + + + + Raised by the Media Session when the status of a topology changes. + + + + + Raised by the Media Session when a new presentation starts. + + + + + Raised by a media source a new presentation is ready. + + + + + License acquisition is about to begin. + + + + + License acquisition is complete. + + + + + Individualization is about to begin. + + + + + Individualization is complete. + + + + + Signals the progress of a content enabler object. + + + + + A content enabler object's action is complete. + + + + + Raised by a trusted output if an error occurs while enforcing the output policy. + + + + + Contains status information about the enforcement of an output policy. + + + + + A media source started to buffer data. + + + + + A media source stopped buffering data. + + + + + The network source started opening a URL. + + + + + The network source finished opening a URL. + + + + + Raised by a media source at the start of a reconnection attempt. + + + + + Raised by a media source at the end of a reconnection attempt. + + + + + Raised by the enhanced video renderer (EVR) when it receives a user event from the presenter. + + + + + Raised by the Media Session when the format changes on a media sink. + + + + + Source Unknown + + + + + Raised when a media source starts without seeking. + + + + + Raised by a media stream when the source starts without seeking. + + + + + Raised when a media source seeks to a new position. + + + + + Raised by a media stream after a call to IMFMediaSource::Start causes a seek in the stream. + + + + + Raised by a media source when it starts a new stream. + + + + + Raised by a media source when it restarts or seeks a stream that is already active. + + + + + Raised by a media source when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Stop method completes asynchronously. + + + + + Raised by a media source when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media stream when the IMFMediaSource::Pause method completes asynchronously. + + + + + Raised by a media source when a presentation ends. + + + + + Raised by a media stream when the stream ends. + + + + + Raised when a media stream delivers a new sample. + + + + + Signals that a media stream does not have data available at a specified time. + + + + + Raised by a media stream when it starts or stops thinning the stream. + + + + + Raised by a media stream when the media type of the stream changes. + + + + + Raised by a media source when the playback rate changes. + + + + + Raised by the sequencer source when a segment is completed and is followed by another segment. + + + + + Raised by a media source when the source's characteristics change. + + + + + Raised by a media source to request a new playback rate. + + + + + Raised by a media source when it updates its metadata. + + + + + Raised by the sequencer source when the IMFSequencerSource::UpdateTopology method completes asynchronously. + + + + + Sink Unknown + + + + + Raised by a stream sink when it completes the transition to the running state. + + + + + Raised by a stream sink when it completes the transition to the stopped state. + + + + + Raised by a stream sink when it completes the transition to the paused state. + + + + + Raised by a stream sink when the rate has changed. + + + + + Raised by a stream sink to request a new media sample from the pipeline. + + + + + Raised by a stream sink after the IMFStreamSink::PlaceMarker method is called. + + + + + Raised by a stream sink when the stream has received enough preroll data to begin rendering. + + + + + Raised by a stream sink when it completes a scrubbing request. + + + + + Raised by a stream sink when the sink's media type is no longer valid. + + + + + Raised by the stream sinks of the EVR if the video device changes. + + + + + Provides feedback about playback quality to the quality manager. + + + + + Raised when a media sink becomes invalid. + + + + + The audio session display name changed. + + + + + The volume or mute state of the audio session changed + + + + + The audio device was removed. + + + + + The Windows audio server system was shut down. + + + + + The grouping parameters changed for the audio session. + + + + + The audio session icon changed. + + + + + The default audio format for the audio device changed. + + + + + The audio session was disconnected from a Windows Terminal Services session + + + + + The audio session was preempted by an exclusive-mode connection. + + + + + Trust Unknown + + + + + The output policy for a stream changed. + + + + + Content protection message + + + + + The IMFOutputTrustAuthority::SetPolicy method completed. + + + + + DRM License Backup Completed + + + + + DRM License Backup Progress + + + + + DRM License Restore Completed + + + + + DRM License Restore Progress + + + + + DRM License Acquisition Completed + + + + + DRM Individualization Completed + + + + + DRM Individualization Progress + + + + + DRM Proximity Completed + + + + + DRM License Store Cleaned + + + + + DRM Revocation Download Completed + + + + + Transform Unknown + + + + + Sent by an asynchronous MFT to request a new input sample. + + + + + Sent by an asynchronous MFT when new output data is available from the MFT. + + + + + Sent by an asynchronous Media Foundation transform (MFT) when a drain operation is complete. + + + + + Sent by an asynchronous MFT in response to an MFT_MESSAGE_COMMAND_MARKER message. + + + + + Media Foundation attribute guids + http://msdn.microsoft.com/en-us/library/windows/desktop/ms696989%28v=vs.85%29.aspx + + + + + Specifies whether an MFT performs asynchronous processing. + + + + + Enables the use of an asynchronous MFT. + + + + + Contains flags for an MFT activation object. + + + + + Specifies the category for an MFT. + + + + + Contains the class identifier (CLSID) of an MFT. + + + + + Contains the registered input types for a Media Foundation transform (MFT). + + + + + Contains the registered output types for a Media Foundation transform (MFT). + + + + + Contains the symbolic link for a hardware-based MFT. + + + + + Contains the display name for a hardware-based MFT. + + + + + Contains a pointer to the stream attributes of the connected stream on a hardware-based MFT. + + + + + Specifies whether a hardware-based MFT is connected to another hardware-based MFT. + + + + + Specifies the preferred output format for an encoder. + + + + + Specifies whether an MFT is registered only in the application's process. + + + + + Contains configuration properties for an encoder. + + + + + Specifies whether a hardware device source uses the system time for time stamps. + + + + + Contains an IMFFieldOfUseMFTUnlock pointer, which can be used to unlock the MFT. + + + + + Contains the merit value of a hardware codec. + + + + + Specifies whether a decoder is optimized for transcoding rather than for playback. + + + + + Contains a pointer to the proxy object for the application's presentation descriptor. + + + + + Contains a pointer to the presentation descriptor from the protected media path (PMP). + + + + + Specifies the duration of a presentation, in 100-nanosecond units. + + + + + Specifies the total size of the source file, in bytes. + + + + + Specifies the audio encoding bit rate for the presentation, in bits per second. + + + + + Specifies the video encoding bit rate for the presentation, in bits per second. + + + + + Specifies the MIME type of the content. + + + + + Specifies when a presentation was last modified. + + + + + The identifier of the playlist element in the presentation. + + + + + Contains the preferred RFC 1766 language of the media source. + + + + + The time at which the presentation must begin, relative to the start of the media source. + + + + + Specifies whether the audio streams in the presentation have a variable bit rate. + + + + + Media type Major Type + + + + + Media Type subtype + + + + + Audio block alignment + + + + + Audio average bytes per second + + + + + Audio number of channels + + + + + Audio samples per second + + + + + Audio bits per sample + + + + + Enables the source reader or sink writer to use hardware-based Media Foundation transforms (MFTs). + + + + + Contains additional format data for a media type. + + + + + Specifies for a media type whether each sample is independent of the other samples in the stream. + + + + + Specifies for a media type whether the samples have a fixed size. + + + + + Contains a DirectShow format GUID for a media type. + + + + + Specifies the preferred legacy format structure to use when converting an audio media type. + + + + + Specifies for a media type whether the media data is compressed. + + + + + Approximate data rate of the video stream, in bits per second, for a video media type. + + + + + Specifies the payload type of an Advanced Audio Coding (AAC) stream. + 0 - The stream contains raw_data_block elements only + 1 - Audio Data Transport Stream (ADTS). The stream contains an adts_sequence, as defined by MPEG-2. + 2 - Audio Data Interchange Format (ADIF). The stream contains an adif_sequence, as defined by MPEG-2. + 3 - The stream contains an MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). + + + + + Specifies the audio profile and level of an Advanced Audio Coding (AAC) stream, as defined by ISO/IEC 14496-3. + + + + + Media Foundation Errors + + + + RANGES + 14000 - 14999 = General Media Foundation errors + 15000 - 15999 = ASF parsing errors + 16000 - 16999 = Media Source errors + 17000 - 17999 = MEDIAFOUNDATION Network Error Events + 18000 - 18999 = MEDIAFOUNDATION WMContainer Error Events + 19000 - 19999 = MEDIAFOUNDATION Media Sink Error Events + 20000 - 20999 = Renderer errors + 21000 - 21999 = Topology Errors + 25000 - 25999 = Timeline Errors + 26000 - 26999 = Unused + 28000 - 28999 = Transform errors + 29000 - 29999 = Content Protection errors + 40000 - 40999 = Clock errors + 41000 - 41999 = MF Quality Management Errors + 42000 - 42999 = MF Transcode API Errors + + + + + MessageId: MF_E_PLATFORM_NOT_INITIALIZED + + MessageText: + + Platform not initialized. Please call MFStartup().%0 + + + + + MessageId: MF_E_BUFFERTOOSMALL + + MessageText: + + The buffer was too small to carry out the requested action.%0 + + + + + MessageId: MF_E_INVALIDREQUEST + + MessageText: + + The request is invalid in the current state.%0 + + + + + MessageId: MF_E_INVALIDSTREAMNUMBER + + MessageText: + + The stream number provided was invalid.%0 + + + + + MessageId: MF_E_INVALIDMEDIATYPE + + MessageText: + + The data specified for the media type is invalid, inconsistent, or not supported by this object.%0 + + + + + MessageId: MF_E_NOTACCEPTING + + MessageText: + + The callee is currently not accepting further input.%0 + + + + + MessageId: MF_E_NOT_INITIALIZED + + MessageText: + + This object needs to be initialized before the requested operation can be carried out.%0 + + + + + MessageId: MF_E_UNSUPPORTED_REPRESENTATION + + MessageText: + + The requested representation is not supported by this object.%0 + + + + + MessageId: MF_E_NO_MORE_TYPES + + MessageText: + + An object ran out of media types to suggest therefore the requested chain of streaming objects cannot be completed.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SERVICE + + MessageText: + + The object does not support the specified service.%0 + + + + + MessageId: MF_E_UNEXPECTED + + MessageText: + + An unexpected error has occurred in the operation requested.%0 + + + + + MessageId: MF_E_INVALIDNAME + + MessageText: + + Invalid name.%0 + + + + + MessageId: MF_E_INVALIDTYPE + + MessageText: + + Invalid type.%0 + + + + + MessageId: MF_E_INVALID_FILE_FORMAT + + MessageText: + + The file does not conform to the relevant file format specification. + + + + + MessageId: MF_E_INVALIDINDEX + + MessageText: + + Invalid index.%0 + + + + + MessageId: MF_E_INVALID_TIMESTAMP + + MessageText: + + An invalid timestamp was given.%0 + + + + + MessageId: MF_E_UNSUPPORTED_SCHEME + + MessageText: + + The scheme of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_BYTESTREAM_TYPE + + MessageText: + + The byte stream type of the given URL is unsupported.%0 + + + + + MessageId: MF_E_UNSUPPORTED_TIME_FORMAT + + MessageText: + + The given time format is unsupported.%0 + + + + + MessageId: MF_E_NO_SAMPLE_TIMESTAMP + + MessageText: + + The Media Sample does not have a timestamp.%0 + + + + + MessageId: MF_E_NO_SAMPLE_DURATION + + MessageText: + + The Media Sample does not have a duration.%0 + + + + + MessageId: MF_E_INVALID_STREAM_DATA + + MessageText: + + The request failed because the data in the stream is corrupt.%0\n. + + + + + MessageId: MF_E_RT_UNAVAILABLE + + MessageText: + + Real time services are not available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE + + MessageText: + + The specified rate is not supported.%0 + + + + + MessageId: MF_E_THINNING_UNSUPPORTED + + MessageText: + + This component does not support stream-thinning.%0 + + + + + MessageId: MF_E_REVERSE_UNSUPPORTED + + MessageText: + + The call failed because no reverse playback rates are available.%0 + + + + + MessageId: MF_E_UNSUPPORTED_RATE_TRANSITION + + MessageText: + + The requested rate transition cannot occur in the current state.%0 + + + + + MessageId: MF_E_RATE_CHANGE_PREEMPTED + + MessageText: + + The requested rate change has been pre-empted and will not occur.%0 + + + + + MessageId: MF_E_NOT_FOUND + + MessageText: + + The specified object or value does not exist.%0 + + + + + MessageId: MF_E_NOT_AVAILABLE + + MessageText: + + The requested value is not available.%0 + + + + + MessageId: MF_E_NO_CLOCK + + MessageText: + + The specified operation requires a clock and no clock is available.%0 + + + + + MessageId: MF_S_MULTIPLE_BEGIN + + MessageText: + + This callback and state had already been passed in to this event generator earlier.%0 + + + + + MessageId: MF_E_MULTIPLE_BEGIN + + MessageText: + + This callback has already been passed in to this event generator.%0 + + + + + MessageId: MF_E_MULTIPLE_SUBSCRIBERS + + MessageText: + + Some component is already listening to events on this event generator.%0 + + + + + MessageId: MF_E_TIMER_ORPHANED + + MessageText: + + This timer was orphaned before its callback time arrived.%0 + + + + + MessageId: MF_E_STATE_TRANSITION_PENDING + + MessageText: + + A state transition is already pending.%0 + + + + + MessageId: MF_E_UNSUPPORTED_STATE_TRANSITION + + MessageText: + + The requested state transition is unsupported.%0 + + + + + MessageId: MF_E_UNRECOVERABLE_ERROR_OCCURRED + + MessageText: + + An unrecoverable error has occurred.%0 + + + + + MessageId: MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS + + MessageText: + + The provided sample has too many buffers.%0 + + + + + MessageId: MF_E_SAMPLE_NOT_WRITABLE + + MessageText: + + The provided sample is not writable.%0 + + + + + MessageId: MF_E_INVALID_KEY + + MessageText: + + The specified key is not valid. + + + + + MessageId: MF_E_BAD_STARTUP_VERSION + + MessageText: + + You are calling MFStartup with the wrong MF_VERSION. Mismatched bits? + + + + + MessageId: MF_E_UNSUPPORTED_CAPTION + + MessageText: + + The caption of the given URL is unsupported.%0 + + + + + MessageId: MF_E_INVALID_POSITION + + MessageText: + + The operation on the current offset is not permitted.%0 + + + + + MessageId: MF_E_ATTRIBUTENOTFOUND + + MessageText: + + The requested attribute was not found.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_ALLOWED + + MessageText: + + The specified property type is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_TYPE_NOT_SUPPORTED + + MessageText: + + The specified property type is not supported.%0 + + + + + MessageId: MF_E_PROPERTY_EMPTY + + MessageText: + + The specified property is empty.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_EMPTY + + MessageText: + + The specified property is not empty.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_NOT_ALLOWED + + MessageText: + + The vector property specified is not allowed in this context.%0 + + + + + MessageId: MF_E_PROPERTY_VECTOR_REQUIRED + + MessageText: + + A vector property is required in this context.%0 + + + + + MessageId: MF_E_OPERATION_CANCELLED + + MessageText: + + The operation is cancelled.%0 + + + + + MessageId: MF_E_BYTESTREAM_NOT_SEEKABLE + + MessageText: + + The provided bytestream was expected to be seekable and it is not.%0 + + + + + MessageId: MF_E_DISABLED_IN_SAFEMODE + + MessageText: + + The Media Foundation platform is disabled when the system is running in Safe Mode.%0 + + + + + MessageId: MF_E_CANNOT_PARSE_BYTESTREAM + + MessageText: + + The Media Source could not parse the byte stream.%0 + + + + + MessageId: MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS + + MessageText: + + Mutually exclusive flags have been specified to source resolver. This flag combination is invalid.%0 + + + + + MessageId: MF_E_MEDIAPROC_WRONGSTATE + + MessageText: + + MediaProc is in the wrong state%0 + + + + + MessageId: MF_E_RT_THROUGHPUT_NOT_AVAILABLE + + MessageText: + + Real time I/O service can not provide requested throughput.%0 + + + + + MessageId: MF_E_RT_TOO_MANY_CLASSES + + MessageText: + + The workqueue cannot be registered with more classes.%0 + + + + + MessageId: MF_E_RT_WOULDBLOCK + + MessageText: + + This operation cannot succeed because another thread owns this object.%0 + + + + + MessageId: MF_E_NO_BITPUMP + + MessageText: + + Internal. Bitpump not found.%0 + + + + + MessageId: MF_E_RT_OUTOFMEMORY + + MessageText: + + No more RT memory available.%0 + + + + + MessageId: MF_E_RT_WORKQUEUE_CLASS_NOT_SPECIFIED + + MessageText: + + An MMCSS class has not been set for this work queue.%0 + + + + + MessageId: MF_E_INSUFFICIENT_BUFFER + + MessageText: + + Insufficient memory for response.%0 + + + + + MessageId: MF_E_CANNOT_CREATE_SINK + + MessageText: + + Activate failed to create mediasink. Call OutputNode::GetUINT32(MF_TOPONODE_MAJORTYPE) for more information. %0 + + + + + MessageId: MF_E_BYTESTREAM_UNKNOWN_LENGTH + + MessageText: + + The length of the provided bytestream is unknown.%0 + + + + + MessageId: MF_E_SESSION_PAUSEWHILESTOPPED + + MessageText: + + The media session cannot pause from a stopped state.%0 + + + + + MessageId: MF_S_ACTIVATE_REPLACED + + MessageText: + + The activate could not be created in the remote process for some reason it was replaced with empty one.%0 + + + + + MessageId: MF_E_FORMAT_CHANGE_NOT_SUPPORTED + + MessageText: + + The data specified for the media type is supported, but would require a format change, which is not supported by this object.%0 + + + + + MessageId: MF_E_INVALID_WORKQUEUE + + MessageText: + + The operation failed because an invalid combination of workqueue ID and flags was specified.%0 + + + + + MessageId: MF_E_DRM_UNSUPPORTED + + MessageText: + + No DRM support is available.%0 + + + + + MessageId: MF_E_UNAUTHORIZED + + MessageText: + + This operation is not authorized.%0 + + + + + MessageId: MF_E_OUT_OF_RANGE + + MessageText: + + The value is not in the specified or valid range.%0 + + + + + MessageId: MF_E_INVALID_CODEC_MERIT + + MessageText: + + The registered codec merit is not valid.%0 + + + + + MessageId: MF_E_HW_MFT_FAILED_START_STREAMING + + MessageText: + + Hardware MFT failed to start streaming due to lack of hardware resources.%0 + + + + + MessageId: MF_S_ASF_PARSEINPROGRESS + + MessageText: + + Parsing is still in progress and is not yet complete.%0 + + + + + MessageId: MF_E_ASF_PARSINGINCOMPLETE + + MessageText: + + Not enough data have been parsed to carry out the requested action.%0 + + + + + MessageId: MF_E_ASF_MISSINGDATA + + MessageText: + + There is a gap in the ASF data provided.%0 + + + + + MessageId: MF_E_ASF_INVALIDDATA + + MessageText: + + The data provided are not valid ASF.%0 + + + + + MessageId: MF_E_ASF_OPAQUEPACKET + + MessageText: + + The packet is opaque, so the requested information cannot be returned.%0 + + + + + MessageId: MF_E_ASF_NOINDEX + + MessageText: + + The requested operation failed since there is no appropriate ASF index.%0 + + + + + MessageId: MF_E_ASF_OUTOFRANGE + + MessageText: + + The value supplied is out of range for this operation.%0 + + + + + MessageId: MF_E_ASF_INDEXNOTLOADED + + MessageText: + + The index entry requested needs to be loaded before it can be available.%0 + + + + + MessageId: MF_E_ASF_TOO_MANY_PAYLOADS + + MessageText: + + The packet has reached the maximum number of payloads.%0 + + + + + MessageId: MF_E_ASF_UNSUPPORTED_STREAM_TYPE + + MessageText: + + Stream type is not supported.%0 + + + + + MessageId: MF_E_ASF_DROPPED_PACKET + + MessageText: + + One or more ASF packets were dropped.%0 + + + + + MessageId: MF_E_NO_EVENTS_AVAILABLE + + MessageText: + + There are no events available in the queue.%0 + + + + + MessageId: MF_E_INVALID_STATE_TRANSITION + + MessageText: + + A media source cannot go from the stopped state to the paused state.%0 + + + + + MessageId: MF_E_END_OF_STREAM + + MessageText: + + The media stream cannot process any more samples because there are no more samples in the stream.%0 + + + + + MessageId: MF_E_SHUTDOWN + + MessageText: + + The request is invalid because Shutdown() has been called.%0 + + + + + MessageId: MF_E_MP3_NOTFOUND + + MessageText: + + The MP3 object was not found.%0 + + + + + MessageId: MF_E_MP3_OUTOFDATA + + MessageText: + + The MP3 parser ran out of data before finding the MP3 object.%0 + + + + + MessageId: MF_E_MP3_NOTMP3 + + MessageText: + + The file is not really a MP3 file.%0 + + + + + MessageId: MF_E_MP3_NOTSUPPORTED + + MessageText: + + The MP3 file is not supported.%0 + + + + + MessageId: MF_E_NO_DURATION + + MessageText: + + The Media stream has no duration.%0 + + + + + MessageId: MF_E_INVALID_FORMAT + + MessageText: + + The Media format is recognized but is invalid.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_FOUND + + MessageText: + + The property requested was not found.%0 + + + + + MessageId: MF_E_PROPERTY_READ_ONLY + + MessageText: + + The property is read only.%0 + + + + + MessageId: MF_E_PROPERTY_NOT_ALLOWED + + MessageText: + + The specified property is not allowed in this context.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NOT_STARTED + + MessageText: + + The media source is not started.%0 + + + + + MessageId: MF_E_UNSUPPORTED_FORMAT + + MessageText: + + The Media format is recognized but not supported.%0 + + + + + MessageId: MF_E_MP3_BAD_CRC + + MessageText: + + The MPEG frame has bad CRC.%0 + + + + + MessageId: MF_E_NOT_PROTECTED + + MessageText: + + The file is not protected.%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_WRONGSTATE + + MessageText: + + The media source is in the wrong state%0 + + + + + MessageId: MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED + + MessageText: + + No streams are selected in source presentation descriptor.%0 + + + + + MessageId: MF_E_CANNOT_FIND_KEYFRAME_SAMPLE + + MessageText: + + No key frame sample was found.%0 + + + + + MessageId: MF_E_NETWORK_RESOURCE_FAILURE + + MessageText: + + An attempt to acquire a network resource failed.%0 + + + + + MessageId: MF_E_NET_WRITE + + MessageText: + + Error writing to the network.%0 + + + + + MessageId: MF_E_NET_READ + + MessageText: + + Error reading from the network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_NETWORK + + MessageText: + + Internal. Entry cannot complete operation without network.%0 + + + + + MessageId: MF_E_NET_REQUIRE_ASYNC + + MessageText: + + Internal. Async op is required.%0 + + + + + MessageId: MF_E_NET_BWLEVEL_NOT_SUPPORTED + + MessageText: + + Internal. Bandwidth levels are not supported.%0 + + + + + MessageId: MF_E_NET_STREAMGROUPS_NOT_SUPPORTED + + MessageText: + + Internal. Stream groups are not supported.%0 + + + + + MessageId: MF_E_NET_MANUALSS_NOT_SUPPORTED + + MessageText: + + Manual stream selection is not supported.%0 + + + + + MessageId: MF_E_NET_INVALID_PRESENTATION_DESCRIPTOR + + MessageText: + + Invalid presentation descriptor.%0 + + + + + MessageId: MF_E_NET_CACHESTREAM_NOT_FOUND + + MessageText: + + Cannot find cache stream.%0 + + + + + MessageId: MF_I_MANUAL_PROXY + + MessageText: + + The proxy setting is manual.%0 + + + + duplicate removed + MessageId=17011 Severity=Informational Facility=MEDIAFOUNDATION SymbolicName=MF_E_INVALID_REQUEST + Language=English + The request is invalid in the current state.%0 + . + + MessageId: MF_E_NET_REQUIRE_INPUT + + MessageText: + + Internal. Entry cannot complete operation without input.%0 + + + + + MessageId: MF_E_NET_REDIRECT + + MessageText: + + The client redirected to another server.%0 + + + + + MessageId: MF_E_NET_REDIRECT_TO_PROXY + + MessageText: + + The client is redirected to a proxy server.%0 + + + + + MessageId: MF_E_NET_TOO_MANY_REDIRECTS + + MessageText: + + The client reached maximum redirection limit.%0 + + + + + MessageId: MF_E_NET_TIMEOUT + + MessageText: + + The server, a computer set up to offer multimedia content to other computers, could not handle your request for multimedia content in a timely manner. Please try again later.%0 + + + + + MessageId: MF_E_NET_CLIENT_CLOSE + + MessageText: + + The control socket is closed by the client.%0 + + + + + MessageId: MF_E_NET_BAD_CONTROL_DATA + + MessageText: + + The server received invalid data from the client on the control connection.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_SERVER + + MessageText: + + The server is not a compatible streaming media server.%0 + + + + + MessageId: MF_E_NET_UNSAFE_URL + + MessageText: + + Url.%0 + + + + + MessageId: MF_E_NET_CACHE_NO_DATA + + MessageText: + + Data is not available.%0 + + + + + MessageId: MF_E_NET_EOL + + MessageText: + + End of line.%0 + + + + + MessageId: MF_E_NET_BAD_REQUEST + + MessageText: + + The request could not be understood by the server.%0 + + + + + MessageId: MF_E_NET_INTERNAL_SERVER_ERROR + + MessageText: + + The server encountered an unexpected condition which prevented it from fulfilling the request.%0 + + + + + MessageId: MF_E_NET_SESSION_NOT_FOUND + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_NET_NOCONNECTION + + MessageText: + + There is no connection established with the Windows Media server. The operation failed.%0 + + + + + MessageId: MF_E_NET_CONNECTION_FAILURE + + MessageText: + + The network connection has failed.%0 + + + + + MessageId: MF_E_NET_INCOMPATIBLE_PUSHSERVER + + MessageText: + + The Server service that received the HTTP push request is not a compatible version of Windows Media Services (WMS). This error may indicate the push request was received by IIS instead of WMS. Ensure WMS is started and has the HTTP Server control protocol properly enabled and try again.%0 + + + + + MessageId: MF_E_NET_SERVER_ACCESSDENIED + + MessageText: + + The Windows Media server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_PROXY_ACCESSDENIED + + MessageText: + + The proxy server is denying access. The username and/or password might be incorrect.%0 + + + + + MessageId: MF_E_NET_CANNOTCONNECT + + MessageText: + + Unable to establish a connection to the server.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_TEMPLATE + + MessageText: + + The specified push template is invalid.%0 + + + + + MessageId: MF_E_NET_INVALID_PUSH_PUBLISHING_POINT + + MessageText: + + The specified push publishing point is invalid.%0 + + + + + MessageId: MF_E_NET_BUSY + + MessageText: + + The requested resource is in use.%0 + + + + + MessageId: MF_E_NET_RESOURCE_GONE + + MessageText: + + The Publishing Point or file on the Windows Media Server is no longer available.%0 + + + + + MessageId: MF_E_NET_ERROR_FROM_PROXY + + MessageText: + + The proxy experienced an error while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_PROXY_TIMEOUT + + MessageText: + + The proxy did not receive a timely response while attempting to contact the media server.%0 + + + + + MessageId: MF_E_NET_SERVER_UNAVAILABLE + + MessageText: + + The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.%0 + + + + + MessageId: MF_E_NET_TOO_MUCH_DATA + + MessageText: + + The encoding process was unable to keep up with the amount of supplied data.%0 + + + + + MessageId: MF_E_NET_SESSION_INVALID + + MessageText: + + Session not found.%0 + + + + + MessageId: MF_E_OFFLINE_MODE + + MessageText: + + The requested URL is not available in offline mode.%0 + + + + + MessageId: MF_E_NET_UDP_BLOCKED + + MessageText: + + A device in the network is blocking UDP traffic.%0 + + + + + MessageId: MF_E_NET_UNSUPPORTED_CONFIGURATION + + MessageText: + + The specified configuration value is not supported.%0 + + + + + MessageId: MF_E_NET_PROTOCOL_DISABLED + + MessageText: + + The networking protocol is disabled.%0 + + + + + MessageId: MF_E_ALREADY_INITIALIZED + + MessageText: + + This object has already been initialized and cannot be re-initialized at this time.%0 + + + + + MessageId: MF_E_BANDWIDTH_OVERRUN + + MessageText: + + The amount of data passed in exceeds the given bitrate and buffer window.%0 + + + + + MessageId: MF_E_LATE_SAMPLE + + MessageText: + + The sample was passed in too late to be correctly processed.%0 + + + + + MessageId: MF_E_FLUSH_NEEDED + + MessageText: + + The requested action cannot be carried out until the object is flushed and the queue is emptied.%0 + + + + + MessageId: MF_E_INVALID_PROFILE + + MessageText: + + The profile is invalid.%0 + + + + + MessageId: MF_E_INDEX_NOT_COMMITTED + + MessageText: + + The index that is being generated needs to be committed before the requested action can be carried out.%0 + + + + + MessageId: MF_E_NO_INDEX + + MessageText: + + The index that is necessary for the requested action is not found.%0 + + + + + MessageId: MF_E_CANNOT_INDEX_IN_PLACE + + MessageText: + + The requested index cannot be added in-place to the specified ASF content.%0 + + + + + MessageId: MF_E_MISSING_ASF_LEAKYBUCKET + + MessageText: + + The ASF leaky bucket parameters must be specified in order to carry out this request.%0 + + + + + MessageId: MF_E_INVALID_ASF_STREAMID + + MessageText: + + The stream id is invalid. The valid range for ASF stream id is from 1 to 127.%0 + + + + + MessageId: MF_E_STREAMSINK_REMOVED + + MessageText: + + The requested Stream Sink has been removed and cannot be used.%0 + + + + + MessageId: MF_E_STREAMSINKS_OUT_OF_SYNC + + MessageText: + + The various Stream Sinks in this Media Sink are too far out of sync for the requested action to take place.%0 + + + + + MessageId: MF_E_STREAMSINKS_FIXED + + MessageText: + + Stream Sinks cannot be added to or removed from this Media Sink because its set of streams is fixed.%0 + + + + + MessageId: MF_E_STREAMSINK_EXISTS + + MessageText: + + The given Stream Sink already exists.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_CANCELED + + MessageText: + + Sample allocations have been canceled.%0 + + + + + MessageId: MF_E_SAMPLEALLOCATOR_EMPTY + + MessageText: + + The sample allocator is currently empty, due to outstanding requests.%0 + + + + + MessageId: MF_E_SINK_ALREADYSTOPPED + + MessageText: + + When we try to sopt a stream sink, it is already stopped %0 + + + + + MessageId: MF_E_ASF_FILESINK_BITRATE_UNKNOWN + + MessageText: + + The ASF file sink could not reserve AVIO because the bitrate is unknown.%0 + + + + + MessageId: MF_E_SINK_NO_STREAMS + + MessageText: + + No streams are selected in sink presentation descriptor.%0 + + + + + MessageId: MF_S_SINK_NOT_FINALIZED + + MessageText: + + The sink has not been finalized before shut down. This may cause sink generate a corrupted content.%0 + + + + + MessageId: MF_E_METADATA_TOO_LONG + + MessageText: + + A metadata item was too long to write to the output container.%0 + + + + + MessageId: MF_E_SINK_NO_SAMPLES_PROCESSED + + MessageText: + + The operation failed because no samples were processed by the sink.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_PROCAMP_HW + + MessageText: + + There is no available procamp hardware with which to perform color correction.%0 + + + + + MessageId: MF_E_VIDEO_REN_NO_DEINTERLACE_HW + + MessageText: + + There is no available deinterlacing hardware with which to deinterlace the video stream.%0 + + + + + MessageId: MF_E_VIDEO_REN_COPYPROT_FAILED + + MessageText: + + A video stream requires copy protection to be enabled, but there was a failure in attempting to enable copy protection.%0 + + + + + MessageId: MF_E_VIDEO_REN_SURFACE_NOT_SHARED + + MessageText: + + A component is attempting to access a surface for sharing that is not shared.%0 + + + + + MessageId: MF_E_VIDEO_DEVICE_LOCKED + + MessageText: + + A component is attempting to access a shared device that is already locked by another component.%0 + + + + + MessageId: MF_E_NEW_VIDEO_DEVICE + + MessageText: + + The device is no longer available. The handle should be closed and a new one opened.%0 + + + + + MessageId: MF_E_NO_VIDEO_SAMPLE_AVAILABLE + + MessageText: + + A video sample is not currently queued on a stream that is required for mixing.%0 + + + + + MessageId: MF_E_NO_AUDIO_PLAYBACK_DEVICE + + MessageText: + + No audio playback device was found.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_IN_USE + + MessageText: + + The requested audio playback device is currently in use.%0 + + + + + MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_INVALIDATED + + MessageText: + + The audio playback device is no longer present.%0 + + + + + MessageId: MF_E_AUDIO_SERVICE_NOT_RUNNING + + MessageText: + + The audio service is not running.%0 + + + + + MessageId: MF_E_TOPO_INVALID_OPTIONAL_NODE + + MessageText: + + The topology contains an invalid optional node. Possible reasons are incorrect number of outputs and inputs or optional node is at the beginning or end of a segment. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_FIND_DECRYPTOR + + MessageText: + + No suitable transform was found to decrypt the content. %0 + + + + + MessageId: MF_E_TOPO_CODEC_NOT_FOUND + + MessageText: + + No suitable transform was found to encode or decode the content. %0 + + + + + MessageId: MF_E_TOPO_CANNOT_CONNECT + + MessageText: + + Unable to find a way to connect nodes%0 + + + + + MessageId: MF_E_TOPO_UNSUPPORTED + + MessageText: + + Unsupported operations in topoloader%0 + + + + + MessageId: MF_E_TOPO_INVALID_TIME_ATTRIBUTES + + MessageText: + + The topology or its nodes contain incorrectly set time attributes%0 + + + + + MessageId: MF_E_TOPO_LOOPS_IN_TOPOLOGY + + MessageText: + + The topology contains loops, which are unsupported in media foundation topologies%0 + + + + + MessageId: MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_STREAM_DESCRIPTOR + + MessageText: + + A source stream node in the topology does not have a stream descriptor%0 + + + + + MessageId: MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED + + MessageText: + + A stream descriptor was set on a source stream node but it was not selected on the presentation descriptor%0 + + + + + MessageId: MF_E_TOPO_MISSING_SOURCE + + MessageText: + + A source stream node in the topology does not have a source%0 + + + + + MessageId: MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED + + MessageText: + + The topology loader does not support sink activates on output nodes.%0 + + + + + MessageId: MF_E_SEQUENCER_UNKNOWN_SEGMENT_ID + + MessageText: + + The sequencer cannot find a segment with the given ID.%0\n. + + + + + MessageId: MF_S_SEQUENCER_CONTEXT_CANCELED + + MessageText: + + The context was canceled.%0\n. + + + + + MessageId: MF_E_NO_SOURCE_IN_CACHE + + MessageText: + + Cannot find source in source cache.%0\n. + + + + + MessageId: MF_S_SEQUENCER_SEGMENT_AT_END_OF_STREAM + + MessageText: + + Cannot update topology flags.%0\n. + + + + + MessageId: MF_E_TRANSFORM_TYPE_NOT_SET + + MessageText: + + A valid type has not been set for this stream or a stream that it depends on.%0 + + + + + MessageId: MF_E_TRANSFORM_STREAM_CHANGE + + MessageText: + + A stream change has occurred. Output cannot be produced until the streams have been renegotiated.%0 + + + + + MessageId: MF_E_TRANSFORM_INPUT_REMAINING + + MessageText: + + The transform cannot take the requested action until all of the input data it currently holds is processed or flushed.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_MISSING + + MessageText: + + The transform requires a profile but no profile was supplied or found.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_INVALID_OR_CORRUPT + + MessageText: + + The transform requires a profile but the supplied profile was invalid or corrupt.%0 + + + + + MessageId: MF_E_TRANSFORM_PROFILE_TRUNCATED + + MessageText: + + The transform requires a profile but the supplied profile ended unexpectedly while parsing.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_PID_NOT_RECOGNIZED + + MessageText: + + The property ID does not match any property supported by the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VARIANT_TYPE_WRONG + + MessageText: + + The variant does not have the type expected for this property ID.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_NOT_WRITEABLE + + MessageText: + + An attempt was made to set the value on a read-only property.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_ARRAY_VALUE_WRONG_NUM_DIM + + MessageText: + + The array property value has an unexpected number of dimensions.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_SIZE_WRONG + + MessageText: + + The array or blob property value has an unexpected size.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_OUT_OF_RANGE + + MessageText: + + The property value is out of range for this transform.%0 + + + + + MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_INCOMPATIBLE + + MessageText: + + The property value is incompatible with some other property or mediatype set on the transform.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_OUTPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set output mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_INPUT_MEDIATYPE + + MessageText: + + The requested operation is not supported for the currently set input mediatype.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION + + MessageText: + + The requested operation is not supported for the currently set combination of mediatypes.%0 + + + + + MessageId: MF_E_TRANSFORM_CONFLICTS_WITH_OTHER_CURRENTLY_ENABLED_FEATURES + + MessageText: + + The requested feature is not supported in combination with some other currently enabled feature.%0 + + + + + MessageId: MF_E_TRANSFORM_NEED_MORE_INPUT + + MessageText: + + The transform cannot produce output until it gets more input samples.%0 + + + + + MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_SPKR_CONFIG + + MessageText: + + The requested operation is not supported for the current speaker configuration.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING + + MessageText: + + The transform cannot accept mediatype changes in the middle of processing.%0 + + + + + MessageId: MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT + + MessageText: + + The caller should not propagate this event to downstream components.%0 + + + + + MessageId: MF_E_UNSUPPORTED_D3D_TYPE + + MessageText: + + The input type is not supported for D3D device.%0 + + + + + MessageId: MF_E_TRANSFORM_ASYNC_LOCKED + + MessageText: + + The caller does not appear to support this transform's asynchronous capabilities.%0 + + + + + MessageId: MF_E_TRANSFORM_CANNOT_INITIALIZE_ACM_DRIVER + + MessageText: + + An audio compression manager driver could not be initialized by the transform.%0 + + + + + MessageId: MF_E_LICENSE_INCORRECT_RIGHTS + + MessageText: + + You are not allowed to open this file. Contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_OUTOFDATE + + MessageText: + + The license for this media file has expired. Get a new license or contact the content provider for further assistance.%0 + + + + + MessageId: MF_E_LICENSE_REQUIRED + + MessageText: + + You need a license to perform the requested operation on this media file.%0 + + + + + MessageId: MF_E_DRM_HARDWARE_INCONSISTENT + + MessageText: + + The licenses for your media files are corrupted. Contact Microsoft product support.%0 + + + + + MessageId: MF_E_NO_CONTENT_PROTECTION_MANAGER + + MessageText: + + The APP needs to provide IMFContentProtectionManager callback to access the protected media file.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NO_RIGHTS + + MessageText: + + Client does not have rights to restore licenses.%0 + + + + + MessageId: MF_E_BACKUP_RESTRICTED_LICENSE + + MessageText: + + Licenses are restricted and hence can not be backed up.%0 + + + + + MessageId: MF_E_LICENSE_RESTORE_NEEDS_INDIVIDUALIZATION + + MessageText: + + License restore requires machine to be individualized.%0 + + + + + MessageId: MF_S_PROTECTION_NOT_REQUIRED + + MessageText: + + Protection for stream is not required.%0 + + + + + MessageId: MF_E_COMPONENT_REVOKED + + MessageText: + + Component is revoked.%0 + + + + + MessageId: MF_E_TRUST_DISABLED + + MessageText: + + Trusted functionality is currently disabled on this component.%0 + + + + + MessageId: MF_E_WMDRMOTA_NO_ACTION + + MessageText: + + No Action is set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_ALREADY_SET + + MessageText: + + Action is already set on WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_HEADER_NOT_AVAILABLE + + MessageText: + + DRM Heaader is not available.%0 + + + + + MessageId: MF_E_WMDRMOTA_DRM_ENCRYPTION_SCHEME_NOT_SUPPORTED + + MessageText: + + Current encryption scheme is not supported.%0 + + + + + MessageId: MF_E_WMDRMOTA_ACTION_MISMATCH + + MessageText: + + Action does not match with current configuration.%0 + + + + + MessageId: MF_E_WMDRMOTA_INVALID_POLICY + + MessageText: + + Invalid policy for WMDRM Output Trust Authority.%0 + + + + + MessageId: MF_E_POLICY_UNSUPPORTED + + MessageText: + + The policies that the Input Trust Authority requires to be enforced are unsupported by the outputs.%0 + + + + + MessageId: MF_E_OPL_NOT_SUPPORTED + + MessageText: + + The OPL that the license requires to be enforced are not supported by the Input Trust Authority.%0 + + + + + MessageId: MF_E_TOPOLOGY_VERIFICATION_FAILED + + MessageText: + + The topology could not be successfully verified.%0 + + + + + MessageId: MF_E_SIGNATURE_VERIFICATION_FAILED + + MessageText: + + Signature verification could not be completed successfully for this component.%0 + + + + + MessageId: MF_E_DEBUGGING_NOT_ALLOWED + + MessageText: + + Running this process under a debugger while using protected content is not allowed.%0 + + + + + MessageId: MF_E_CODE_EXPIRED + + MessageText: + + MF component has expired.%0 + + + + + MessageId: MF_E_GRL_VERSION_TOO_LOW + + MessageText: + + The current GRL on the machine does not meet the minimum version requirements.%0 + + + + + MessageId: MF_E_GRL_RENEWAL_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any renewal entries for the specified revocation.%0 + + + + + MessageId: MF_E_GRL_EXTENSIBLE_ENTRY_NOT_FOUND + + MessageText: + + The current GRL on the machine does not contain any extensible entries for the specified extension GUID.%0 + + + + + MessageId: MF_E_KERNEL_UNTRUSTED + + MessageText: + + The kernel isn't secure for high security level content.%0 + + + + + MessageId: MF_E_PEAUTH_UNTRUSTED + + MessageText: + + The response from protected environment driver isn't valid.%0 + + + + + MessageId: MF_E_NON_PE_PROCESS + + MessageText: + + A non-PE process tried to talk to PEAuth.%0 + + + + + MessageId: MF_E_REBOOT_REQUIRED + + MessageText: + + We need to reboot the machine.%0 + + + + + MessageId: MF_S_WAIT_FOR_POLICY_SET + + MessageText: + + Protection for this stream is not guaranteed to be enforced until the MEPolicySet event is fired.%0 + + + + + MessageId: MF_S_VIDEO_DISABLED_WITH_UNKNOWN_SOFTWARE_OUTPUT + + MessageText: + + This video stream is disabled because it is being sent to an unknown software output.%0 + + + + + MessageId: MF_E_GRL_INVALID_FORMAT + + MessageText: + + The GRL file is not correctly formed, it may have been corrupted or overwritten.%0 + + + + + MessageId: MF_E_GRL_UNRECOGNIZED_FORMAT + + MessageText: + + The GRL file is in a format newer than those recognized by this GRL Reader.%0 + + + + + MessageId: MF_E_ALL_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and required all processes that can run protected media to restart.%0 + + + + + MessageId: MF_E_PROCESS_RESTART_REQUIRED + + MessageText: + + The GRL was reloaded and the current process needs to restart.%0 + + + + + MessageId: MF_E_USERMODE_UNTRUSTED + + MessageText: + + The user space is untrusted for protected content play.%0 + + + + + MessageId: MF_E_PEAUTH_SESSION_NOT_STARTED + + MessageText: + + PEAuth communication session hasn't been started.%0 + + + + + MessageId: MF_E_PEAUTH_PUBLICKEY_REVOKED + + MessageText: + + PEAuth's public key is revoked.%0 + + + + + MessageId: MF_E_GRL_ABSENT + + MessageText: + + The GRL is absent.%0 + + + + + MessageId: MF_S_PE_TRUSTED + + MessageText: + + The Protected Environment is trusted.%0 + + + + + MessageId: MF_E_PE_UNTRUSTED + + MessageText: + + The Protected Environment is untrusted.%0 + + + + + MessageId: MF_E_PEAUTH_NOT_STARTED + + MessageText: + + The Protected Environment Authorization service (PEAUTH) has not been started.%0 + + + + + MessageId: MF_E_INCOMPATIBLE_SAMPLE_PROTECTION + + MessageText: + + The sample protection algorithms supported by components are not compatible.%0 + + + + + MessageId: MF_E_PE_SESSIONS_MAXED + + MessageText: + + No more protected environment sessions can be supported.%0 + + + + + MessageId: MF_E_HIGH_SECURITY_LEVEL_CONTENT_NOT_ALLOWED + + MessageText: + + WMDRM ITA does not allow protected content with high security level for this release.%0 + + + + + MessageId: MF_E_TEST_SIGNED_COMPONENTS_NOT_ALLOWED + + MessageText: + + WMDRM ITA cannot allow the requested action for the content as one or more components is not properly signed.%0 + + + + + MessageId: MF_E_ITA_UNSUPPORTED_ACTION + + MessageText: + + WMDRM ITA does not support the requested action.%0 + + + + + MessageId: MF_E_ITA_ERROR_PARSING_SAP_PARAMETERS + + MessageText: + + WMDRM ITA encountered an error in parsing the Secure Audio Path parameters.%0 + + + + + MessageId: MF_E_POLICY_MGR_ACTION_OUTOFBOUNDS + + MessageText: + + The Policy Manager action passed in is invalid.%0 + + + + + MessageId: MF_E_BAD_OPL_STRUCTURE_FORMAT + + MessageText: + + The structure specifying Output Protection Level is not the correct format.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_PROTECTION_GUID + + MessageText: + + WMDRM ITA does not recognize the Explicite Analog Video Output Protection guid specified in the license.%0 + + + + + MessageId: MF_E_NO_PMP_HOST + + MessageText: + + IMFPMPHost object not available.%0 + + + + + MessageId: MF_E_ITA_OPL_DATA_NOT_INITIALIZED + + MessageText: + + WMDRM ITA could not initialize the Output Protection Level data.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Analog Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_ITA_UNRECOGNIZED_DIGITAL_VIDEO_OUTPUT + + MessageText: + + WMDRM ITA does not recognize the Digital Video Output specified by the OTA.%0 + + + + + MessageId: MF_E_CLOCK_INVALID_CONTINUITY_KEY + + MessageText: + + The continuity key supplied is not currently valid.%0 + + + + + MessageId: MF_E_CLOCK_NO_TIME_SOURCE + + MessageText: + + No Presentation Time Source has been specified.%0 + + + + + MessageId: MF_E_CLOCK_STATE_ALREADY_SET + + MessageText: + + The clock is already in the requested state.%0 + + + + + MessageId: MF_E_CLOCK_NOT_SIMPLE + + MessageText: + + The clock has too many advanced features to carry out the request.%0 + + + + + MessageId: MF_S_CLOCK_STOPPED + + MessageText: + + Timer::SetTimer returns this success code if called happened while timer is stopped. Timer is not going to be dispatched until clock is running%0 + + + + + MessageId: MF_E_NO_MORE_DROP_MODES + + MessageText: + + The component does not support any more drop modes.%0 + + + + + MessageId: MF_E_NO_MORE_QUALITY_LEVELS + + MessageText: + + The component does not support any more quality levels.%0 + + + + + MessageId: MF_E_DROPTIME_NOT_SUPPORTED + + MessageText: + + The component does not support drop time functionality.%0 + + + + + MessageId: MF_E_QUALITYKNOB_WAIT_LONGER + + MessageText: + + Quality Manager needs to wait longer before bumping the Quality Level up.%0 + + + + + MessageId: MF_E_QM_INVALIDSTATE + + MessageText: + + Quality Manager is in an invalid state. Quality Management is off at this moment.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_CONTAINERTYPE + + MessageText: + + No transcode output container type is specified.%0 + + + + + MessageId: MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS + + MessageText: + + The profile does not have a media type configuration for any selected source streams.%0 + + + + + MessageId: MF_E_TRANSCODE_NO_MATCHING_ENCODER + + MessageText: + + Cannot find an encoder MFT that accepts the user preferred output type.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_INITIALIZED + + MessageText: + + Memory allocator is not initialized.%0 + + + + + MessageId: MF_E_ALLOCATOR_NOT_COMMITED + + MessageText: + + Memory allocator is not committed yet.%0 + + + + + MessageId: MF_E_ALLOCATOR_ALREADY_COMMITED + + MessageText: + + Memory allocator has already been committed.%0 + + + + + MessageId: MF_E_STREAM_ERROR + + MessageText: + + An error occurred in media stream.%0 + + + + + MessageId: MF_E_INVALID_STREAM_STATE + + MessageText: + + Stream is not in a state to handle the request.%0 + + + + + MessageId: MF_E_HW_STREAM_NOT_CONNECTED + + MessageText: + + Hardware stream is not connected yet.%0 + + + + + Main interface for using Media Foundation with NAudio + + + + + initializes MediaFoundation - only needs to be called once per process + + + + + uninitializes MediaFoundation + + + + + Creates a Media type + + + + + Creates a media type from a WaveFormat + + + + + Creates a memory buffer of the specified size + + Memory buffer size in bytes + The memory buffer + + + + Creates a sample object + + The sample object + + + + Creates a new attributes store + + Initial size + The attributes store + + + + Creates a media foundation byte stream based on a stream object + (usable with WinRT streams) + + The input stream + A media foundation byte stream + + + + Creates a source reader based on a byte stream + + The byte stream + A media foundation source reader + + + + Interop definitions for MediaFoundation + thanks to Lucian Wischik for the initial work on many of these definitions (also various interfaces) + n.b. the goal is to make as much of this internal as possible, and provide + better .NET APIs using the MediaFoundationApi class instead + + + + + Initializes Microsoft Media Foundation. + + + + + Shuts down the Microsoft Media Foundation platform + + + + + Creates an empty media type. + + + + + Initializes a media type from a WAVEFORMATEX structure. + + + + + Converts a Media Foundation audio media type to a WAVEFORMATEX structure. + + TODO: try making second parameter out WaveFormatExtraData + + + + Creates the source reader from a URL. + + + + + Creates the source reader from a byte stream. + + + + + Creates the sink writer from a URL or byte stream. + + + + + Creates a Microsoft Media Foundation byte stream that wraps an IRandomAccessStream object. + + + + + Creates an empty media sample. + + + + + Allocates system memory and creates a media buffer to manage it. + + + + + Creates an empty attribute store. + + + + + All streams + + + + + First audio stream + + + + + First video stream + + + + + Media source + + + + + Media Foundation SDK Version + + + + + Media Foundation API Version + + + + + Media Foundation Version + + + + + An abstract base class for simplifying working with Media Foundation Transforms + You need to override the method that actually creates and configures the transform + + + + + The Source Provider + + + + + The Output WaveFormat + + + + + Constructs a new MediaFoundationTransform wrapper + Will read one second at a time + + The source provider for input data to the transform + The desired output format + + + + To be implemented by overriding classes. Create the transform object, set up its input and output types, + and configure any custom properties in here + + An object implementing IMFTrasform + + + + Disposes this MediaFoundation transform + + + + + Disposes this Media Foundation Transform + + + + + Destructor + + + + + The output WaveFormat of this Media Foundation Transform + + + + + Reads data out of the source, passing it through the transform + + Output buffer + Offset within buffer to write to + Desired byte count + Number of bytes read + + + + Attempts to read from the transform + Some useful info here: + http://msdn.microsoft.com/en-gb/library/windows/desktop/aa965264%28v=vs.85%29.aspx#process_data + + + + + + Indicate that the source has been repositioned and completely drain out the transforms buffers + + + + + Media Foundation Transform Categories + + + + + MFT_CATEGORY_VIDEO_DECODER + + + + + MFT_CATEGORY_VIDEO_ENCODER + + + + + MFT_CATEGORY_VIDEO_EFFECT + + + + + MFT_CATEGORY_MULTIPLEXER + + + + + MFT_CATEGORY_DEMULTIPLEXER + + + + + MFT_CATEGORY_AUDIO_DECODER + + + + + MFT_CATEGORY_AUDIO_ENCODER + + + + + MFT_CATEGORY_AUDIO_EFFECT + + + + + MFT_CATEGORY_VIDEO_PROCESSOR + + + + + MFT_CATEGORY_OTHER + + + + + Media Type helper class, simplifying working with IMFMediaType + (will probably change in the future, to inherit from an attributes class) + Currently does not release the COM object, so you must do that yourself + + + + + Wraps an existing IMFMediaType object + + The IMFMediaType object + + + + Creates and wraps a new IMFMediaType object + + + + + Creates and wraps a new IMFMediaType object based on a WaveFormat + + WaveFormat + + + + Tries to get a UINT32 value, returning a default value if it doesn't exist + + Attribute key + Default value + Value or default if key doesn't exist + + + + The Sample Rate (valid for audio media types) + + + + + The number of Channels (valid for audio media types) + + + + + The number of bits per sample (n.b. not always valid for compressed audio types) + + + + + The average bytes per second (valid for audio media types) + + + + + The Media Subtype. For audio, is a value from the AudioSubtypes class + + + + + The Major type, e.g. audio or video (from the MediaTypes class) + + + + + Access to the actual IMFMediaType object + Use to pass to MF APIs or Marshal.ReleaseComObject when you are finished with it + + + + + Major Media Types + http://msdn.microsoft.com/en-us/library/windows/desktop/aa367377%28v=vs.85%29.aspx + + + + + Default + + + + + Audio + + + + + Video + + + + + Protected Media + + + + + Synchronized Accessible Media Interchange (SAMI) captions. + + + + + Script stream + + + + + Still image stream. + + + + + HTML stream. + + + + + Binary stream. + + + + + A stream that contains data files. + + + + + Contains information about an input stream on a Media Foundation transform (MFT) + + + + + Maximum amount of time between an input sample and the corresponding output sample, in 100-nanosecond units. + + + + + Bitwise OR of zero or more flags from the _MFT_INPUT_STREAM_INFO_FLAGS enumeration. + + + + + The minimum size of each input buffer, in bytes. + + + + + Maximum amount of input data, in bytes, that the MFT holds to perform lookahead. + + + + + The memory alignment required for input buffers. If the MFT does not require a specific alignment, the value is zero. + + + + + Defines messages for a Media Foundation transform (MFT). + + + + + Requests the MFT to flush all stored data. + + + + + Requests the MFT to drain any stored data. + + + + + Sets or clears the Direct3D Device Manager for DirectX Video Accereration (DXVA). + + + + + Drop samples - requires Windows 7 + + + + + Command Tick - requires Windows 8 + + + + + Notifies the MFT that streaming is about to begin. + + + + + Notifies the MFT that streaming is about to end. + + + + + Notifies the MFT that an input stream has ended. + + + + + Notifies the MFT that the first sample is about to be processed. + + + + + Marks a point in the stream. This message applies only to asynchronous MFTs. Requires Windows 7 + + + + + Contains information about an output buffer for a Media Foundation transform. + + + + + Output stream identifier. + + + + + Pointer to the IMFSample interface. + + + + + Before calling ProcessOutput, set this member to zero. + + + + + Before calling ProcessOutput, set this member to NULL. + + + + + Contains information about an output stream on a Media Foundation transform (MFT). + + + + + Bitwise OR of zero or more flags from the _MFT_OUTPUT_STREAM_INFO_FLAGS enumeration. + + + + + Minimum size of each output buffer, in bytes. + + + + + The memory alignment required for output buffers. + + + + + Contains media type information for registering a Media Foundation transform (MFT). + + + + + The major media type. + + + + + The Media Subtype + + + + + Contains statistics about the performance of the sink writer. + + + + + The size of the structure, in bytes. + + + + + The time stamp of the most recent sample given to the sink writer. + + + + + The time stamp of the most recent sample to be encoded. + + + + + The time stamp of the most recent sample given to the media sink. + + + + + The time stamp of the most recent stream tick. + + + + + The system time of the most recent sample request from the media sink. + + + + + The number of samples received. + + + + + The number of samples encoded. + + + + + The number of samples given to the media sink. + + + + + The number of stream ticks received. + + + + + The amount of data, in bytes, currently waiting to be processed. + + + + + The total amount of data, in bytes, that has been sent to the media sink. + + + + + The number of pending sample requests. + + + + + The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer. + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder + + + + + The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink. + + + + + Contains flags for registering and enumeration Media Foundation transforms (MFTs). + + + + + None + + + + + The MFT performs synchronous data processing in software. + + + + + The MFT performs asynchronous data processing in software. + + + + + The MFT performs hardware-based data processing, using either the AVStream driver or a GPU-based proxy MFT. + + + + + The MFT that must be unlocked by the application before use. + + + + + For enumeration, include MFTs that were registered in the caller's process. + + + + + The MFT is optimized for transcoding rather than playback. + + + + + For enumeration, sort and filter the results. + + + + + Bitwise OR of all the flags, excluding MFT_ENUM_FLAG_SORTANDFILTER. + + + + + Indicates the status of an input stream on a Media Foundation transform (MFT). + + + + + None + + + + + The input stream can receive more data at this time. + + + + + Describes an input stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of input data must contain complete, unbroken units of data. + + + + + Each media sample that the client provides as input must contain exactly one unit of data, as defined for the MFT_INPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All input samples must be the same size. + + + + + MTF Input Stream Holds buffers + + + + + The MFT does not hold input samples after the IMFTransform::ProcessInput method returns. + + + + + This input stream can be removed by calling IMFTransform::DeleteInputStream. + + + + + This input stream is optional. + + + + + The MFT can perform in-place processing. + + + + + Defines flags for the IMFTransform::ProcessOutput method. + + + + + None + + + + + The MFT can still generate output from this stream without receiving any more input. + + + + + The format has changed on this output stream, or there is a new preferred format for this stream. + + + + + The MFT has removed this output stream. + + + + + There is no sample ready for this stream. + + + + + Indicates whether a Media Foundation transform (MFT) can produce output data. + + + + + None + + + + + There is a sample available for at least one output stream. + + + + + Describes an output stream on a Media Foundation transform (MFT). + + + + + No flags set + + + + + Each media sample (IMFSample interface) of output data from the MFT contains complete, unbroken units of data. + + + + + Each output sample contains exactly one unit of data, as defined for the MFT_OUTPUT_STREAM_WHOLE_SAMPLES flag. + + + + + All output samples are the same size. + + + + + The MFT can discard the output data from this output stream, if requested by the client. + + + + + This output stream is optional. + + + + + The MFT provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. + + + + + The MFT can either provide output samples for this stream or it can use samples that the client allocates. + + + + + The MFT does not require the client to process the output for this stream. + + + + + The MFT might remove this output stream during streaming. + + + + + Defines flags for processing output samples in a Media Foundation transform (MFT). + + + + + None + + + + + Do not produce output for streams in which the pSample member of the MFT_OUTPUT_DATA_BUFFER structure is NULL. + + + + + Regenerates the last output sample. + + + + + Process Output Status flags + + + + + None + + + + + The Media Foundation transform (MFT) has created one or more new output streams. + + + + + Defines flags for the setting or testing the media type on a Media Foundation transform (MFT). + + + + + None + + + + + Test the proposed media type, but do not set it. + + + + + Represents a MIDI Channel AfterTouch Event. + + + + + Creates a new ChannelAfterTouchEvent from raw MIDI data + + A binary reader + + + + Creates a new Channel After-Touch Event + + Absolute time + Channel + After-touch pressure + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The aftertouch pressure value + + + + + Represents a MIDI control change event + + + + + Reads a control change event from a MIDI stream + + Binary reader on the MIDI stream + + + + Creates a control change event + + Time + MIDI Channel Number + The MIDI Controller + Controller value + + + + Describes this control change event + + A string describing this event + + + + + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + The controller number + + + + + The controller value + + + + + Represents a MIDI key signature event event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new Key signature event with the specified data + + + + + Creates a deep clone of this MIDI event. + + + + + Number of sharps or flats + + + + + Major or Minor key + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event + + + + + Gets the type of this meta event + + + + + Empty constructor + + + + + Custom constructor for use by derived types, who will manage the data themselves + + Meta event type + Meta data length + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Reads a meta-event from a stream + + A binary reader based on the stream of MIDI data + A new MetaEvent object + + + + Describes this meta event + + + + + + + + + + MIDI MetaEvent Type + + + + Track sequence number + + + Text event + + + Copyright + + + Sequence track name + + + Track instrument name + + + Lyric + + + Marker + + + Cue point + + + Program (patch) name + + + Device (port) name + + + MIDI Channel (not official?) + + + MIDI Port (not official?) + + + End track + + + Set tempo + + + SMPTE offset + + + Time signature + + + Key signature + + + Sequencer specific + + + + MIDI command codes + + + + Note Off + + + Note On + + + Key After-touch + + + Control change + + + Patch change + + + Channel after-touch + + + Pitch wheel change + + + Sysex message + + + Eox (comes at end of a sysex message) + + + Timing clock (used when synchronization is required) + + + Start sequence + + + Continue sequence + + + Stop sequence + + + Auto-Sensing + + + Meta-event + + + + MidiController enumeration + http://www.midi.org/techspecs/midimessages.php#3 + + + + Bank Select (MSB) + + + Modulation (MSB) + + + Breath Controller + + + Foot controller (MSB) + + + Main volume + + + Pan + + + Expression + + + Bank Select LSB + + + Sustain + + + Portamento On/Off + + + Sostenuto On/Off + + + Soft Pedal On/Off + + + Legato Footswitch + + + Reset all controllers + + + All notes off + + + + Represents an individual MIDI event + + + + The MIDI command code + + + + Creates a MidiEvent from a raw message received using + the MME MIDI In APIs + + The short MIDI message + A new MIDI Event + + + + Constructs a MidiEvent from a BinaryStream + + The binary stream of MIDI data + The previous MIDI event (pass null for first event) + A new MidiEvent + + + + Converts this MIDI event to a short message (32 bit integer) that + can be sent by the Windows MIDI out short message APIs + Cannot be implemented for all MIDI messages + + A short message + + + + Default constructor + + + + + Creates a MIDI event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + + + + Creates a deep clone of this MIDI event. + + + + + The MIDI Channel Number for this event (1-16) + + + + + The Delta time for this event + + + + + The absolute time for this event + + + + + The command code for this event + + + + + Whether this is a note off event + + + + + Whether this is a note on event + + + + + Determines if this is an end track event + + + + + Displays a summary of the MIDI event + + A string containing a brief description of this MIDI event + + + + Utility function that can read a variable length integer from a binary stream + + The binary stream + The integer read + + + + Writes a variable length integer to a binary stream + + Binary stream + The value to write + + + + Exports this MIDI event's data + Overriden in derived classes, but they should call this version + + Absolute time used to calculate delta. + Is updated ready for the next delta calculation + Stream to write to + + + + A helper class to manage collection of MIDI events + It has the ability to organise them in tracks + + + + + Creates a new Midi Event collection + + Initial file type + Delta Ticks Per Quarter Note + + + + The number of tracks + + + + + The absolute time that should be considered as time zero + Not directly used here, but useful for timeshifting applications + + + + + The number of ticks per quarter note + + + + + Gets events on a specified track + + Track number + The list of events + + + + Gets events on a specific track + + Track number + The list of events + + + + Adds a new track + + The new track event list + + + + Adds a new track + + Initial events to add to the new track + The new track event list + + + + Removes a track + + Track number to remove + + + + Clears all events + + + + + The MIDI file type + + + + + Adds an event to the appropriate track depending on file type + + The event to be added + The original (or desired) track number + When adding events in type 0 mode, the originalTrack parameter + is ignored. If in type 1 mode, it will use the original track number to + store the new events. If the original track was 0 and this is a channel based + event, it will create new tracks if necessary and put it on the track corresponding + to its channel number + + + + Sorts, removes empty tracks and adds end track markers + + + + + Gets an enumerator for the lists of track events + + + + + Gets an enumerator for the lists of track events + + + + + Utility class for comparing MidiEvent objects + + + + + Compares two MidiEvents + Sorts by time, with EndTrack always sorted to the end + + + + + Class able to read a MIDI file + + + + + Opens a MIDI file for reading + + Name of MIDI file + + + + MIDI File format + + + + + Opens a MIDI file for reading + + Name of MIDI file + If true will error on non-paired note events + + + + Opens a MIDI file stream for reading + + The input stream containing a MIDI file + If true will error on non-paired note events + + + + The collection of events in this MIDI file + + + + + Number of tracks in this MIDI file + + + + + Delta Ticks Per Quarter Note + + + + + Describes the MIDI file + + A string describing the MIDI file and its events + + + + Exports a MIDI file + + Filename to export to + Events to export + + + + Represents a MIDI in device + + + + + Called when a MIDI message is received + + + + + An invalid MIDI message + + + + + Gets the number of MIDI input devices available in the system + + + + + Opens a specified MIDI in device + + The device number + + + + Closes this MIDI in device + + + + + Closes this MIDI in device + + + + + Start the MIDI in device + + + + + Stop the MIDI in device + + + + + Reset the MIDI in device + + + + + Gets the MIDI in device info + + + + + Closes the MIDI out device + + True if called from Dispose + + + + Cleanup + + + + + MIDI In Device Capabilities + + + + + wMid + + + + + wPid + + + + + vDriverVersion + + + + + Product Name + + + + + Support - Reserved + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + MIDI In Message Information + + + + + Create a new MIDI In Message EventArgs + + + + + + + The Raw message received from the MIDI In API + + + + + The raw message interpreted as a MidiEvent + + + + + The timestamp in milliseconds for this message + + + + + MIM_OPEN + + + + + MIM_CLOSE + + + + + MIM_DATA + + + + + MIM_LONGDATA + + + + + MIM_ERROR + + + + + MIM_LONGERROR + + + + + MIM_MOREDATA + + + + + MOM_OPEN + + + + + MOM_CLOSE + + + + + MOM_DONE + + + + + Represents a MIDI message + + + + + Creates a new MIDI message + + Status + Data parameter 1 + Data parameter 2 + + + + Creates a new MIDI message from a raw message + + A packed MIDI message from an MMIO function + + + + Creates a Note On message + + Note number (0 to 127) + Volume (0 to 127) + MIDI channel (1 to 16) + A new MidiMessage object + + + + Creates a Note Off message + + Note number + Volume + MIDI channel (1-16) + A new MidiMessage object + + + + Creates a patch change message + + The patch number + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Creates a Control Change message + + The controller number to change + The value to set the controller to + The MIDI channel number (1-16) + A new MidiMessageObject + + + + Returns the raw MIDI message data + + + + + Represents a MIDI out device + + + + + Gets the number of MIDI devices available in the system + + + + + Gets the MIDI Out device info + + + + + Opens a specified MIDI out device + + The device number + + + + Closes this MIDI out device + + + + + Closes this MIDI out device + + + + + Gets or sets the volume for this MIDI out device + + + + + Resets the MIDI out device + + + + + Sends a MIDI out message + + Message + Parameter 1 + Parameter 2 + + + + Sends a MIDI message to the MIDI out device + + The message to send + + + + Closes the MIDI out device + + True if called from Dispose + + + + Send a long message, for example sysex. + + The bytes to send. + + + + Cleanup + + + + + class representing the capabilities of a MIDI out device + MIDIOUTCAPS: http://msdn.microsoft.com/en-us/library/dd798467%28VS.85%29.aspx + + + + + MIDICAPS_VOLUME + + + + + separate left-right volume control + MIDICAPS_LRVOLUME + + + + + MIDICAPS_CACHE + + + + + MIDICAPS_STREAM + driver supports midiStreamOut directly + + + + + Gets the manufacturer of this device + + + + + Gets the product identifier (manufacturer specific) + + + + + Gets the product name + + + + + Returns the number of supported voices + + + + + Gets the polyphony of the device + + + + + Returns true if the device supports all channels + + + + + Queries whether a particular channel is supported + + Channel number to test + True if the channel is supported + + + + Returns true if the device supports patch caching + + + + + Returns true if the device supports separate left and right volume + + + + + Returns true if the device supports MIDI stream out + + + + + Returns true if the device supports volume control + + + + + Returns the type of technology used by this MIDI out device + + + + + Represents the different types of technology used by a MIDI out device + + from mmsystem.h + + + The device is a MIDI port + + + The device is a MIDI synth + + + The device is a square wave synth + + + The device is an FM synth + + + The device is a MIDI mapper + + + The device is a WaveTable synth + + + The device is a software synth + + + + Represents a note MIDI event + + + + + Reads a NoteEvent from a stream of MIDI data + + Binary Reader for the stream + + + + Creates a MIDI Note Event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI command code + MIDI Note Number + MIDI Note Velocity + + + + + + + + + The MIDI note number + + + + + The note velocity + + + + + The note name + + + + + Describes the Note Event + + Note event as a string + + + + + + + + + Represents a MIDI note on event + + + + + Reads a new Note On event from a stream of MIDI data + + Binary reader on the MIDI data stream + + + + Creates a NoteOn event with specified parameters + + Absolute time of this event + MIDI channel number + MIDI note number + MIDI note velocity + MIDI note duration + + + + Creates a deep clone of this MIDI event. + + + + + The associated Note off event + + + + + Get or set the Note Number, updating the off event at the same time + + + + + Get or set the channel, updating the off event at the same time + + + + + The duration of this note + + + There must be a note off event + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI patch change event + + + + + Gets the default MIDI instrument names + + + + + Reads a new patch change event from a MIDI stream + + Binary reader for the MIDI stream + + + + Creates a new patch change event + + Time of the event + Channel number + Patch number + + + + The Patch Number + + + + + Describes this patch change event + + String describing the patch change event + + + + Gets as a short message for sending with the midiOutShortMsg API + + short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI pitch wheel change event + + + + + Reads a pitch wheel change event from a MIDI stream + + The MIDI stream to read from + + + + Creates a new pitch wheel change event + + Absolute event time + Channel + Pitch wheel value + + + + Describes this pitch wheel change event + + String describing this pitch wheel change event + + + + Pitch Wheel Value 0 is minimum, 0x2000 (8192) is default, 0x3FFF (16383) is maximum + + + + + Gets a short message + + Integer to sent as short message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI meta event with raw data + + + + + Raw data contained in the meta event + + + + + Creates a meta event with raw data + + + + + Creates a deep clone of this MIDI event. + + + + + Describes this meta event + + + + + + + + + + Represents a Sequencer Specific event + + + + + Reads a new sequencer specific event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new Sequencer Specific event + + The sequencer specific data + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this sequencer specific + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + SMPTE Offset Event + + + + + Creates a new time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a deep clone of this MIDI event. + + + + + Hours + + + + + Minutes + + + + + Seconds + + + + + Frames + + + + + SubFrames + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI sysex message + + + + + Reads a sysex message from a MIDI stream + + Stream of MIDI data + a new sysex message + + + + Creates a deep clone of this MIDI event. + + + + + Describes this sysex message + + A string describing the sysex message + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI tempo event + + + + + Reads a new tempo event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a new tempo event with specified settings + + Microseconds per quarter note + Absolute time + + + + Creates a deep clone of this MIDI event. + + + + + Describes this tempo event + + String describing the tempo event + + + + Microseconds per quarter note + + + + + Tempo + + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI text event + + + + + Reads a new text event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TextEvent + + The text in this type + MetaEvent type (must be one that is + associated with text data) + Absolute time of this event + + + + Creates a deep clone of this MIDI event. + + + + + The contents of this text event + + + + + The raw contents of this text event + + + + + Describes this MIDI text event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI time signature event + + + + + Reads a new time signature event from a MIDI stream + + The MIDI stream + The data length + + + + Creates a new TimeSignatureEvent + + Time at which to create this event + Numerator + Denominator + Ticks in Metronome Click + No of 32nd Notes in Quarter Click + + + + Creates a deep clone of this MIDI event. + + + + + Numerator (number of beats in a bar) + + + + + Denominator (Beat unit), + 1 means 2, 2 means 4 (crochet), 3 means 8 (quaver), 4 means 16 and 5 means 32 + + + + + Ticks in a metronome click + + + + + Number of 32nd notes in a quarter note + + + + + The time signature + + + + + Describes this time signature event + + A string describing this event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Represents a MIDI track sequence number event event + + + + + Creates a new track sequence number event + + + + + Reads a new track sequence number event from a MIDI stream + + The MIDI stream + the data length + + + + Creates a deep clone of this MIDI event. + + + + + Describes this event + + String describing the event + + + + Calls base class export first, then exports the data + specific to this event + MidiEvent.Export + + + + + Boolean mixer control + + + + + Gets the details for this control + + memory pointer + + + + The current value of the control + + + + + Custom Mixer control + + + + + Get the data for this custom control + + pointer to memory to receive data + + + + List text mixer control + + + + + Get the details for this control + + Memory location to read to + + + Represents a Windows mixer device + + + The number of mixer devices available + + + Connects to the specified mixer + The index of the mixer to use. + This should be between zero and NumberOfDevices - 1 + + + The number of destinations this mixer supports + + + The name of this mixer device + + + The manufacturer code for this mixer device + + + The product identifier code for this mixer device + + + Retrieve the specified MixerDestination object + The ID of the destination to use. + Should be between 0 and DestinationCount - 1 + + + + A way to enumerate the destinations + + + + + A way to enumerate all available devices + + + + + Represents a mixer control + + + + + Mixer Handle + + + + + Number of Channels + + + + + Mixer Handle Type + + + + + Gets all the mixer controls + + Mixer Handle + Mixer Line + Mixer Handle Type + + + + + Gets a specified Mixer Control + + Mixer Handle + Line ID + Control ID + Number of Channels + Flags to use (indicates the meaning of mixerHandle) + + + + + Gets the control details + + + + + Gets the control details + + + + + + Mixer control name + + + + + Mixer control type + + + + + Returns true if this is a boolean control + + Control type + + + + Is this a boolean control + + + + + Determines whether a specified mixer control type is a list text control + + + + + True if this is a list text control + + + + + True if this is a signed control + + + + + True if this is an unsigned control + + + + + True if this is a custom control + + + + + String representation for debug purposes + + + + + Mixer control types + + + + Custom + + + Boolean meter + + + Signed meter + + + Peak meter + + + Unsigned meter + + + Boolean + + + On Off + + + Mute + + + Mono + + + Loudness + + + Stereo Enhance + + + Button + + + Decibels + + + Signed + + + Unsigned + + + Percent + + + Slider + + + Pan + + + Q-sound pan + + + Fader + + + Volume + + + Bass + + + Treble + + + Equaliser + + + Single Select + + + Mux + + + Multiple select + + + Mixer + + + Micro time + + + Milli time + + + + Mixer Interop Flags + + + + + MIXER_OBJECTF_HANDLE = 0x80000000; + + + + + MIXER_OBJECTF_MIXER = 0x00000000; + + + + + MIXER_OBJECTF_HMIXER + + + + + MIXER_OBJECTF_WAVEOUT + + + + + MIXER_OBJECTF_HWAVEOUT + + + + + MIXER_OBJECTF_WAVEIN + + + + + MIXER_OBJECTF_HWAVEIN + + + + + MIXER_OBJECTF_MIDIOUT + + + + + MIXER_OBJECTF_HMIDIOUT + + + + + MIXER_OBJECTF_MIDIIN + + + + + MIXER_OBJECTF_HMIDIIN + + + + + MIXER_OBJECTF_AUX + + + + + MIXER_GETCONTROLDETAILSF_VALUE = 0x00000000; + MIXER_SETCONTROLDETAILSF_VALUE = 0x00000000; + + + + + MIXER_GETCONTROLDETAILSF_LISTTEXT = 0x00000001; + MIXER_SETCONTROLDETAILSF_LISTTEXT = 0x00000001; + + + + + MIXER_GETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_SETCONTROLDETAILSF_QUERYMASK = 0x0000000F; + MIXER_GETLINECONTROLSF_QUERYMASK = 0x0000000F; + + + + + MIXER_GETLINECONTROLSF_ALL = 0x00000000; + + + + + MIXER_GETLINECONTROLSF_ONEBYID = 0x00000001; + + + + + MIXER_GETLINECONTROLSF_ONEBYTYPE = 0x00000002; + + + + + MIXER_GETLINEINFOF_DESTINATION = 0x00000000; + + + + + MIXER_GETLINEINFOF_SOURCE = 0x00000001; + + + + + MIXER_GETLINEINFOF_LINEID = 0x00000002; + + + + + MIXER_GETLINEINFOF_COMPONENTTYPE = 0x00000003; + + + + + MIXER_GETLINEINFOF_TARGETTYPE = 0x00000004; + + + + + MIXER_GETLINEINFOF_QUERYMASK = 0x0000000F; + + + + + Mixer Line Flags + + + + + Audio line is active. An active line indicates that a signal is probably passing + through the line. + + + + + Audio line is disconnected. A disconnected line's associated controls can still be + modified, but the changes have no effect until the line is connected. + + + + + Audio line is an audio source line associated with a single audio destination line. + If this flag is not set, this line is an audio destination line associated with zero + or more audio source lines. + + + + + BOUNDS structure + + + + + dwMinimum / lMinimum / reserved 0 + + + + + dwMaximum / lMaximum / reserved 1 + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + METRICS structure + + + + + cSteps / reserved[0] + + + + + cbCustomData / reserved[1], number of bytes for control details + + + + + reserved 2 + + + + + reserved 3 + + + + + reserved 4 + + + + + reserved 5 + + + + + MIXERCONTROL struct + http://msdn.microsoft.com/en-us/library/dd757293%28VS.85%29.aspx + + + + + Represents a mixer line (source or destination) + + + + + Creates a new mixer destination + + Mixer Handle + Destination Index + Mixer Handle Type + + + + Creates a new Mixer Source For a Specified Source + + Mixer Handle + Destination Index + Source Index + Flag indicating the meaning of mixerHandle + + + + Creates a new Mixer Source + + Wave In Device + + + + Mixer Line Name + + + + + Mixer Line short name + + + + + The line ID + + + + + Component Type + + + + + Mixer destination type description + + + + + Number of channels + + + + + Number of sources + + + + + Number of controls + + + + + Is this destination active + + + + + Is this destination disconnected + + + + + Is this destination a source + + + + + Gets the specified source + + + + + Enumerator for the controls on this Mixer Limne + + + + + Enumerator for the sources on this Mixer Line + + + + + The name of the target output device + + + + + Describes this Mixer Line (for diagnostic purposes) + + + + + Mixer Line Component type enumeration + + + + + Audio line is a destination that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_DST_UNDEFINED + + + + + Audio line is a digital destination (for example, digital input to a DAT or CD audio device). + MIXERLINE_COMPONENTTYPE_DST_DIGITAL + + + + + Audio line is a line level destination (for example, line level input from a CD audio device) that will be the final recording source for the analog-to-digital converter (ADC). Because most audio cards for personal computers provide some sort of gain for the recording audio source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_DST_WAVEIN type. + MIXERLINE_COMPONENTTYPE_DST_LINE + + + + + Audio line is a destination used for a monitor. + MIXERLINE_COMPONENTTYPE_DST_MONITOR + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive speakers. This is the typical component type for the audio output of audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_SPEAKERS + + + + + Audio line is an adjustable (gain and/or attenuation) destination intended to drive headphones. Most audio cards use the same audio destination line for speakers and headphones, in which case the mixer device simply uses the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS type. + MIXERLINE_COMPONENTTYPE_DST_HEADPHONES + + + + + Audio line is a destination that will be routed to a telephone line. + MIXERLINE_COMPONENTTYPE_DST_TELEPHONE + + + + + Audio line is a destination that will be the final recording source for the waveform-audio input (ADC). This line typically provides some sort of gain or attenuation. This is the typical component type for the recording line of most audio cards for personal computers. + MIXERLINE_COMPONENTTYPE_DST_WAVEIN + + + + + Audio line is a destination that will be the final recording source for voice input. This component type is exactly like MIXERLINE_COMPONENTTYPE_DST_WAVEIN but is intended specifically for settings used during voice recording/recognition. Support for this line is optional for a mixer device. Many mixer devices provide only MIXERLINE_COMPONENTTYPE_DST_WAVEIN. + MIXERLINE_COMPONENTTYPE_DST_VOICEIN + + + + + Audio line is a source that cannot be defined by one of the standard component types. A mixer device is required to use this component type for line component types that have not been defined by Microsoft Corporation. + MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED + + + + + Audio line is a digital source (for example, digital output from a DAT or audio CD). + MIXERLINE_COMPONENTTYPE_SRC_DIGITAL + + + + + Audio line is a line-level source (for example, line-level input from an external stereo) that can be used as an optional recording source. Because most audio cards for personal computers provide some sort of gain for the recording source line, the mixer device will use the MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY type. + MIXERLINE_COMPONENTTYPE_SRC_LINE + + + + + Audio line is a microphone recording source. Most audio cards for personal computers provide at least two types of recording sources: an auxiliary audio line and microphone input. A microphone audio line typically provides some sort of gain. Audio cards that use a single input for use with a microphone or auxiliary audio line should use the MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE component type. + MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE + + + + + Audio line is a source originating from the output of an internal synthesizer. Most audio cards for personal computers provide some sort of MIDI synthesizer (for example, an Adlib®-compatible or OPL/3 FM synthesizer). + MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER + + + + + Audio line is a source originating from the output of an internal audio CD. This component type is provided for audio cards that provide an audio source line intended to be connected to an audio CD (or CD-ROM playing an audio CD). + MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC + + + + + Audio line is a source originating from an incoming telephone line. + MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE + + + + + Audio line is a source originating from personal computer speaker. Several audio cards for personal computers provide the ability to mix what would typically be played on the internal speaker with the output of an audio card. Some audio cards support the ability to use this output as a recording source. + MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER + + + + + Audio line is a source originating from the waveform-audio output digital-to-analog converter (DAC). Most audio cards for personal computers provide this component type as a source to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination. Some cards also allow this source to be routed to the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT + + + + + Audio line is a source originating from the auxiliary audio line. This line type is intended as a source with gain or attenuation that can be routed to the MIXERLINE_COMPONENTTYPE_DST_SPEAKERS destination and/or recorded from the MIXERLINE_COMPONENTTYPE_DST_WAVEIN destination. + MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY + + + + + Audio line is an analog source (for example, analog output from a video-cassette tape). + MIXERLINE_COMPONENTTYPE_SRC_ANALOG + + + + + Represents a signed mixer control + + + + + Gets details for this contrl + + + + + The value of the control + + + + + Minimum value for this control + + + + + Maximum value for this control + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + + Represents an unsigned mixer control + + + + + Gets the details for this control + + + + + The control value + + + + + The control's minimum value + + + + + The control's maximum value + + + + + Value of the control represented as a percentage + + + + + String Representation for debugging purposes + + + + + Helper methods for working with audio buffers + + + + + Ensures the buffer is big enough + + + + + + + + Ensures the buffer is big enough + + + + + + + + these will become extension methods once we move to .NET 3.5 + + + + + Checks if the buffer passed in is entirely full of nulls + + + + + Converts to a string containing the buffer described in hex + + + + + Decodes the buffer using the specified encoding, stopping at the first null + + + + + Concatenates the given arrays into a single array. + + The arrays to concatenate + The concatenated resulting array. + + + + An encoding for use with file types that have one byte per character + + + + + The one and only instance of this class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chunk Identifier helpers + + + + + Chunk identifier to Int32 (replaces mmioStringToFOURCC) + + four character chunk identifier + Chunk identifier as int 32 + + + + A very basic circular buffer implementation + + + + + Create a new circular buffer + + Max buffer size in bytes + + + + Write data to the buffer + + Data to write + Offset into data + Number of bytes to write + number of bytes written + + + + Read from the buffer + + Buffer to read into + Offset into read buffer + Bytes to read + Number of bytes actually read + + + + Maximum length of this circular buffer + + + + + Number of bytes currently stored in the circular buffer + + + + + Resets the buffer + + + + + Advances the buffer, discarding bytes + + Bytes to advance + + + + A util class for conversions + + + + + linear to dB conversion + + linear value + decibel value + + + + dB to linear conversion + + decibel value + linear value + + + + Allows us to add descriptions to interop members + + + + + The description + + + + + Field description + + + + + String representation + + + + + + Helper to get descriptions + + + + + Describes the Guid by looking for a FieldDescription attribute on the specified class + + + + + HResult + + + + + S_OK + + + + + S_FALSE + + + + + E_INVALIDARG (from winerror.h) + + + + + MAKE_HRESULT macro + + + + + Helper to deal with the fact that in Win Store apps, + the HResult property name has changed + + COM Exception + The HResult + + + + Methods for converting between IEEE 80-bit extended double precision + and standard C# double precision. + + + + + Converts a C# double precision number to an 80-bit + IEEE extended double precision number (occupying 10 bytes). + + The double precision number to convert to IEEE extended. + An array of 10 bytes containing the IEEE extended number. + + + + Converts an IEEE 80-bit extended precision number to a + C# double precision number. + + The 80-bit IEEE extended number (as an array of 10 bytes). + A C# double precision number that is a close representation of the IEEE extended number. + + + + Pass-through stream that ignores Dispose + Useful for dealing with MemoryStreams that you want to re-use + + + + + The source stream all other methods fall through to + + + + + If true the Dispose will be ignored, if false, will pass through to the SourceStream + Set to true by default + + + + + Creates a new IgnoreDisposeStream + + The source stream + + + + Can Read + + + + + Can Seek + + + + + Can write to the underlying stream + + + + + Flushes the underlying stream + + + + + Gets the length of the underlying stream + + + + + Gets or sets the position of the underlying stream + + + + + Reads from the underlying stream + + + + + Seeks on the underlying stream + + + + + Sets the length of the underlying stream + + + + + Writes to the underlying stream + + + + + Dispose - by default (IgnoreDispose = true) will do nothing, + leaving the underlying stream undisposed + + + + + Support for Marshal Methods in both UWP and .NET 3.5 + + + + + SizeOf a structure + + + + + Offset of a field in a structure + + + + + Pointer to Structure + + + + + In-place and stable implementation of MergeSort + + + + + MergeSort a list of comparable items + + + + + MergeSort a list + + + + + General purpose native methods for internal NAudio use + + + + + WavePosition extension methods + + + + + Get Position as timespan + + + + + Manufacturer codes from mmreg.h + + + + Microsoft Corporation + + + Creative Labs, Inc + + + Media Vision, Inc. + + + Fujitsu Corp. + + + Artisoft, Inc. + + + Turtle Beach, Inc. + + + IBM Corporation + + + Vocaltec LTD. + + + Roland + + + DSP Solutions, Inc. + + + NEC + + + ATI + + + Wang Laboratories, Inc + + + Tandy Corporation + + + Voyetra + + + Antex Electronics Corporation + + + ICL Personal Systems + + + Intel Corporation + + + Advanced Gravis + + + Video Associates Labs, Inc. + + + InterActive Inc + + + Yamaha Corporation of America + + + Everex Systems, Inc + + + Echo Speech Corporation + + + Sierra Semiconductor Corp + + + Computer Aided Technologies + + + APPS Software International + + + DSP Group, Inc + + + microEngineering Labs + + + Computer Friends, Inc. + + + ESS Technology + + + Audio, Inc. + + + Motorola, Inc. + + + Canopus, co., Ltd. + + + Seiko Epson Corporation + + + Truevision + + + Aztech Labs, Inc. + + + Videologic + + + SCALACS + + + Korg Inc. + + + Audio Processing Technology + + + Integrated Circuit Systems, Inc. + + + Iterated Systems, Inc. + + + Metheus + + + Logitech, Inc. + + + Winnov, Inc. + + + NCR Corporation + + + EXAN + + + AST Research Inc. + + + Willow Pond Corporation + + + Sonic Foundry + + + Vitec Multimedia + + + MOSCOM Corporation + + + Silicon Soft, Inc. + + + Supermac + + + Audio Processing Technology + + + Speech Compression + + + Ahead, Inc. + + + Dolby Laboratories + + + OKI + + + AuraVision Corporation + + + Ing C. Olivetti & C., S.p.A. + + + I/O Magic Corporation + + + Matsushita Electric Industrial Co., LTD. + + + Control Resources Limited + + + Xebec Multimedia Solutions Limited + + + New Media Corporation + + + Natural MicroSystems + + + Lyrrus Inc. + + + Compusic + + + OPTi Computers Inc. + + + Adlib Accessories Inc. + + + Compaq Computer Corp. + + + Dialogic Corporation + + + InSoft, Inc. + + + M.P. Technologies, Inc. + + + Weitek + + + Lernout & Hauspie + + + Quanta Computer Inc. + + + Apple Computer, Inc. + + + Digital Equipment Corporation + + + Mark of the Unicorn + + + Workbit Corporation + + + Ositech Communications Inc. + + + miro Computer Products AG + + + Cirrus Logic + + + ISOLUTION B.V. + + + Horizons Technology, Inc + + + Computer Concepts Ltd + + + Voice Technologies Group, Inc. + + + Radius + + + Rockwell International + + + Co. XYZ for testing + + + Opcode Systems + + + Voxware Inc + + + Northern Telecom Limited + + + APICOM + + + Grande Software + + + ADDX + + + Wildcat Canyon Software + + + Rhetorex Inc + + + Brooktree Corporation + + + ENSONIQ Corporation + + + FAST Multimedia AG + + + NVidia Corporation + + + OKSORI Co., Ltd. + + + DiAcoustics, Inc. + + + Gulbransen, Inc. + + + Kay Elemetrics, Inc. + + + Crystal Semiconductor Corporation + + + Splash Studios + + + Quarterdeck Corporation + + + TDK Corporation + + + Digital Audio Labs, Inc. + + + Seer Systems, Inc. + + + PictureTel Corporation + + + AT&T Microelectronics + + + Osprey Technologies, Inc. + + + Mediatrix Peripherals + + + SounDesignS M.C.S. Ltd. + + + A.L. Digital Ltd. + + + Spectrum Signal Processing, Inc. + + + Electronic Courseware Systems, Inc. + + + AMD + + + Core Dynamics + + + CANAM Computers + + + Softsound, Ltd. + + + Norris Communications, Inc. + + + Danka Data Devices + + + EuPhonics + + + Precept Software, Inc. + + + Crystal Net Corporation + + + Chromatic Research, Inc + + + Voice Information Systems, Inc + + + Vienna Systems + + + Connectix Corporation + + + Gadget Labs LLC + + + Frontier Design Group LLC + + + Viona Development GmbH + + + Casio Computer Co., LTD + + + Diamond Multimedia + + + S3 + + + Fraunhofer + + + + Summary description for MmException. + + + + + Creates a new MmException + + The result returned by the Windows API call + The name of the Windows API that failed + + + + Helper function to automatically raise an exception on failure + + The result of the API call + The API function name + + + + Returns the Windows API result + + + + + Windows multimedia error codes from mmsystem.h. + + + + no error, MMSYSERR_NOERROR + + + unspecified error, MMSYSERR_ERROR + + + device ID out of range, MMSYSERR_BADDEVICEID + + + driver failed enable, MMSYSERR_NOTENABLED + + + device already allocated, MMSYSERR_ALLOCATED + + + device handle is invalid, MMSYSERR_INVALHANDLE + + + no device driver present, MMSYSERR_NODRIVER + + + memory allocation error, MMSYSERR_NOMEM + + + function isn't supported, MMSYSERR_NOTSUPPORTED + + + error value out of range, MMSYSERR_BADERRNUM + + + invalid flag passed, MMSYSERR_INVALFLAG + + + invalid parameter passed, MMSYSERR_INVALPARAM + + + handle being used simultaneously on another thread (eg callback),MMSYSERR_HANDLEBUSY + + + specified alias not found, MMSYSERR_INVALIDALIAS + + + bad registry database, MMSYSERR_BADDB + + + registry key not found, MMSYSERR_KEYNOTFOUND + + + registry read error, MMSYSERR_READERROR + + + registry write error, MMSYSERR_WRITEERROR + + + registry delete error, MMSYSERR_DELETEERROR + + + registry value not found, MMSYSERR_VALNOTFOUND + + + driver does not call DriverCallback, MMSYSERR_NODRIVERCB + + + more data to be returned, MMSYSERR_MOREDATA + + + unsupported wave format, WAVERR_BADFORMAT + + + still something playing, WAVERR_STILLPLAYING + + + header not prepared, WAVERR_UNPREPARED + + + device is synchronous, WAVERR_SYNC + + + Conversion not possible (ACMERR_NOTPOSSIBLE) + + + Busy (ACMERR_BUSY) + + + Header Unprepared (ACMERR_UNPREPARED) + + + Cancelled (ACMERR_CANCELED) + + + invalid line (MIXERR_INVALLINE) + + + invalid control (MIXERR_INVALCONTROL) + + + invalid value (MIXERR_INVALVALUE) + + +

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 literal 0 HcmV?d00001 diff --git a/packages/NAudio.1.10.0/lib/netcoreapp3.0/NAudio.xml b/packages/NAudio.1.10.0/lib/netcoreapp3.0/NAudio.xml new file mode 100644 index 0000000..05ea008 --- /dev/null +++ b/packages/NAudio.1.10.0/lib/netcoreapp3.0/NAudio.xml @@ -0,0 +1,24652 @@ + + + + NAudio + + + +

Y$E81(7?|-C<(vjE1AN4MX;B(!Lpzs}WY_72PSu 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≷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%0As%l?dl7 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 z zB$h27Fajpc(azT?2_2+wBUW*JfPR%L@7!};FO}*;nnnN3CTnYEv8p=18TmAm`!vm zW-^OD%6|{_#t1T2=bbwyhfy1 z?2le2awrzb_$pl;LW*bi9>GrJ&uCMyyu_EwquPP0FBBUgU>#%m>KMnt>Aq&skb5k# zBK@vDl75e(-=hhRRPOC`d^RBUicpVfV$#0@V${fi!;Geddhs{dEiv8uMNBdr?LMl} zv$?+(ovL^Xt@c~I+fdSbOk5G5m~pER^Hki7MYg0>!X{58jHV8qaUnFS-TO>vk(QPV z3A}KeCl3&3U4Sr8NPnyrWtUcn@DuYA1ZAV$VQxsKgLP&~H}eOOz%yK^dj;m&$`Xb` z!~(N5#@=ZfF76n~=!#^-A%IK#Nl3zVj zrcd=!4ijd41Laak6%dz`WDQ^=oAX#0E^(t-QT~Ws8UTj+ybu~sJS@rx$Mhb`bZHOK zYE18mY_}-aUKi=G>ms(7)}cpM9Z^OL5j#ZWo+E^aXdEO~L3jFfi_9N6&>b(-oumNS zpBWuvncHwn3haulIrzPdPJB(AXt?*v9pocF;^#$~ScgPrKqo5ULaHLH4SdNqlMUn|JGQob~1Z~}uIYDzMK_-+yCT^CAg#doC zYEaQLNx9PQnTZ8WW7KbfWHe+?1otjl1nrNg3G9j7pkK10MF>r6PxftAq}I1)j?vTW zVVzgc2%+yNy?Omn*@B3P6~WKKF~=a{QOmQJ>p>SeL8q}!4|UGsT?v}rxO>g= z3ysb^To16Qv64H+uSwCav=pooYPK+hma*mK7F~)2I8{8y7W2?DKt#90*E`SlV;)a2 zB?e;e$1tC-2-Z-y%W@fo*F}9t;dXDVBd;693q*e9r8HFp`BRtN^*rjMmC)wNMVXI# zt)G$s#V1S&$Qp%z1-aCUT(VXWH0TF)))|FZp(5gKJ`UkY_^HG=vQn-J{JH~3HJqnv zzDm`c-w~hW_y2)V7o(`68Ges#jOy;~_wS}1)&Ak<$r0{vS&ra+(uo?`9I4K8nG_bz zwdsgeW@rWXGm>Ncy;rK>`TRIDC-g3WZ=PO4I}eDl37j#|-v`ig2|8Yat~4+%FO~Af z(vZBdG&C+hC^_@wupqIDB5+&t6%an?I}t>_UN4;_2YY-kSz%16(~XS0r+X4H5PosX zAk5VvhDPhHQrzTwz^-V@6D+m`V88~8_6wrn$zd8If-!joJ9r)#SPVg<;IEtviIc;6 zQuwJ65j0Q)k19?gNRg(6rLbP8M zqCN4+s{+R_tLvESi(;S5ufpPv(b14MANDNnO|Vb5-6sVHs@F%jL<;E8x$Fd|BdNQ8 zBt0M0OiVCcUsDwTU`o48#6}=ZNoJ&?m1M94YEh(@>Ks@1R46fn}ER z81kgbtvEXo!U9Otk>X-@)HP_U5zsy_bJU@^U4}qY0=lD26F}1f8ZTT{Q06`j^DJa7 zYVsh*71h7CviexzRMscLwXdM&Y}r0iL=g)#=_i5&&395&WV$+ZiR>#3#xshHS@tGs zz>9R31kS1`QV1=`S)(Ywr{Mbwe~AZhq|+k9nDx3IDLgLfNItg>YpqjwUMcPf JD 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